Your SlideShare is downloading. ×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Building Your First MongoDB Application (Mongo Austin)

2,184

Published on

Nosh Petigara's presentation at Mongo Austin

Nosh Petigara's presentation at Mongo Austin

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,184
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
61
Comments
0
Likes
4
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
  • Memory mapped files, BSON, indexes, multiple data types, binary files, etc
  • Memory mapped files, BSON, indexes, multiple data types, binary files, etc
  • Memory mapped files, BSON, indexes, multiple data types, binary files, etc
  • Memory mapped files, BSON, indexes, multiple data types, binary files, etc
  • Transcript

    • 1. Nosh Petigara [email_address] @noshinosh http://mongodb.org http://10gen.com Building applications with MongoDB – An introduction MongoAustin – Febraury 15, 2011
    • 2. 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
    • 3. 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
    • 4. Documents doc1 = { _id: 4b97e62bf1d8c7152c9ccb74 , key1: value1, key2: value2, key3: {..., ..., ...}, key4: [..., ..., ] }
    • 5. Collections doc1, doc2, doc3 Places Users Checkins doc3, doc4, doc5 doc6, doc7, doc8
    • 6. Places v1 place1 = { name: "10gen HQ”, address: ”134 5 th Avenue 3 rd Floor”, city: "New York”, zip: "10011” } db.places.find({zip:”10011”}).limit(10)
    • 7. Places v2 place1 = { name: "10gen HQ”, address: "17 West 18th Street 8th Floor”, city: "New York”, zip: "10011”, tags: [“business”, “recommended”] } db.places.find({zip:”10011”, tags:”business”})
    • 8. Places v3 place1 = { 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.places.ensureIndex({latlong:”2d”}) db.places.find({latlong:{$near:[40,70]}})
    • 9. Places v4 place1 = { 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 by for office hours on Wednesdays from 4-6pm"}, {.....}, {.....} ] }
    • 10. Querying your Places Creating your indexes db.places.ensureIndex({tags:1}) db.places.ensureIndex({name:1}) db.places.ensureIndex({latlong:”2d”}) Finding places: db.places.find({latlong:{$near:[40,70]}}) With regular expressions: db.places.find({name: /^ typeaheadstring /) By tag: db.places.find({tags: “business”})
    • 11. Inserting and updating places 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"}}}}
    • 12. 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
    • 13. Users user1 = { name: “nosh” email: “nosh@10gen.com”, . . . checkins: [ 4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab ] } checkins [] = ObjectId reference to checkin collection
    • 14. Checkins checkin1 = { place: “10gen HQ”, ts: 9/20/2010 10:12:00, userId: <objectid of user> } 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})
    • 15. Atomic Updates $set, $unset, $rename $push, $pop, $pull, $addToSet $inc
    • 16. 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
    • 17. Simple Stats db.checkins.find({place: “10gen HQ”) db.checkins.find({place: “10gen HQ”}) .sort({ts:-1}).limit(10) db.checkins.find({place: “10gen HQ”, ts: {$gt: midnight}}).count()
    • 18. Stats with MapReduce mapFunc = function() { emit(this.place, 1);} reduceFunc = function(key, values) { return Array.sum(values); } res = db.checkins.mapReduce(mapFunc,reduceFunc, {query: {timestamp: {$gt:nowminus3hrs}}}) res = [{_id:”10gen HQ”, value: 17}, ….., ….] res.find({ value: {$gt: 15}, _id: {$in: [….., ….., …..]} })
    • 19. 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
    • 20. Single Master Deployments
      • Configure as a replica set for automated failover
      • Add more secondaries to scale reads
      Primary/Master Secondary/Slave
    • 21. Auto Sharded Deployment
      • Autosharding distributes data among two or more replica sets
      • Mongo Config Server(s) handles distribution & balancing
      • Transparent to applications
      Primary/Master Secondary/Slave MongoS Mongo Config
    • 22. Use Cases
      • RDBMS replacement for high-traffic web applications
      • Content Management-type applications
      • Social, mobile
      • Real-time analytics
      • High-speed data logging
      Web 2.0, Media, SaaS, Gaming, Finance, Telecom, Healthcare
    • 23. MongoDB in Production
    • 24. Nosh Petigara [email_address] Director of Product Strategy, 10gen http://mongodb.org http://10gen.com
      • We are hiring!
      • @mongodb
      • [email_address]
      • @noshinosh

    ×