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

Webinar: User Data Management with MongoDB

1,528
views

Published on

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, …

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.

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,528
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
29
Comments
0
Likes
0
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

Transcript

  • 1. User Data Management with Please stand by... We’ll begin shortly. Q&A to follow the webinar Recording Available 24 Hours After Event Other issues? E-mail webinars@10gen.com Osmar Olivo Consulting Engineer, 10gen Oz@10gen.com Friday, July 12, 13
  • 2. 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
  • 3. 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
  • 4. 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
  • 5. Insurance Company Data Account Information – Name, Address, etc – Account Status – Notes A Data Modeling Exercise Friday, July 12, 13
  • 6. Insurance Company Friday, July 12, 13
  • 7. Insurance Company Friday, July 12, 13
  • 8. Insurance Company User Opened Date: 05/26/2012 Status: Success Account Modified Date: 06/22/2012 Action: Added User Call Log Date: 07/24/2012 Type: Complaint Friday, July 12, 13
  • 9. 2 Types of Data User Opened Date: 05/26/2012 Status: Success Account Modified Date: 06/22/2012 Action: Added User Call Log Date: 07/24/2012 Type: Complaint Friday, July 12, 13
  • 10. Rule of Thumb: Categories of Data Map Well to MongoDB Collections Policies Activities Friday, July 12, 13
  • 11. Policies policy = { name:“John Smith” employer:“10gen”, address:“555 Fictional Ave”, e-mail:“me@john.smith.com”, 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
  • 12. 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 Account Date: 05/26/2012 Status: Success Account Modified Date: 06/22/2012 Action: Added Spouse User Call Log Date: 07/24/2012 Type: Complaint Friday, July 12, 13
  • 13. User Check-Ins Activity Streams – Posts, Tweets, Check-Ins – Recording User Actions Friday, July 12, 13
  • 14. Places Q: Current location A: Places near location User Generated Content Places Friday, July 12, 13
  • 15. Inserting a Place var p = { name:“10gen HQ”, address:“229 W 43rd St”, city:“NewYork”, 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
  • 16. 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
  • 17. 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
  • 18. User Check-Ins Record User Check-Ins Check-Ins Users Stats Users Stats Friday, July 12, 13
  • 19. Users user1 = { name:“John Smith” e-mail:“me@John.Smith.com”, check-ins: [4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab] } checkins [] = ObjectId reference to Check-Ins Collection Friday, July 12, 13
  • 20. Check-Ins user1 = { 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
  • 21. 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() Friday, July 12, 13
  • 22. Stats w/ 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}, ….., ….] ... or try using the new aggregation framework! Friday, July 12, 13
  • 23. Account Modified Date: 06/22/2012 Action: Added Adding More User Data User Opened Date: 05/26/2012 Status: Success User Call Log Date: 07/24/2012 Type: Complaint Friday, July 12, 13
  • 24. Account Modified Date: 06/22/2012 Action: Added Adding More User Data Click! Click! Click! User Opened Date: 05/26/2012 Status: Success Click! User Call Log Date: 07/24/2012 Type: Complaint Click! Friday, July 12, 13
  • 25. Tracking Clicks Policies Activities Friday, July 12, 13
  • 26. Each Click Creates a New Doc Policies Activities Clicks Friday, July 12, 13
  • 27. Clicks click = { 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
  • 28. Extending the Schema user1 = { name:“John Smith” e-mail:“me@John.Smith.com”, check-ins: [4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab] } Friday, July 12, 13
  • 29. Extending the Schema user1 = { name:“John Smith” e-mail:“me@John.Smith.com”, check-ins: [4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab], friends: [7b47j62bk1d3c5621c1icv90, 1h11p62bf1d8c716za] } Friday, July 12, 13
  • 30. 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
  • 31. @mongodb conferences,  appearances,  and  meetups http://www.10gen.com/events http://bit.ly/mongo>   Facebook                    |                  Twitter                  |                  LinkedIn http://linkd.in/joinmongo More info at http://www.mongodb.org/ Questions? Oz@10gen.com Friday, July 12, 13

×