webinar: user data management with mongodb

31
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 [email protected] Osmar Olivo Consulting Engineer, 10gen [email protected] Friday, July 12, 13

Upload: mongodb

Post on 25-May-2015

1.540 views

Category:

Technology


4 download

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

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