webinar: user data management with mongodb
DESCRIPTION
Storing data about users is central to most applications. Whether you run a social network, an identity management system, or an online game, your users are the core of your business. In this webinar, we will discuss MongoDB’s capability to accommodate your evolving user data model and sustain the transaction load associated with accessing and updating user data.TRANSCRIPT
![Page 1: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/1.jpg)
User Data Managementwith
Please stand by...We’ll begin shortly.
Q&A to follow the webinar
Recording Available 24 Hours After EventOther issues? E-mail [email protected]
Osmar OlivoConsulting Engineer, [email protected]
Friday, July 12, 13
![Page 2: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/2.jpg)
Agenda// High Level Overview> MongoDB> User Data
// Modeling & Querying User Data> Insurance Company User Data> User Check-Ins
// Extending the Data Model for Future Use-Cases> Tracking User Activity> Social Media
Friday, July 12, 13
![Page 3: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/3.jpg)
MongoDB• Scalable, High-Performance, Open Source, Document-
Oriented Database– JSON (well... BSON) Storage Model– Indexes and Full Query Language– Easy for Developers to Pick Up– Easy for Administrators to Scale
• More Features at http://www.mongodb.org/
• Overview Video: http://www.10gen.com/what-is-mongodb
Friday, July 12, 13
![Page 4: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/4.jpg)
User Data• Account Information
– Name, Address, etc– Account Status– Notes
• Activity Streams– Posts, Tweets, Likes, Check-Ins– Recording User Actions
• Social Networks– Friends, Connections– Groups, Tags
Friday, July 12, 13
![Page 5: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/5.jpg)
Insurance Company Data
Account Information– Name, Address, etc– Account Status– Notes
A Data Modeling
Exercise
Friday, July 12, 13
![Page 6: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/6.jpg)
Insurance Company
Friday, July 12, 13
![Page 7: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/7.jpg)
Insurance Company
Friday, July 12, 13
![Page 8: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/8.jpg)
Insurance Company
User Opened Date: 05/26/2012Status: Success
Account ModifiedDate: 06/22/2012Action: Added
User Call LogDate: 07/24/2012Type: Complaint
Friday, July 12, 13
![Page 9: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/9.jpg)
2 Types of Data
User Opened Date: 05/26/2012Status: Success
Account ModifiedDate: 06/22/2012Action: Added
User Call LogDate: 07/24/2012Type: Complaint
Friday, July 12, 13
![Page 10: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/10.jpg)
Rule of Thumb: Categories of Data Map Well to MongoDB Collections
Policies Activities
Friday, July 12, 13
![Page 11: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/11.jpg)
Policiespolicy = { name: “John Smith” employer: “10gen”, address: “555 Fictional Ave”, e-mail: “[email protected]”, spouse: “Yes”, dependents: “No”, dates: [
{start: 5/26/2013 10:12:00}, end: 5/26/2023 10:12:00}],
others: “No”}
Friday, July 12, 13
![Page 12: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/12.jpg)
Activities
activity = { user-id: “JohnSmith421” type: “account-opening”, status: “Success”, dates: 5/26/2012 10:12:00, related-doc: “/customer/JohnSmith421/open.pdf” }
User Opened AccountDate: 05/26/2012Status: Success
Account ModifiedDate: 06/22/2012Action: Added Spouse
User Call LogDate: 07/24/2012Type: Complaint
Friday, July 12, 13
![Page 13: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/13.jpg)
User Check-Ins
Activity Streams– Posts, Tweets, Check-Ins– Recording User Actions
Friday, July 12, 13
![Page 14: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/14.jpg)
Places
Q: Current locationA: Places near
location
User Generated Content
PlacesFriday, July 12, 13
![Page 15: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/15.jpg)
Inserting a Place
var p = { name: “10gen HQ”, address: “229 W 43rd St”, city: “New York”, zip: “10036”, tags: [“mongoDB”, “business”], latlong: [40.0, 72.0], tips: [{user: “John Smith”, time: “3/15/2013”,tip: “Make sure to stop by for office hours!”}]}
> db.posts.save(p)
Friday, July 12, 13
![Page 16: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/16.jpg)
Updating Tips
db.places.update({name:"10gen HQ"}, {$push :{tips: {user:"John", time:3/15/2012, tip:"stop by for office hours on Wednesdays from 4-6"}}}}
Friday, July 12, 13
![Page 17: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/17.jpg)
Querying Our Places• Creating 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]}})
• Regular Expressions★ db.places.find({name: /^typeaheadstring/)
• Using Tags★ db.places.find({tags: “business”})
Friday, July 12, 13
![Page 18: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/18.jpg)
User Check-Ins
Places
Record User Check-Ins
Check-Ins
Users
Stats
Users
Stats
Friday, July 12, 13
![Page 19: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/19.jpg)
Usersuser1 = { name: “John Smith” e-mail: “[email protected]”, check-ins: [4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab]}
checkins [] = ObjectId reference to Check-Ins Collection
Friday, July 12, 13
![Page 20: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/20.jpg)
Check-Insuser1 = { place: “10gen HQ”, ts: 9/20/2010 10:12:00, userId: <object id of user>}
Every Check-In is Two Operations• Insert a Check-In Object (check-ins collection)• Update ($push) user object with check-in ID (users collection)
Friday, July 12, 13
![Page 21: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/21.jpg)
Simple Statsdb.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()
Friday, July 12, 13
![Page 22: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/22.jpg)
Stats w/ MapReducemapFunc = 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}, ….., ….]
... or try using the new aggregation framework!
Friday, July 12, 13
![Page 23: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/23.jpg)
Account ModifiedDate: 06/22/2012Action: Added
Adding More User Data
User Opened Date: 05/26/2012Status: Success
User Call LogDate: 07/24/2012Type: Complaint
Friday, July 12, 13
![Page 24: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/24.jpg)
Account ModifiedDate: 06/22/2012Action: Added
Adding More User Data
Click!
Click! Click!
User Opened Date: 05/26/2012Status: Success
Click!
User Call LogDate: 07/24/2012Type: Complaint
Click!
Friday, July 12, 13
![Page 25: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/25.jpg)
Tracking Clicks
Policies Activities
Friday, July 12, 13
![Page 26: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/26.jpg)
Each Click Creates a New Doc
Policies Activities Clicks
Friday, July 12, 13
![Page 27: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/27.jpg)
Clicksclick = { user: “JohnSmith”, ts: 9/20/2010 10:12:00, link: “http://some-link-here.com/wherever”}
Now we can audit user activity...
db.clicks.find({user:”JohnSmith”}).sort({ts:-1})
Show me all of John’s clicks sorted by timestamp.
Friday, July 12, 13
![Page 28: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/28.jpg)
Extending the Schemauser1 = { name: “John Smith” e-mail: “[email protected]”, check-ins: [4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab]}
Friday, July 12, 13
![Page 29: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/29.jpg)
Extending the Schemauser1 = { name: “John Smith” e-mail: “[email protected]”, check-ins: [4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab], friends: [7b47j62bk1d3c5621c1icv90, 1h11p62bf1d8c716za]}
Friday, July 12, 13
![Page 30: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/30.jpg)
Takeaways// User Data Fits Well in MongoDB> Flexible Data Model> Stay Agile; Make Changes> Many Customers in Production
// Application Patterns Drive Data Design> Optimize Data Model For Queries> Primary Use Cases Drive Design
// Adding Features Can Be Easy> Create New Data Structures> Extend Existing
Friday, July 12, 13
![Page 31: Webinar: User Data Management with MongoDB](https://reader033.vdocuments.us/reader033/viewer/2022060111/55625309d8b42a1b4b8b4f0e/html5/thumbnails/31.jpg)
@mongodb
conferences, appearances, and meetupshttp://www.10gen.com/events
http://bit.ly/mongo> Facebook | Twitter | LinkedIn
http://linkd.in/joinmongo
More info at http://www.mongodb.org/
Friday, July 12, 13