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

Introduction to MongoDB on the Shell - Scott Hernandez, Software Engineer, 10gen

mongodb
October 06, 2011

Introduction to MongoDB on the Shell - Scott Hernandez, Software Engineer, 10gen

MongoRaleigh 2011

A general introduction to MongoDB followed by an interactive session using the MongoDB shell with the emphasis on querys and schema design.

About the Speaker: Scott Hernandez is a Software Engineer at 10gen, where he works on the Java driver, customer support, and many other things. He... is also one of the primary authors of Morphia, a Java ODM for MongoDB.

mongodb

October 06, 2011
Tweet

More Decks by mongodb

Other Decks in Technology

Transcript

  1. Release History •  First release – February 2009 •  v1.0

    - August 2009 •  v1.2 - December 2009 – MapReduce, ++ •  v1.4 - March 2010 – Concurrency, Geo •  V1.6 - August 2010 – Sharding, Replica Sets •  V1.8 – March 2011 – Journaling, Geosphere •  V2.0 -- Sep 2011 – V1 Indexes, Concurrency
  2. Types of Non-Relational Data Models •  Key-value stores •  Document

    stores •  Column-oriented databases •  Graph databases
  3. MongoDB vs Traditional RDBMS databases   contain  rows   server

      contain  tables     collections   documents   schema   joins  
  4. Terminology RDBMS   Mongo   Table,  View   Collection  

    Row(s)   JSON  Document   Index   Index   Join   Embedded  Document   Partition   Shard   Partition  Key   Shard  Key  
  5. MongoDB is a Single-Master System •  All writes are to

    a primary (master) •  Failure of the primary is detected, and a new one is elected •  Application writes get an error if there is no quorum to elect a new master •  Reads can continue
  6. Consistency Models •  Relational databases support transactions •  Can only

    see committed changes •  Commits/aborts span multiple changes •  Read-only transaction flavors •  Read committed, repeatable read, etc •  Single vs Multi-Master
  7. Single Master •  All writes go to a single master

    and then replicated •  Replication can provide read scalability •  Writing becomes a bottleneck •  Physical limitations (seek time) •  Throughput of a single I/O subsystem
  8. Single Master - Sharding •  Partition the primary key space

    via hashing •  Set up a duplicate system for each shard •  The write-rate limitation now applies to each shard •  Joins or aggregation across shards are problematic •  Can the data be re-sharded on a live system? •  Can shards be re-balanced on a live system?
  9. MongoDB Storage Management •  Memory-mapped Database files •  Files are

    (pre)allocated as needed •  Indexes (B*-trees) point to documents
  10. Documents Blog Post Document" " p = { author: “sridhar”,"

    date: new Date()," title: “Using the C# driver with MongoDB”," tags: [“NoSQL”, “Mongo”, “MongoDB”]}" " > db.posts.save(p)"
  11. Querying >db.posts.find()" " { _id : ObjectId("4c4ba5c0672c685e5e8aabf3")," author : “sridhar",

    " date : “Mon Jul 11 2011 19:47:11 GMT-0700 (PDT)", " title: “Using the C# driver with MongoDB”," tags: [“NoSQL”, “Mongo”, “MongoDB”]} " "
  12. Secondary Indexes Create index on any Field in Document" "

    // 1 means ascending, -1 means descending" " >db.posts.ensureIndex({author: 1})" " >db.posts.find({author: ʻsridhar'}) " " { _id : ObjectId("4c4ba5c0672c685e5e8aabf3")," author : “sridhar", " ... }"
  13. Query Operators •  Conditional Operators " •  $all, $exists, $mod,

    $ne, $in, $nin, $nor, $or, $size, $type" •  $lt, $lte, $gt, $gte" " // find posts with any tags " > db.posts.find( {tags: {$exists: true }} )" " // find posts matching a regular expression" > db.posts.find( {author: /^sri*/i } )" " // count posts by author" > db.posts.find( {author: ʻsridharʼ} ).count()"
  14. Atomic Operations •  $set, $unset, $inc, $push, $pushAll, $pull, $pullAll,

    $bit" > comment = { author: “fred”, " date: new Date()," text: “Interesting blog post”}" " > db.posts.update( { _id: “...” }, " " "$push: {comments: comment} );" "
  15. Nested Documents { _id : ObjectId("4c4ba5c0672c685e5e8aabf3"), " author : “sridhar","

    date : “Mon Jul 11 2011 19:47:11 GMT-0700 (PDT)", " text : “Using the C# driver with MongoDB"," tags : [ “NoSQL", “Mongo", “MongoDB" ]," comments : [" "{" " "author : "Fred"," " "date : “Mon Jul 11 2011 20:51:03 GMT-0700 (PDT)"," " "text : “Interesting blog post"" "}" ]}"
  16. Indexes // Index nested documents > db.posts.ensureIndex( “comments.author”:1 ) Ø db.posts.find({‘comments.author’:’Fred’})

    // Index on tags > db.posts.ensureIndex( tags: 1) > db.posts.find( { tags: ’Mongo’ } ) // geospatial index > db.posts.ensureIndex( “author.location”: “2d” ) > db.posts.find( “author.location” : { $near : [22,42] } )
  17. MongoDB – More •  Geo-spatial queries •  Require a geo

    index •  Find points near a given point •  Find points within a polygon/sphere •  Built-in Map-Reduce •  The caller provides map and reduce functions written in JavaScript
  18. Scaling MongoDB •  Replication - Read scalability •  Master/Slave • 

    Replica Sets •  Sharding – Read and write scalability •  Collections are sharded •  Each shard is served by its own replica set •  Shard key ranges are automatically balanced
  19. Primary" Secondary" Secondary" Primary" Secondary" Secondary" Primary" Secondary" Secondary" Primary"

    Secondary" Secondary" Key Range" 0..30" Key Range" 31..60" Key Range" 61..90" Key Range" 91.. 100" MongoS" MongoS" MongoS" Read" Write" MongoS"
  20. MongoDB Access •  Drivers are available in many languages • 

    10gen supported •  C, C# (.Net), C++, Erlang, Haskell, Java, JavaScript, Perl, PHP, Python, Ruby, Scala •  Community supported •  Clojure, ColdFusion, F#, Go, Groovy, Lua, R •  http://www.mongodb.org/display/DOCS/Overview+- +Writing+Drivers+and+Tools
  21. MongoDB Availability •  Source •  https://github.com/mongodb/mongo •  Server •  License:

    AGPL •  http://www.mongodb.org/downloads •  Drivers •  License: Apache •  http://www.mongodb.org/display/DOCS/Drivers
  22. @mongodb   ©  Copyright  2010  10gen  Inc.   conferences,  appearances,

     and  meetups   http://www.10gen.com/events     http://bit.ly/mongoQ     Facebook                    |                  Twitter                  |                  LinkedIn   http://linkd.in/joinmongo   download at mongodb.org We’re  Hiring  !   Engineers,  Sales,  Evangelist,  Marketing,  Support,  Developers    
  23. @mongodb   ©  Copyright  2010  10gen  Inc.   conferences,  appearances,

     and  meetups   http://www.10gen.com/events     http://bit.ly/mongoQ     Facebook                    |                  Twitter                  |                  LinkedIn   http://linkd.in/joinmongo   download at mongodb.org We’re  Hiring  !   [email protected]   @snanjund