Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introduction to MongoDB

32,200 views

Published on

Intro to MongoDB given 4/2010 at Philly ETE

Published in: Technology

Introduction to MongoDB

  1. 1. open-­‐source,  high-­‐performance,   document-­‐oriented  database
  2. 2. Non-relational Operational Stores (“NoSQL”) New Gen. OLAP RDBMS (vertica,  aster,  greenplum) (Oracle,  MySQL)
  3. 3. NoSQL Really Means: non-­‐relational,  next-­‐generation   operational  datastores  and  databases
  4. 4. no  joins + no  complex  transactions Horizontally Scalable Architectures
  5. 5. no  joins + no  complex  transactions New Data Models
  6. 6. New Data Models improved  ways  to  develop  applications?
  7. 7. Data Models Key  /  Value memcached,  Dynamo Tabular BigTable Document  Oriented MongoDB,  CouchDB,  JSON  stores
  8. 8. • memcached scalability  &  performance • key/value • RDBMS depth  of  functionality
  9. 9. JSON-style Documents represented  as  BSON {“hello”:  “world”} x16x00x00x00x02hello x00x06x00x00x00world x00x00 http://bsonspec.org
  10. 10. Flexible “Schemas” {“author”:  “eliot”, {“author”:  “mike”,  “text”:  “...”,  “text”:  “...”}  “tags”:  [“mongodb”]}
  11. 11. Dynamic Queries
  12. 12. Atomic Update Modifiers
  13. 13. Focus on Performance
  14. 14. Replication master slave master master slave slave slave slave master master slave master
  15. 15. Auto-sharding Shards mongod mongod mongod ... Config mongod mongod mongod Servers mongod mongod mongod mongos mongos ... client
  16. 16. Many Supported Platforms / Languages
  17. 17. Best Use Cases T Scaling  Out Caching The  Web High  Volume
  18. 18. Less Good At highly  transactional ad-­‐hoc  business  intelligence problems  that  require  SQL
  19. 19. A Quick Aside _id special  key present  in  all  documents unique  across  a  Collection any  type  you  want
  20. 20. Post {author:  “mike”,  date:  new  Date(),  text:  “my  blog  post...”,  tags:  [“mongodb”,  “intro”]}
  21. 21. Comment {author:  “eliot”,  date:  new  Date(),  text:  “great  post!”}
  22. 22. New Post post  =  {author:  “mike”,    date:  new  Date(),    text:  “my  blog  post...”,    tags:  [“mongodb”,  “intro”]} db.posts.save(post)
  23. 23. Embedding a Comment c  =  {author:  “eliot”,    date:  new  Date(),    text:  “great  post!”} db.posts.update({_id:  post._id},                                  {$push:  {comments:  c}})
  24. 24. Posts by Author db.posts.find({author:  “mike”})
  25. 25. Last 10 Posts db.posts.find()                .sort({date:  -­‐1})                .limit(10)
  26. 26. Posts Since April 1 april_1  =  new  Date(2010,  3,  1) db.posts.find({date:  {$gt:  april_1}})
  27. 27. Posts Ending With ‘Tech’ db.posts.find({text:  /Tech$/})
  28. 28. Posts With a Tag db.posts.find({tags:  “mongodb”}) ...and Fast (multi-­‐key  indexes) db.posts.ensureIndex({tags:  1})
  29. 29. Indexing / Querying on Embedded Docs (dot  notation) db.posts.ensureIndex({“comments.author”:  1}) db.posts.find({“comments.author”:  “eliot”})
  30. 30. Counting Posts db.posts.count() db.posts.find({author:  “mike”}).count()
  31. 31. Basic Paging page  =  2 page_size  =  15 db.posts.find().limit(page_size)                              .skip(page  *  page_size)
  32. 32. Migration: Adding Titles (just  start  adding  them) post  =  {author:  “mike”,                date:  new  Date(),                text:  “another  blog  post...”,                tags:  [“mongodb”],              title:  “MongoDB  for  Fun  and  Profit”} post_id  =  db.posts.save(post)
  33. 33. Advanced Queries $gt,  $lt,  $gte,  $lte,  $ne,  $all,  $in,  $nin db.posts.find({$where:  “this.author  ==  ‘mike’  ||                                                this.title  ==  ‘foo’”})
  34. 34. Other Cool Stuff aggregation  and  map/reduce capped  collections unique  indexes mongo  shell GridFS geo
  35. 35. slides  will  be  up  on  http://dirolf.com Download MongoDB http://www.mongodb.org and  let  us  know  what  you  think @mdirolf        @mongodb

×