Presentation is loading. Please wait.

Presentation is loading. Please wait.

Building applications with MongoDB – An introduction Roger

Similar presentations


Presentation on theme: "Building applications with MongoDB – An introduction Roger"— Presentation transcript:

1 http://mongodb.org http://10gen.com Building applications with MongoDB – An introduction Roger Bodamer roger@10gen.com @rogerb

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 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 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 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 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 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 Terminology RDBMSMongo Table, ViewCollection Row(s)JSON Document Index JoinEmbedded Document PartitionShard Partition KeyShard Key

9 Collections loc1, loc2, loc3 LocationsUsers User1, User2

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 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 location1= { name: "10gen East Coast”, address: ”134 5 th Avenue 3 rd Floor”, city: "New York”, zip: "10011” } Locations v1

13 location1= { name: "10gen East Coast”, address: ”134 5 th Avenue 3 rd Floor”, city: "New York”, zip: "10011” } db.locations.find({zip:”10011”}).limit(10) Places v1

14 location1 = { name: "10gen East Coast”, address: "17 West 18th Street 8th Floor”, city: "New York”, zip: "10011”, tags: [“business”, “mongodb”] } Places v2

15 location1 = { 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”}) Places v2

16 location1 = { name: "10gen East Coast”, address: "17 West 18th Street 8th Floor”, city: "New York”, zip: "10011”, tags: [“business”, “mongodb”], latlong: [40.0,72.0] } Places v3

17 location1 = { 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”}) Places v3

18 location1 = { 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]}}) Places v3

19 location1 = { 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"}, {.....}, ] } Places v4

20 Creating your indexes db.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”}) Querying your Places

21 Initial 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 on Wednesdays from 4-6"}}}} Inserting and updating locations

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 user1 = { name: “nosh” email: “nosh@10gen.com”,. checkins: [{ location: “10gen HQ”, ts: 9/20/2010 10:12:00, …}, … ] } Users

24 Simple Stats db.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 user1 = { name: “nosh” email: “nosh@10gen.com”,. checkins: [4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab] } checkins [] = ObjectId reference to locations collection Alternative

26 Check-in = 2 ops read location to obtain location id Update ($push) location id to user object Queries: find all locations where a user checked in: checkin_array = db.users.find({..}, {checkins:true}).checkins db.location.find({_id:{$in: checkin_array}}) User Check in

27 Unsharded Deployment Secondary Primary Configure as a replica set for automated failover Async replication between nodes Add more secondaries to scale reads Secondary

28 Sharded Deployment Secondary Primary MongoS Autosharding distributes data among two or more replica sets Mongo Config Server(s) handles distribution & balancing Transparent to applications confi g

29 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

30 http://mongodb.org http://10gen.com 10Gen is hiring! @mongodb roger@10gen.com @rogerb


Download ppt "Building applications with MongoDB – An introduction Roger"

Similar presentations


Ads by Google