Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
mongodb_web_application_-_MongoDC_2011.ppt.pdf
Search
mongodb
July 11, 2011
Programming
480
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
mongodb_web_application_-_MongoDC_2011.ppt.pdf
mongodb
July 11, 2011
More Decks by mongodb
See All by mongodb
NoSQL Now! 2012
mongodb
18
3.4k
MongoDB 2.2 At the Silicon Valley MongoDB User Group
mongodb
9
1.5k
Turning off the LAMP Hunter Loftis, Skookum Digital Works
mongodb
2
1.6k
Mobilize Your MongoDB! Developing iPhone and Android Apps in the Cloud Grant Shipley, Red Hat
mongodb
0
590
Beanstalk Data - MongoDB In Production Chris Siefken, CTO Beanstalk Data
mongodb
0
600
New LINQ support in C#/.NET driver Robert Stam, 10gen
mongodb
9
41k
Welcome and Keynote Aaron Heckman, 10gen
mongodb
0
570
Webinar Introduction to MongoDB's Java Driver
mongodb
1
1.3k
Webinar Intro to Schema Design
mongodb
4
1.9k
Other Decks in Programming
See All in Programming
AmebaブログはKMPから卒業します
kmars0605
0
190
Railsバージョンを4倍にした話
optim
0
360
最近”作らせてる” ローカルAIアプリの話
akit37
0
470
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
380
Workers Cache を知る
syumai
0
360
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
170
残高管理から台帳サービスへの進化
artoy
1
200
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
270
Next.js: The final boss of Web Performance
guaca
0
260
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
Featured
See All Featured
Odyssey Design
rkendrick25
PRO
2
870
Amusing Abliteration
ianozsvald
1
350
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
460
How to make the Groovebox
asonas
2
2.5k
Unsuck your backbone
ammeep
672
58k
The Invisible Side of Design
smashingmag
301
52k
4 Signs Your Business is Dying
shpigford
187
23k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
WENDY [Excerpt]
tessaabrams
14
40k
Color Theory Basics | Prateek | Gurzu
gurzu
1
490
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.2k
Transcript
http://mongodb.org http://10gen.com Building applications with MongoDB – An introduction MongoDC
– June 27, 2011 Nosh Petigara
[email protected]
@noshinosh
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
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
Documents doc1 = { _id: 4b97e62bf1d8c7152c9ccb74, key1: value1, key2:
value2, key3: {..., ..., ...}, key4: [..., ..., ] }
Collections doc1, doc2, doc3 Places Users Checkins doc3, doc4, doc5
doc6, doc7, doc8
place1 = { name: "10gen HQ”, address: ”134 5th
Avenue 3rd Floor”, city: "New York”, zip: "10011” } db.places.find({zip:”10011”}).limit(10) Places v1
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”}) Places v2
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]}}) Places v3
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"}, {.....}, {.....} ] } Places v4
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”}) Querying your 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"}}}}
$set, $unset, $rename $push, $pop, $pull, $addToSet $inc Atomic Updates
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
user1 = { name: “nosh” email: “
[email protected]
”, . . .
checkins: [4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab] } checkins [] = ObjectId reference to checkin collection Users
checkin1 = { place: “10gen HQ”, ts: 6/7/2011 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}) Checkins
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
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() db.checkins.find().sort(ts:-1)}.limit(50)
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: “result”}) result = [{_id:”10gen HQ”, value: 17}, {…..}, {….}] db.result.find({ value: {$gt: 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
Single Master Deployments Primary/Master Secondary/Slave • Configure as a replica set
for automated failover • Add more secondaries to scale reads
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
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
Nosh Petigara
[email protected]
Director of Product Strategy, 10gen http://mongodb.org http://10gen.com
- We are hiring! - @mongodb
[email protected]
@noshinosh
MongoDB in Production