Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Welcome and Keynote Aaron Heckman, 10gen

Avatar for mongodb mongodb
August 16, 2012
470

Welcome and Keynote Aaron Heckman, 10gen

Avatar for mongodb

mongodb

August 16, 2012
Tweet

Transcript

  1. Data model • Relational Product Product Product _id name created_at

    Product_Attribute Product_Attribute Product_Attribute Product_Attribute _id product_id key val Wednesday, August 15, 12
  2. Data model • Relational • assembly required Product Product Product

    _id name created_at Product_Attribute Product_Attribute Product_Attribute Product_Attribute _id product_id key val Wednesday, August 15, 12
  3. Data model • Relational • assembly required • app model

    != storage model Wednesday, August 15, 12
  4. Data model • Document oriented • JSON-like • BSON •

    basically typed JSON • number, string, binary, array, etc Wednesday, August 15, 12
  5. Data model Document oriented { _id: ObjectId(“..”) , name: “Panthers

    T-shirt” , created_at: ISODate("2012-08-15T15:42:09.195Z") } Wednesday, August 15, 12
  6. Data model Document oriented { _id: ObjectId(“..”) , name: “Panthers

    T-shirt” , created_at: ISODate("2012-08-15T15:42:09.195Z") , props: [{ key: ‘string’, val: anything }] } Wednesday, August 15, 12
  7. Data model Ad-hoc query support • find, findOne • accept

    a conditions object • regular expressions • numbers • strings • etc Wednesday, August 15, 12
  8. Data model Ad-hoc query support • find, findOne • accept

    a conditions object • regular expressions • numbers • strings • etc • rich operators • $lt, $gt, $in, $ne, ... Wednesday, August 15, 12
  9. Data model • Document oriented • Ad-hoc query support •

    Secondary indexing Wednesday, August 15, 12
  10. Data model Secondary indexing • createIndex() • accepts an object

    • options • unique, sparse, 2d, expiresAfterSeconds Wednesday, August 15, 12
  11. Data model: gains • Dynamic schemas • Data modeled directly

    to app • Retain ad-hoc queries Wednesday, August 15, 12
  12. Data model: gains • Dynamic schemas • Data modeled directly

    to app • Retain ad-hoc queries • Retain secondary indexing Wednesday, August 15, 12
  13. Data model: gains • Dynamic schemas • Data modeled directly

    to app • Retain ad-hoc queries • Retain secondary indexing • Productivity Wednesday, August 15, 12
  14. Data model: losses • Joins • Multi-collection transactions • use

    document level $atomics Wednesday, August 15, 12
  15. Replication • read from master or replicas • all writes

    go to master Wednesday, August 15, 12
  16. Replication • read from master or replicas • all writes

    go to master • configurable • getLastError { w: ‘majority’ } Wednesday, August 15, 12
  17. Sharding • scale horizontally • range based partition mechanism •

    shard key • apps talk to shard set-ups the same way Wednesday, August 15, 12
  18. Mongo 2.2 • Concurrency improvements • Tag aware sharding •

    TTL collections • ensureIndex({ date: 1 }, { expiresAfterSeconds: 60*15 }) • cannot be compound • cannot be used on capped collections Wednesday, August 15, 12
  19. Mongo 2.2 • Concurrency improvements • Tag aware sharding •

    TTL collections • Aggregation ... Wednesday, August 15, 12
  20. Map Reduce • Complex analytics on big data • Distributed

    computing on clusters of machines A LARGE hammer Wednesday, August 15, 12
  21. The Aggregation Command db.runCommand({ aggregate : "article" , pipeline :

    [ {$op1, $op2, ...} ] }); Wednesday, August 15, 12
  22. The Aggregation Command • Takes two arguments db.runCommand({ aggregate :

    "article" , pipeline : [ {$op1, $op2, ...} ] }); Wednesday, August 15, 12
  23. The Aggregation Command • Takes two arguments • aggregate: name

    of collection db.runCommand({ aggregate : "article" , pipeline : [ {$op1, $op2, ...} ] }); Wednesday, August 15, 12
  24. The Aggregation Command • Takes two arguments • aggregate: name

    of collection • pipeline: array of operations db.runCommand({ aggregate : "article" , pipeline : [ {$op1, $op2, ...} ] }); Wednesday, August 15, 12
  25. Aggregation helper db.article.aggregate( { $pipeline_op1 } , { $pipeline_op2 }

    , { $pipeline_op3 } , { $pipeline_op4 } , ... ); Wednesday, August 15, 12
  26. Pipeline Operations • $match • query predicate - coll.find(predicate) •

    $project • reshapes results • include / exclude fields • computed fields Wednesday, August 15, 12
  27. Pipeline Operations • $match • query predicate - coll.find(predicate) •

    $project • reshapes results • $unwind • hands out array elements one at a time in the context of their surrounding documents Wednesday, August 15, 12
  28. Pipeline Operations • $match • query predicate - coll.find(predicate) •

    $project • reshapes results • $unwind • hands out array elements one at a time • $group • aggregates docs into buckets defined by a key Wednesday, August 15, 12
  29. Pipeline Operations • $group aggregation expressions • _id is the

    group key • $sum • $avg • $push, $addToSet • more.. • $min, $max, $first, $last Wednesday, August 15, 12
  30. Pipeline Operations • $sort • sorts documents • $limit •

    caps the number of documents • $skip • steps over the specified number of documents Wednesday, August 15, 12
  31. Computed Expressions • Available in $project operations • Prefix expression

    language • Add two fields: • $add: [“$field1”, “$field2”] Wednesday, August 15, 12
  32. Computed Expressions • Available in $project operations • Prefix expression

    language • Add two fields: • $add: [“$field1”, “$field2”] • Provide a value for a missing field: • $ifNull: [“$field1”, “$field2”] Wednesday, August 15, 12
  33. Computed Expressions • Available in $project operations • Prefix expression

    language • Add two fields: • $add: [“$field1”, “$field2”] • Provide a value for a missing field: • $ifNull: [“$field1”, “$field2”] • Nesting: • $add: [“$field1”, $ifNull: [“$field2”, “$field3”]] Wednesday, August 15, 12
  34. Computed Expressions • String functions • toUpper, toLower, substr, strcasecmp

    • Date field extraction and arithmetic • Get year, month, day, hour, etc, from dates Wednesday, August 15, 12
  35. Computed Expressions • String functions • toUpper, toLower, substr, strcasecmp

    • Date field extraction and arithmetic • Get year, month, day, hour, etc, from dates • Ternary conditional • Return one of two values based on a predicate Wednesday, August 15, 12
  36. Usage Tips • Use $match as early as possible •

    $sort (memory) Wednesday, August 15, 12
  37. Usage Tips • Use $match as early as possible •

    $sort (memory) • $group • like $sort but not as much memory is needed Wednesday, August 15, 12
  38. Sharding support • Mongos • forwards ops up to first

    $group or $sort to shards Wednesday, August 15, 12
  39. Sharding support • Mongos • forwards ops up to first

    $group or $sort to shards • combines shard server results and continues Wednesday, August 15, 12