Building applications with MongoDB –                       An introduction                         Roger Bodamer          ...
Today’s Talk• Developing your first Web Application with MongoDB• What is MongoDB, Platforms and availability• Data Modeli...
Why MongoDB• Intrinsic support for agile development• Super low latency access to your data   – Very little CPU overhead• ...
MongoDB• Document Oriented Database  – Data is stored in documents, not tables / relations• MongoDB is Implemented in C++ ...
Design• Want to build an app where users can check in to a  location• Leave notes or comments about that location• Iterati...
Requirements• Locations   – Need to store locations (Offices, Restaurants etc)     • Want to be able to store name, addres...
Requirements• Locations   – Need to store locations (Offices, Restaurants etc)     • Want to be able to store name, addres...
TerminologyRDBMS           MongoTable, View     CollectionRow(s)          JSON DocumentIndex           IndexJoin          ...
Collectionsloc1, loc2, loc3                 User1, User2    Locations                      Users
JSON Sample Doc { _id : ObjectId("4c4ba5c0672c685e5e8aabf3"),   author : "roger",   date : "Sat Jul 24 2010 19:47:11 GMT-0...
BSON• JSON has powerful, but limited set of datatypes   – Mongo extends datypes with Date, Int types, Id, …• MongoDB store...
Locations v1location1= {    name: "10gen East Coast”,    address: ”134 5th Avenue 3rd Floor”,    city: "New York”,    zip:...
Places v1location1= {    name: "10gen East Coast”,    address: ”134 5th Avenue 3rd Floor”,    city: "New York”,    zip: "1...
Places v2location1 = {    name: "10gen East Coast”,    address: "17 West 18th Street 8th Floor”,    city: "New York”,    z...
Places v2location1 = {    name: "10gen East Coast”,    address: "17 West 18th Street 8th Floor”,    city: "New York”,    z...
Places v3location1 = {    name: "10gen East Coast”,    address: "17 West 18th Street 8th Floor”,    city: "New York”,    z...
Places v3location1 = {    name: "10gen East Coast”,    address: "17 West 18th Street 8th Floor”,    city: "New York”,    z...
location1 = {                    Places v3    name: "10gen HQ”,    address: "17 West 18th Street 8th Floor”,    city: "New...
location1 = {                    Places v4    name: "10gen HQ”,    address: "17 West 18th Street 8th Floor”,    city: "New...
Querying your PlacesCreating your indexesdb.locations.ensureIndex({tags:1})db.locations.ensureIndex({name:1})db.locations....
Inserting and updating                locationsInitial data load:db.locations.insert(place1)Using update to Add tips:db.lo...
Requirements• Locations   – Need to store locations (Offices, Restaurants etc)     • Want to be able to store name, addres...
Usersuser1 = {    name: “nosh”    email: “nosh@10gen.com”,    .    .    .    checkins: [{ location: “10gen HQ”,           ...
Simple Statsdb.users.find({‘checkins.location’: “10gen HQ”)db.checkins.find({‘checkins.location’: “10gen HQ”})            ...
Alternativeuser1 = {    name: “nosh”    email: “nosh@10gen.com”,    .    .    .    checkins: [4b97e62bf1d8c7152c9ccb74, 5a...
User Check inCheck-in = 2 ops    read location to obtain location id    Update ($push) location id to user objectQueries: ...
Unsharded Deployment            •Configure as a replica set for automatedPrimary            failover            •Async rep...
Sharded Deployment                           MongoS                                                      config PrimarySec...
Use Cases •RDBMS replacement for high-traffic web applications        •Content Management-type applications               ...
10Gen is hiring!                       @mongodb                     roger@10gen.com                         @rogerbhttp://...
Upcoming SlideShare
Loading in...5
×

Building web applications with mongo db presentation

3,121

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,121
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
63
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Building web applications with mongo db presentation

  1. 1. Building applications with MongoDB – An introduction Roger Bodamer roger@10gen.com @rogerbhttp://mongodb.orghttp://10gen.com
  2. 2. Today’s Talk• Developing your first Web Application with MongoDB• What is MongoDB, Platforms and availability• Data Modeling, queries and geospatial queries• Location bases App• Example uses MongoDB Javascript shell
  3. 3. Why MongoDB• Intrinsic support for agile development• Super low latency access to your data – Very little CPU overhead• No Additional caching layer required• Built in Replication and Horizontal Scaling support
  4. 4. MongoDB• Document Oriented Database – Data is stored in documents, not tables / relations• MongoDB is Implemented in C++ for best performance• Platforms 32/64 bit Windows Linux, Mac OS-X, FreeBSD, Solaris• Language drivers for: – Ruby / Ruby-on-Rails – Java – C# – JavaScript – C / C++ – Erlang Python, Perl others..... and much more ! ..
  5. 5. Design• Want to build an app where users can check in to a location• Leave notes or comments about that location• Iterative Approach: – Decide requirements – Design documents – Rinse, repeat :-)
  6. 6. Requirements• Locations – Need to store locations (Offices, Restaurants etc) • Want to be able to store name, address and tags • Maybe User Generated Content, i.e. tips / small notes ? – Want to be able to find other locations nearby
  7. 7. Requirements• Locations – Need to store locations (Offices, Restaurants etc) • Want to be able to store name, address and tags • Maybe User Generated Content, i.e. tips / small notes ? – Want to be able to find other locations nearby• Checkins – User should be able to ‘check in’ to a location – Want to be able to generate statistics
  8. 8. TerminologyRDBMS MongoTable, View CollectionRow(s) JSON DocumentIndex IndexJoin Embedded DocumentPartition ShardPartition Key Shard Key
  9. 9. Collectionsloc1, loc2, loc3 User1, User2 Locations Users
  10. 10. JSON Sample Doc { _id : ObjectId("4c4ba5c0672c685e5e8aabf3"), author : "roger", date : "Sat Jul 24 2010 19:47:11 GMT-0700 (PDT)", text : ”MongoSF", tags : [ ”San Francisco", ”MongoDB" ] }Notes: - _id is unique, but can be anything you’d like
  11. 11. BSON• JSON has powerful, but limited set of datatypes – Mongo extends datypes with Date, Int types, Id, …• MongoDB stores data in BSON• BSON is a binary representation of JSON – Optimized for performance and navigational abilities – Also compression – See bsonspec.org
  12. 12. Locations v1location1= { name: "10gen East Coast”, address: ”134 5th Avenue 3rd Floor”, city: "New York”, zip: "10011”}
  13. 13. Places v1location1= { name: "10gen East Coast”, address: ”134 5th Avenue 3rd Floor”, city: "New York”, zip: "10011”}db.locations.find({zip:”10011”}).limit(10)
  14. 14. Places v2location1 = { name: "10gen East Coast”, address: "17 West 18th Street 8th Floor”, city: "New York”, zip: "10011”, tags: [“business”, “mongodb”]}
  15. 15. Places v2location1 = { name: "10gen East Coast”, address: "17 West 18th Street 8th Floor”, city: "New York”, zip: "10011”, tags: [“business”, “mongodb”]}db.locations.find({zip:”10011”, tags:”business”})
  16. 16. Places v3location1 = { name: "10gen East Coast”, address: "17 West 18th Street 8th Floor”, city: "New York”, zip: "10011”, tags: [“business”, “mongodb”], latlong: [40.0,72.0]}
  17. 17. Places v3location1 = { name: "10gen East Coast”, address: "17 West 18th Street 8th Floor”, city: "New York”, zip: "10011”, tags: [“business”, “cool place”], latlong: [40.0,72.0]}db.locations.ensureIndex({latlong:”2d”})
  18. 18. location1 = { Places v3 name: "10gen HQ”, address: "17 West 18th Street 8th Floor”, city: "New York”, zip: "10011”, tags: [“business”, “cool place”], latlong: [40.0,72.0]}db.locations.ensureIndex({latlong:”2d”})db.locations.find({latlong:{$near:[40,70]}})
  19. 19. location1 = { Places v4 name: "10gen HQ”, address: "17 West 18th Street 8th Floor”, city: "New York”, zip: "10011”, latlong: [40.0,72.0], tags: [“business”, “cool place”], tips: [ {user:"nosh", time:6/26/2010, tip:"stop byfor office hours on Wednesdays from 4-6pm"}, {.....}, ]}
  20. 20. Querying your PlacesCreating your indexesdb.locations.ensureIndex({tags:1})db.locations.ensureIndex({name:1})db.locations.ensureIndex({latlong:”2d”})Finding places:db.locations.find({latlong:{$near:[40,70]}})With regular expressions:db.locations.find({name: /^typeaheadstring/)By tag:db.locations.find({tags: “business”})
  21. 21. Inserting and updating locationsInitial data load:db.locations.insert(place1)Using update to Add tips:db.locations.update({name:"10gen HQ"}, {$push :{tips: {user:"nosh", time:6/26/2010, tip:"stop by for office hours onWednesdays from 4-6"}}}}
  22. 22. Requirements• Locations – Need to store locations (Offices, Restaurants etc) • Want to be able to store name, address and tags • Maybe User Generated Content, i.e. tips / small notes ? – Want to be able to find other locations nearby• Checkins – User should be able to ‘check in’ to a location – Want to be able to generate statistics
  23. 23. Usersuser1 = { name: “nosh” email: “nosh@10gen.com”, . . . checkins: [{ location: “10gen HQ”, ts: 9/20/2010 10:12:00, …}, … ]}
  24. 24. Simple Statsdb.users.find({‘checkins.location’: “10gen HQ”)db.checkins.find({‘checkins.location’: “10gen HQ”}) .sort({ts:-1}).limit(10)db.checkins.find({‘checkins.location’: “10gen HQ”, ts: {$gt: midnight}}).count()
  25. 25. Alternativeuser1 = { name: “nosh” email: “nosh@10gen.com”, . . . checkins: [4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab]}checkins [] = ObjectId reference tolocations collection
  26. 26. User Check inCheck-in = 2 ops read location to obtain location id Update ($push) location id to user objectQueries: find all locations where a user checked in: checkin_array = db.users.find({..}, {checkins:true}).checkins db.location.find({_id:{$in: checkin_array}})
  27. 27. Unsharded Deployment •Configure as a replica set for automatedPrimary failover •Async replication between nodes •Add more secondaries to scale readsSecondarySecondary
  28. 28. Sharded Deployment MongoS config PrimarySecondary•Autosharding distributes data among two or more replica sets •Mongo Config Server(s) handles distribution & balancing •Transparent to applications
  29. 29. Use Cases •RDBMS replacement for high-traffic web applications •Content Management-type applications •Real-time analytics •High-speed data loggingWeb 2.0, Media, SaaS, Gaming, Finance, Telecom, Healthcare
  30. 30. 10Gen is hiring! @mongodb roger@10gen.com @rogerbhttp://mongodb.orghttp://10gen.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×