CTO, 10gen
Eliot Horowitz
What's New in MongoDB
2.4
Improvements made across…
• Development
• Operations
• Performance
• Security
• Enterprise Features
MongoDB 2.4
Developer Improvements
Geospatial
New Geospatial Features
• Polygon intersections
• More accurate spherical model
• $near and $within work with Aggregation
Framework
• Analytics now location-aware
GeoJSON
• Geospatial interchange format based on JSON
• Supports Points, LineStrings & Polygons
• Complete spec available at http://geojson.org
Point1 = {
type : "Point",
coordinates : [-73.947807, 40.663973]
}
somePoly = {
type : "Polygon",
coordinates : [[[40,5], [40,6],
[41,6], [41,5], [40,5]]]
}
GeoJSON
$GeoIntersects
• Leverages GeoJSON
• Geospatial query operator that selects all
locations that intersect with a GeoJSON object
• Uses spherical geometry
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
Aggregation Framework
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)
Text Search (beta)
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
Stemming Examples
• { walk, walked, walking, walks } ⇒ walk
• {magazine, magazines, magazine’s } ⇒
magazine
• {runs, running, run, ran } ⇒ { run, ran }
Examples of English Stop
Words
{
am, themselves, of, before, here, whi
le, what's, myself, ought, me, the, int
o, about, this, do, can't, a, ... }
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
db.t.ensureIndex(
{ title: "text", post: "text" },
{ weights: { title: 10, post: 5 }}
)
Create a Text Search Index
db.t.runCommand(
"text",
{ search: ""my first blog entry"" }
);
Run a Text Search Command
{
"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
New Update Operators
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
db.students.update(
{ _id: 1 },
{ $push: {
scores: {
$each: [
{ attempt: 3, score: 7 },
{ attempt: 4, score: 4 } ],
$sort: { score: 1 },
$slice: -3
}
}}
)
Top 3 Scores
New Upsert Operator
db.products.update(
{ _id: 1 },
{ $setOnInsert: { defaultQty: 500, inStock: true },
$set: { item: "apple" } },
{ upsert: true }
)
$setOnInsert
MongoDB 2.4
Operational Improvements
Hash-based Sharding
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.
db.activeCollection.ensureIndex(
{ field_to_hash: "hashed" }
)
Creating a Hashed Shard Key
Working Set Analyzer
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
db.serverStatus( { workingSet: 1 } )
db.runCommand( { serverStatus: 1, workingSet: 1 } )
"workingSet" : {
"note" : "thisIsAnEstimate",
"pagesInMemory" : <num>,
"computationTimeMicros" : <num>,
"overSeconds" : num
},
MongoStatus
Index Operation
Management
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
db.currentOp()
{
"inprog" : [ {
"opid" : 45,
"active" : true,
"secs_running" : 2,
"op" : "insert",
"ns" : "test.system.indexes",
...
}]
}
db.killOp(45)
Index Operation Management
Replication
Improvements
Role Based Privileges
Replication Improvements
• Better detection of network hiccups (less false
negatives)
• Faster initial sync when adding new secondary
MongoDB 2.4
Performance
Improvements
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
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
MongoDB 2.4
Security Improvements
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
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/
Introducing MongoDB
Enterprise 2.4
MongoDB Enterprise
• Advanced Security
– Kerberos authentication protocol
– SSLsupportbuilt in
• Monitoring
– On-PremMonitoring- visualization,alerts on 100+ system metrics
– Includes same featuresas (MMS)
• Enterprise Software Integration
– SNMPsupports integration w/popularmonitoring tools (e.g., Nagios )
• Certified OS Support
– Red Hat/CentOS,Ubuntu andAmazon Linux
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

Whats new in MongoDB 24

  • 1.
  • 2.
    Improvements made across… •Development • Operations • Performance • Security • Enterprise Features
  • 3.
  • 4.
  • 5.
    New Geospatial Features •Polygon intersections • More accurate spherical model • $near and $within work with Aggregation Framework • Analytics now location-aware
  • 6.
    GeoJSON • Geospatial interchangeformat based on JSON • Supports Points, LineStrings & Polygons • Complete spec available at http://geojson.org
  • 7.
    Point1 = { type: "Point", coordinates : [-73.947807, 40.663973] } somePoly = { type : "Polygon", coordinates : [[[40,5], [40,6], [41,6], [41,5], [40,5]]] } GeoJSON
  • 8.
    $GeoIntersects • Leverages GeoJSON •Geospatial query operator that selects all locations that intersect with a GeoJSON object • Uses spherical geometry
  • 9.
    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
  • 10.
  • 11.
    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)
  • 12.
  • 13.
    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
  • 14.
    Stemming Examples • {walk, walked, walking, walks } ⇒ walk • {magazine, magazines, magazine’s } ⇒ magazine • {runs, running, run, ran } ⇒ { run, ran }
  • 15.
    Examples of EnglishStop Words { am, themselves, of, before, here, whi le, what's, myself, ought, me, the, int o, about, this, do, can't, a, ... }
  • 16.
    Option 1: onthe command line $ mongod --setParameter textSearchEnabled=true Option 2: as admin command to mongod or mongos > db.adminCommand( { setParameter: 1, textSearchEnabled: true } ) Enabling Text Search
  • 17.
    db.t.ensureIndex( { title: "text",post: "text" }, { weights: { title: 10, post: 5 }} ) Create a Text Search Index
  • 18.
    db.t.runCommand( "text", { search: ""myfirst blog entry"" } ); Run a Text Search Command
  • 19.
    { "queryDebugString":"blog|entri|first||||my first blogentry||", "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
  • 20.
  • 21.
    Capped Arrays • Providesthe 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
  • 22.
    db.students.update( { _id: 1}, { $push: { scores: { $each: [ { attempt: 3, score: 7 }, { attempt: 4, score: 4 } ], $sort: { score: 1 }, $slice: -3 } }} ) Top 3 Scores
  • 23.
  • 24.
    db.products.update( { _id: 1}, { $setOnInsert: { defaultQty: 500, inStock: true }, $set: { item: "apple" } }, { upsert: true } ) $setOnInsert
  • 25.
  • 26.
  • 27.
    Hash-based Sharding • Easierto 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.
  • 28.
  • 29.
  • 30.
    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
  • 31.
    db.serverStatus( { workingSet:1 } ) db.runCommand( { serverStatus: 1, workingSet: 1 } ) "workingSet" : { "note" : "thisIsAnEstimate", "pagesInMemory" : <num>, "computationTimeMicros" : <num>, "overSeconds" : num }, MongoStatus
  • 32.
  • 33.
    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
  • 34.
    db.currentOp() { "inprog" : [{ "opid" : 45, "active" : true, "secs_running" : 2, "op" : "insert", "ns" : "test.system.indexes", ... }] } db.killOp(45) Index Operation Management
  • 35.
  • 36.
    Role Based Privileges ReplicationImprovements • Better detection of network hiccups (less false negatives) • Faster initial sync when adding new secondary
  • 37.
  • 38.
    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
  • 39.
    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
  • 40.
  • 41.
    Role Based Privileges RoleBased 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
  • 42.
    Role Based Privileges EnhancedSSL 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/
  • 43.
  • 44.
    MongoDB Enterprise • AdvancedSecurity – Kerberos authentication protocol – SSLsupportbuilt in • Monitoring – On-PremMonitoring- visualization,alerts on 100+ system metrics – Includes same featuresas (MMS) • Enterprise Software Integration – SNMPsupports integration w/popularmonitoring tools (e.g., Nagios ) • Certified OS Support – Red Hat/CentOS,Ubuntu andAmazon Linux
  • 45.
    Subscriptions Basic Standard Enterprise EditionMongoDB 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

Editor's Notes

  • #24 The following update uses the $push operator with:the $each modifier to append to the array 2 new elements,the $sort modifier to order the elements by ascending (1) score, andthe $slice modifier to keep the last 3 elements of the ordered array.