Download - Webinar: User Data Management with MongoDB

Transcript
Page 1: Webinar: User Data Management with MongoDB

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

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

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

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

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

Insurance Company

Friday, July 12, 13

Page 7: Webinar: User Data Management with MongoDB

Insurance Company

Friday, July 12, 13

Page 8: Webinar: User Data Management with MongoDB

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

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

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

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

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

User Check-Ins

Activity Streams– Posts, Tweets, Check-Ins– Recording User Actions

Friday, July 12, 13

Page 14: Webinar: User Data Management with MongoDB

Places

Q: Current locationA: Places near

location

User Generated Content

PlacesFriday, July 12, 13

Page 15: Webinar: User Data Management with MongoDB

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

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

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

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

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

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

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

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

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

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

Tracking Clicks

Policies Activities

Friday, July 12, 13

Page 26: Webinar: User Data Management with MongoDB

Each Click Creates a New Doc

Policies Activities Clicks

Friday, July 12, 13

Page 27: Webinar: User Data Management with MongoDB

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

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

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

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

@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/

[email protected]

Friday, July 12, 13