1 24 - user data management
TRANSCRIPT
![Page 1: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/1.jpg)
User Data Managementwith
Please stand by...We’ll begin shortly.
Audio: 1-877-668-4493Access code: 666 500 606
Q&A to follow the webinar
Recording Available 24 Hours After EventOther issues? E-mail [email protected]
Kevin HansonSolutions Architect, [email protected]: @hungarianhc
![Page 2: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/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
![Page 3: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/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
![Page 4: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/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
![Page 5: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/5.jpg)
Insurance Company Data
Account Information– Name, Address, etc– Account Status– Notes
A Data Modeling
Exercise
![Page 6: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/6.jpg)
Insurance Company
![Page 7: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/7.jpg)
Insurance Company
![Page 8: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/8.jpg)
Insurance Company
![Page 9: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/9.jpg)
Insurance Company
User Opened AccountDate: 05/26/2012Status: Success
Account ModifiedDate: 06/22/2012Action: Added Spouse
User Call LogDate: 07/24/2012Type: Complaint
![Page 10: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/10.jpg)
2 Types of Data
User Opened AccountDate: 05/26/2012Status: Success
Account ModifiedDate: 06/22/2012Action: Added Spouse
User Call LogDate: 07/24/2012Type: Complaint
![Page 11: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/11.jpg)
Rule of Thumb: Categories of Data Map Well to MongoDB Collections
Policies Activities
![Page 12: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/12.jpg)
Policiespolicy = { name: “Kevin Hanson” employer: “10gen”, address: “555 University”, e-mail: “[email protected]”, twitter: “@hungarianhc”, spouse: “Yes”, dependents: “No”, dates: [
{start: 5/26/2012 10:12:00}, end: 5/26/2013 10:12:00}],
others: “No”}
![Page 13: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/13.jpg)
Activities
activity = { user-id: “kevinhanson421” type: “account-opening”, status: “Success”, dates: 5/26/2012 10:12:00, related-doc: “/customer/kevinhanson421/open.pdf” }
User Opened AccountDate: 05/26/2012Status: Success
Account ModifiedDate: 06/22/2012Action: Added Spouse
User Call LogDate: 07/24/2012Type: Complaint
![Page 14: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/14.jpg)
User Check-Ins
Activity Streams– Posts, Tweets, Check-Ins– Recording User Actions
![Page 15: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/15.jpg)
Places
Q: Current locationA: Places near
location
User Generated Content
Places
![Page 16: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/16.jpg)
Inserting a Place
var p = { name: “10gen HQ”, address: “578 Broadway, 7th Floor”, city: “New York”, zip: “10012”, tags: [“mongoDB”, “business”], latlong: [40.0, 72.0], tips: [{user: “kevin”, time: “3/15/2012”,tip: “Make sure to stop by for office hours!”}]}
> db.posts.save(p)
![Page 17: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/17.jpg)
Updating Tips
db.places.update({name:"10gen HQ"}, {$push :{tips: {user:"Kevin", time:3/15/2012, tip:"stop by for office hours on Wednesdays from 4-6"}}}}
![Page 18: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/18.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”})
![Page 19: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/19.jpg)
User Check-Ins
Places
Record User Check-Ins
Check-Ins
Users
Stats
Users
Stats
![Page 20: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/20.jpg)
Usersuser1 = { name: “Kevin Hanson” e-mail: “[email protected]”, check-ins: [4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab]}
checkins [] = ObjectId reference to Check-Ins Collection
![Page 21: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/21.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)
![Page 22: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/22.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()
![Page 23: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/23.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!
![Page 24: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/24.jpg)
Adding More User Data
User Opened AccountDate: 05/26/2012Status: Success
Account ModifiedDate: 06/22/2012Action: Added Spouse
User Call LogDate: 07/24/2012Type: Complaint
![Page 25: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/25.jpg)
Adding More User Data
User Opened AccountDate: 05/26/2012Status: Success
Account ModifiedDate: 06/22/2012Action: Added Spouse
User Call LogDate: 07/24/2012Type: Complaint
Click!
Click! Click!
Click!
Click!
![Page 26: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/26.jpg)
Tracking Clicks
Policies Activities
![Page 27: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/27.jpg)
Each Click Creates a New Doc
Policies Activities Clicks
![Page 28: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/28.jpg)
Clicksclick = { user: “kevinhanson”, ts: 9/20/2010 10:12:00, link: “http://some-link-here.com/wherever”}
Now we can audit user activity...
db.clicks.find({user:”kevinhanson”}).sort({ts:-1})
Show me all of Kevin’s clicks sorted by timestamp.
![Page 29: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/29.jpg)
Extending the Schemauser1 = { name: “Kevin Hanson” e-mail: “[email protected]”, check-ins: [4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab]}
![Page 30: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/30.jpg)
Extending the Schemauser1 = { name: “Kevin Hanson” e-mail: “[email protected]”, check-ins: [4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab], friends: [7b47j62bk1d3c5621c1icv90, 1h11p62bf1d8c716za]}
![Page 31: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/31.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
![Page 32: 1 24 - user data management](https://reader033.vdocuments.us/reader033/viewer/2022060201/559b33ec1a28ab39638b4672/html5/thumbnails/32.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/
[email protected]@hungarianhc