whats new in mongodb 24
DESCRIPTION
An overview of what's new in MonTRANSCRIPT
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, while, what's, myself, ought, me, the, into, 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– 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
Subscriptions
Basic Standard Enterprise
Edition MongoDB MongoDB MongoDB Enterprise
SLA 4 hours 1 Hour 30 Minutes
Support9am – 9pm ET
M – F 24x7x365 24x7x365
License AGPL Commercial Commercial
Price per Host
$2,500 $5,000 $7,500