Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

45
What's New in MongoDB 2.4

description

Standard 10gen "What's new in MongoDB" 2.4 delivered at an enthusiastic MongoDB user group in Copenhagen.

Transcript of Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Page 1: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

What's New in MongoDB 2.4

Page 2: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Improvements made across…

•  Development

•  Operations

•  Performance

•  Security

•  Enterprise Features

Page 3: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

MongoDB 2.4 Developer Improvements

Page 4: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Geospatial

Page 5: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

New Geospatial Features

•  Polygon intersections

•  More accurate spherical model

•  $near and $within work with Aggregation Framework

•  Analytics now location-aware

Page 6: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

GeoJSON

•  Geospatial interchange format based on JSON

•  Supports Points, LineStrings & Polygons

•  Complete spec available at http://geojson.org

Page 7: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Point1 = {

type : "Point",

coordinates : [-73.947807, 40.663973]

}

somePoly = {

type : "Polygon",

coordinates : [[[40,5], [40,6],

[41,6], [41,5], [40,5]]]

}

GeoJSON

Page 8: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

$GeoIntersects

•  Leverages GeoJSON

•  Geospatial query operator that selects all locations that intersect with a GeoJSON object

•  Uses spherical geometry

Page 9: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

point1 = { type: "Point", coordinates: [40, 5.5]}

line1 = { type: "LineString",

coordinates: [[40, 3.5], [40, 4.5]]};

somePoly = { type : "Polygon",

coordinates : [[[40,5], [40,6],

[41,6], [41,5], [40,5]]]};

res = c.find({ geo : {

"$geoIntersects" :

{"$geometry" : somePoly}

}});

$GeoIntersects

Page 10: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Aggregation Framework

Page 11: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

New Aggregation Framework Features •  Introduced in 2.2, came of age in 2.4

•  Performance Improvements •  3 – 5 x faster

•  Geo $near and $within support

•  $concat support

•  Support for Binary Data (pass through)

Page 12: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Text Search (beta)

Page 13: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Text Search (beta)

•  Real-time indexes

•  Case-insensitive

•  Stemming, tokenization & stop words for 15 languages

•  Index size is comparable with other full text search implementations (larger than standard MongoDB indexes)

•  BETA status… please use in dev & give feedback

Page 14: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Stemming Examples

•  { walk, walked, walking, walks } ⇒ walk

•  {magazine, magazines, magazine’s } ⇒ magazine

•  {runs, running, run, ran } ⇒ { run, ran }

Page 15: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Examples of English Stop Words

{ am, themselves, of, before, here, while, what's, myself, ought, me, the, into, about, this, do, can't, a, ... }

Page 16: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Option 1: on the command line

$ mongod --setParameter textSearchEnabled=true

Option 2: as admin command to mongod or mongos

> db.adminCommand(

{ setParameter: 1, textSearchEnabled: true }

)

Enabling Text Search

Page 17: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

db.t.ensureIndex( { title: "text", post: "text" }, { weights: { title: 10, post: 5 }} )

Create a Text Search Index

Page 18: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

db.t.runCommand( "text", { search: "\"my first blog entry\"" } );

Run a Text Search Command

Page 19: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

{ "queryDebugString":"blog|entri|first||||my first blog entry||", "language" : "english", "results" : [{ "score" : 12, "obj" : { "_id" : 1, "title" : "1st post", "post" : "this is my first blog entry." }}], "stats" : { "nscanned" : 7, "nscannedObjects" : 0, "n" : 0, "nfound" : 1, "timeMicros" : 122 }, "ok" : 1 }

Text Search Result

Note: debug string shows the stemmed terms, stop-words deleted

Page 20: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

New Update Operators

Page 21: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Capped Arrays

•  Provides the ability to manipulate arrays with more control than ever before

•  $push now supports the following:

•  $each permits pushing multiple entries onto an array

•  $slice maintains a fixed size array

•  Can be stacked with $sort

Page 22: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

db.students.update(!

{ _id: 1 },!

{ $push: {!

scores: {!

$each: [!

{ attempt: 3, score: 7 },!

{ attempt: 4, score: 4 } ],!

$sort: { score: 1 },!

$slice: -3!

}!

}}!

)

Top 3 Scores

Page 23: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

New Upsert Operator

Page 24: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

db.products.update(!

{ _id: 1 },!

{ $setOnInsert: { defaultQty: 500, inStock: true },!

$set: { item: "apple" } },!

{ upsert: true }!

)

$setOnInsert

Page 25: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

MongoDB 2.4 Operational Improvements

Page 26: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Hash-based Sharding

Page 27: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Hash-based Sharding •  Easier to manage clusters

•  Less rebalancing  •  More event distribution for reads and writes

•  Lower potential performance from range based, but more consistent.

•  The hash stored in the hashed index is 64 bits of the 128 bit md5 hash

•  MongoDB can use the hashed index to support equality queries, but hashed indexes do not support range queries.

Page 28: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

db.activeCollection.ensureIndex( { field_to_hash: "hashed" } )

Creating a Hashed Shard Key

Page 29: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Working Set Analyzer

Page 30: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Working Set Analyzer

•  Working Set: The set of data kept in memory

•  MongoDB performance best when working set < RAM

•  Working set analyzer measures resources used over time

•  Leads to more efficient MongoDB usage

Page 31: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

db.serverStatus( { workingSet: 1 } )

db.runCommand( { serverStatus: 1, workingSet: 1 } )

"workingSet" : {

"note" : "thisIsAnEstimate",

"pagesInMemory" : <num>,

"computationTimeMicros" : <num>,

"overSeconds" : num

},

MongoStatus

Page 32: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Index Operation Management

Page 33: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Index Operation Management

•  A single mongod instance can build multiple indexes in the background at the same time.

•  db.killOp() can now kill foreground index builds

•  Improved validation of index types

Page 34: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

db.currentOp() { "inprog" : [ { "opid" : 45, "active" : true, "secs_running" : 2, "op" : "insert", "ns" : "test.system.indexes", ... }] } db.killOp(45)

Index Operation Management

Page 35: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Replication Improvements

Page 36: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Role Based Privileges

Replication Improvements

•  Better detection of network hiccups (less false negatives)

•  Faster initial sync when adding new secondary

Page 37: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

MongoDB 2.4 Performance Improvements

Page 38: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

V8 JavaScript Engine

•  Affects all JS processing including MapReduce, the shell and $where queries 

•  Greater concurrency

•  User feedback very positive indicating dramatic improvement in overall processing time with new V8

Page 39: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Improvements All Over

•  Aggregation 3x – 5x faster

•  Faster Counting – Low-cardinality index-based counts up to 20x faster – Better performance on counting, e.g., count all the

males/females in my user list

•  Faster $elemMatch

Page 40: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

MongoDB 2.4 Security Improvements

Page 41: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Role Based Privileges

Role Based Privileges

•  Builds on access controls introduced in 2.2

•  Users granted roles that have specific privileges per database

•  Users can have multiple roles

•  Roles include –  read –  readWrite –  userAdmin –  dbAdmin –  clusterAdmin

Page 42: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Role Based Privileges

Enhanced SSL Support

•  Supported in open source edition of MongoDB

•  Must be compiled using --ssl flag

•  Uses a standard .pem file that contains the SSL certificate and key

•  Complete directions available in the MongoDB documentation http://docs.mongodb.org/manual/administration/ssl/

Page 43: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Introducing MongoDB Enterprise 2.4

Page 44: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

MongoDB Enterprise •  Advanced Security

–  Kerberos authentication protocol –  SSL support built in

•  Monitoring –  On-Prem Monitoring - visualization, alerts on 100+ system metrics –  Includes same features as (MMS)

•  Enterprise Software Integration –  SNMP supports integration w/popular monitoring tools (e.g., Nagios )

•  Certified OS Support –  Red Hat/CentOS, Ubuntu and Amazon Linux

Page 45: Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19

Subscriptions

Basic Standard Enterprise

Edition MongoDB MongoDB MongoDB Enterprise

SLA 4 hours 1 Hour 30 Minutes

Support 9am – 9pm ET

M – F 24x7x365 24x7x365

License AGPL Commercial Commercial

Price per Host $2,500 $5,000 $7,500