Your SlideShare is downloading. ×

MongoDB Strange Loop 2009

2,423

Published on

Talk on MongoDB given at the first Strange Loop Conference in St. Louis, October 2009.

Talk on MongoDB given at the first Strange Loop Conference in St. Louis, October 2009.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,423
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
52
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Mike Dirolf, 10gen
    sponsors MongoDB
    Thanks
    Plan:
    A little about what makes MongoDB interesting
    Some flavor for the API / querying possibilities
    Sharding
    Questions
  • C - The client perceives that a set of operations has occurred all at once
    A - Every operation must terminate in an intended response
    P - Operations will complete even if individual components are unavailable

    Horizontal scaling necessitates P, so forced to choose C or A
  • Transaction is all or none
    Consistent state at beginning + end of transaction
    Transaction behaves as if only operation
    Upon completion, operation will not be reversed

    Sacrifice consistency for availability
  • More complex than just Key-Value
    Secondary Indexes
    Embedded Documents
  • Compare to Couch
  • No Separate Caching Layer
  • Master-Slave
    Replica Pairs
    For Failover
  • Infinite Scalability
  • Collection (logical groupings of documents)
    Indexes are per-collection
  • Order Preserving Partitioning
    Split
    Migrate
  • Process Diagram

    Global vs Targeted Operations
    Config Servers Use Two Phase Commit
  • Server Layout
  • blog post
    twitter
  • Transcript

    • 1. open-source, high-performance, schema-free, document-oriented database
    • 2. RDBMS • Great for many applications • Shortcomings • Scalability • Flexibility
    • 3. CAP theorem • Consistency • Availability • Tolerance to network Partitions • Pick two http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf
    • 4. ACID vs BASE • Atomicity • Basically Available • Consistency • Soft state • Isolation • Eventually consistent • Durability
    • 5. Compared to key-value stores
    • 6. Compared to CouchDB
    • 7. JSON-style documents
    • 8. Schema-free • Loosening constraints - added flexibility • Dynamically typed languages • Migrations
    • 9. Dynamic queries • Administration • Ease of development • Familiarity
    • 10. Focus on performance
    • 11. Replication
    • 12. Auto-sharding
    • 13. Many supported platforms / languages
    • 14. Good at • The web • Caching • High volume data • Scalability
    • 15. Less good at • Highly transactional • Ad-hoc business intelligence • Problems that require SQL
    • 16. MongoDB Basics
    • 17. Document • Unit of storage (think row) • BSON (Binary JSON)
    • 18. Collection • Schema-free equivalent of a table • Logical groups of documents • Indexes are per-collection
    • 19. _id • Special key • Present in all documents • Unique across a Collection • Any type you want
    • 20. Blog back-end
    • 21. Post {author: “mike”, date: new Date(), text: “my blog post...”, tags: [“mongodb”, “strange”, “loop”]}
    • 22. Comment {author: “eliot”, date: new Date(), text: “great post!”}
    • 23. New post post = {author: “mike”, date: new Date(), text: “my blog post...”, tags: [“mongodb”, “strange”, “loop”]} db.posts.save(post)
    • 24. Embedding a comment c = {author: “eliot”, date: new Date(), text: “great post!”} db.posts.update({_id: post._id}, {$push: {comments: c}})
    • 25. Posts by author db.posts.find({author: “mike”})
    • 26. Last 10 posts db.posts.find() .sort({date: -1}) .limit(10)
    • 27. Posts in the last week last_week = new Date(2009, 9, 9) db.posts.find({date: {$gt: last_week}})
    • 28. Posts ending with ‘Loop’ db.posts.find({text: /loop$/})
    • 29. Posts with a tag db.posts.find({tag: “mongodb”}) ... and fast db.posts.ensureIndex({tag: 1})
    • 30. Counting posts db.posts.count() db.posts.find({author: “mike”}).count()
    • 31. Basic paging page = 2 page_size = 15 db.posts.find().limit(page_size) .skip(page * page_size)
    • 32. Migration: adding titles • Easy - just start adding them: post = {author: “mike”, date: new Date(), text: “another blog post...”, tags: [“strange”, “loop”], title: “Review from Strange Loop”} post_id = db.posts.save(post)
    • 33. Advanced queries • $gt, $lt, $gte, $lte, $ne, $all, $in, $nin • where() db.posts.find({$where: “this.author == ‘mike’”})
    • 34. Sharding
    • 35. Terminology • Shard key • Chunk • Range of the value space • (collection, key, min_val, max_val) • Shard • Single node (or replica pair) • Responsible for set of chunks
    • 36. Other cool stuff • Aggregation and map reduce • Capped collections • Unique indexes • Mongo shell • GridFS
    • 37. • Download MongoDB http://www.mongodb.org • Try it out • Let us know what you think!
    • 38. • http://www.mongodb.org • irc.freenode.net#mongodb • mongodb-user on google groups • @mongodb, @mdirolf • mike@10gen.com • http://www.slideshare.net/mdirolf

    ×