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

Building your first MongoDB application - Nosh ...

mongodb
December 13, 2011

Building your first MongoDB application - Nosh Petigara, 10gen

This talk will introduce the features of MongoDB by walking through how one can building a simple location-based checkin application using MongoDB. The talk will cover the basics of MongoDB's document model, query language, map-reduce framework and deployment architecture.

mongodb

December 13, 2011
Tweet

More Decks by mongodb

Other Decks in Technology

Transcript

  1. Today`s Talk • MongoDB: Data modeling, queries, geospatial, updates, map reduce

    • Using a location-based app as an example • Example Works in MongoDB JS shell
  2. Application Goals Places Check ins (1) Q: Current location A:

    Places near location (2) Add user generated content (3) Record user checkins (4) Stats about checkins
  3. Documents doc1 = { _id: 4b97e62bf1d8c7152c9ccb74, key1: value1, 
 key2:

    value2, key3: {..., ..., ...},
 key4: [..., ..., ]
 } Unique ID Simple Values Arrays Embedded docs
  4. place1 = { name: "10gen HQz, 
 address: z134 5th

    Avenue 3rd Floorz,
 city: "New Yorkz,
 zip: "10011z
 } db.places.find({zip:z10011z}).limit(10) Places v1
  5. place1 = { name: "10gen HQz, 
 address: "17 West

    18th Street 8th Floorz,
 city: "New Yorkz,
 zip: "10011z, tags: [lbusinessz, lrecommendedz]
 } db.places.find({zip:z10011z, tags:zbusinessz}) Places v2
  6. place1 = { name: "10gen HQz, 
 address: "17 West

    18th Street 8th Floorz,
 city: "New Yorkz,
 zip: "10011z, tags: [lbusinessz, lcool placez], latlong: [40.0,72.0]
 } db.places.ensureIndex({latlong:z2dz}) db.places.find({latlong:{$near:[40,70]}}) Places v3
  7. place1 = { name: "10gen HQz, 
 address: "17 West

    18th Street 8th Floorz,
 city: "New Yorkz,
 zip: "10011z,
 latlong: [40.0,72.0], tags: [lbusinessz, lcool placez],
 
 tips: [ {user:"nosh", time:6/26/2010, tip:"stop by for office hours on Wednesdays from 4-6pm"}, {.....}, {.....} ]
 } Places v4
  8. Creating your indexes db.places.ensureIndex({tags:1}) db.places.ensureIndex({name:1}) db.places.ensureIndex({latlong:z2dz}) Finding places: db.places.find({latlong:{$near:[40,70]}}) With

    regular expressions: db.places.find({name: /^typeaheadstring/) By tag: db.places.find({tags: lbusinessz}) Querying your Places
  9. Initial data load: db.places.insert(place1) Updating tips: db.places.update({name:"10gen HQ"}, {$push :{tips:

    {user:"nosh", time:6/26/2010, tip:"stop by for office hours on Wednesdays from 4-6"}}}}
  10. Application Goals Places Check ins (1) Q: Current location A:

    Places near location (2) Add user generated content (3) Record user checkins (4) Stats about checkins
  11. user1 = { name: lnoshz email: [email protected], . . .

    checkins: [4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab]
 } checkins [] = ObjectId reference to checkin collection Users
  12. checkin1 = { place: l10gen HQz, ts: 6/7/2011 10:12:00, userName:

    “Nosh” } Check-in = 2 ops Insert check in object [checkin collection] Update ($push) user object [user collection] Indexes: db.checkins.ensureIndex({place:1, ts:1}) db.checkins.ensureIndex({ts:1}) Checkins
  13. Application Goals Places Check ins (1) Q: Current location A:

    Places near location (2) Add user generated content (3) Record user checkins (4) Stats about checkins
  14. Stats with MapReduce mapFunc = function() { emit(this.place, 1);} reduceFunc

    = function(key, values) { return Array.sum(values); } db.checkins.mapReduce(mapFunc,reduceFunc, {query: {timestamp: {$gt:nowminus3hrs}}, out: lresultz}) result = [{_id:z10gen HQz, value: 17}, {…..}, {….}] db.result.find({ value: {$gt: 15}})
  15. Application Goals Places Check ins (1) Q: Current location A:

    Places near location (2) Add user generated content (3) Record user checkins (4) Stats about checkins
  16. Single Master Deployments Primary/Master Secondary/Slave • Configure as a replica set

    for automated failover • Add more secondaries to scale reads
  17. Auto Sharded Deployment Primary/Master Secondary/Slave MongoS • Autosharding distributes data among

    two or more replica sets • Mongo Config Server(s) handles distribution & balancing • Transparent to applications Mongo Config
  18. Use Cases • RDBMS replacement for high-traffic web applications • Content Management-type

    applications • Real-time analytics • High-speed data logging Web 2.0, Media, SaaS, Gaming, Finance, Telecom, Healthcare