SlideShare a Scribd company logo
User Data Management
                     with

                                   Please stand by...
                                  We’ll begin shortly.

                               Audio: 1-877-668-4493
Kevin Hanson
Solutions Architect, 10gen    Access code: 666 500 606
kevin@10gen.com               Q&A to follow the webinar
twitter: @hungarianhc

                       Recording Available 24 Hours After Event
                       Other issues? E-mail webinars@10gen.com
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
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
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
Insurance Company Data

Account Information
 – Name, Address, etc
 – Account Status
                                   eling
 – Notes                      Mod
                        A Data rcise
                            Exe
Insurance Company
Insurance Company
Insurance Company
Insurance Company



                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
2 Types of Data



                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
Rule of Thumb: Categories of Data
Map Well to MongoDB Collections




   Policies           Activities
Policies
    policy = {
    	

     name: “Kevin Hanson”
    	

     employer: “10gen”,
    	

     address: “555 University”,
    	

     e-mail: “kevin@10gen.com”,
    	

     twitter: “@hungarianhc”,
    	

     spouse: “Yes”,
    	

     dependents: “No”,
    	

     dates: [
             {start: 5/26/2012 10:12:00},
              end: 5/26/2013 10:12:00}],
    	

     others: “No”
    }
Activities
   User Opened Account
Date: 05/26/2012              activity = {
Status: Success               	

      user-id: “kevinhanson421”
                              	

      type: “account-opening”,
      Account Modified
Date: 06/22/2012              	

      status: “Success”,
Action: Added Spouse          	

      dates: 5/26/2012 10:12:00,
                              	

      related-doc: “/customer/
       User Call Log          kevinhanson421/open.pdf”
Date: 07/24/2012
                                       }
Type: Complaint
User Check-Ins
Activity Streams
 – Posts, Tweets, Check-Ins
 – Recording User Actions
Places

                   Q: Current location
                      A: Places near
                         location




User Generated
   Content



                  Places
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)
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"}}}}
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”})
User Check-Ins
Record User Check-Ins    Users




                 Stats           Stats



  Check-Ins              Users
Users
user1 = {
	

  name: “Kevin Hanson”
	

  e-mail: “kevin@10gen.com”,
	

  check-ins: [4b97e62bf1d8c7152c9ccb74,
5a20e62bf1d8c736ab]
}

checkins [] = ObjectId reference to Check-Ins
Collection
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)
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()
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!
Adding More User Data



                   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
Adding More User Data


   Click!            Click!


                   User Opened Account
                Date: 05/26/2012
                        Click!
                Status: Success

                      Account Modified
   Click!       Date: 06/22/2012 Click!
                Action: Added Spouse

                       User Call Log
                Date: 07/24/2012
                Type: Complaint
Tracking Clicks




Policies            Activities
Each Click Creates a New Doc




Policies   Activities   Clicks
Clicks
click = {
	

    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.
Extending the Schema
user1 = {
	

  name: “Kevin Hanson”
	

  e-mail: “kevin@10gen.com”,
	

  check-ins: [4b97e62bf1d8c7152c9ccb74,
5a20e62bf1d8c736ab]
}
Extending the Schema
user1 = {
	

  name: “Kevin Hanson”
	

  e-mail: “kevin@10gen.com”,
	

  check-ins: [4b97e62bf1d8c7152c9ccb74,
5a20e62bf1d8c736ab],
	

  friends: [7b47j62bk1d3c5621c1icv90,
1h11p62bf1d8c716za]
}
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
More info at http://www.mongodb.org/

                  conferences,	
  appearances,	
  and	
  meetups
                                              http://www.10gen.com/events


                                                               Questions?
                                                           kevin@10gen.com
                                                             @hungarianhc


    Facebook	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  	
  	
  	
  	
  	
  	
  	
  	
  Twitter	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  	
  	
  	
  	
  	
  	
  	
  	
  LinkedIn
http://bit.ly/mongo>	
                                                           @mongodb                                          http://linkd.in/joinmongo

More Related Content

PDF
Webinar: User Data Management with MongoDB
PPTX
User Data Management with MongoDB
PPTX
MongoDB Schema Design: Practical Applications and Implications
PDF
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
PPTX
Introduction to JSON & AJAX
PDF
MongoDB .local Munich 2019: Still Haven't Found What You Are Looking For? Use...
PPTX
MongoDB for Developers
PDF
MongoDB .local Chicago 2019: Practical Data Modeling for MongoDB: Tutorial
Webinar: User Data Management with MongoDB
User Data Management with MongoDB
MongoDB Schema Design: Practical Applications and Implications
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
Introduction to JSON & AJAX
MongoDB .local Munich 2019: Still Haven't Found What You Are Looking For? Use...
MongoDB for Developers
MongoDB .local Chicago 2019: Practical Data Modeling for MongoDB: Tutorial

What's hot (20)

PPTX
Database Trends for Modern Applications: Why the Database You Choose Matters
PDF
MongoDB Launchpad 2016: What’s New in the 3.4 Server
PPTX
Webinar: Back to Basics: Thinking in Documents
PDF
Visualizing Mobile Broadband with MongoDB
PPTX
Beyond the page
PDF
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
PDF
Creating social features at BranchOut using MongoDB
PPTX
Webinar: Best Practices for Getting Started with MongoDB
PPTX
MongoDB Days Silicon Valley: Introducing MongoDB 3.2
PDF
Building your first app with MongoDB
PDF
Deciphering Explain Output
PDF
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
PDF
The Fine Art of Schema Design in MongoDB: Dos and Don'ts
PPTX
Schema Design Best Practices with Buzz Moschetti
PPTX
MongoDB Schema Design: Four Real-World Examples
PDF
Mongo DB schema design patterns
KEY
Practical Ruby Projects (Alex Sharp)
KEY
Practical Ruby Projects with MongoDB - MongoSF
KEY
Schema Design by Example ~ MongoSF 2012
PDF
Big Data Day LA 2015 - The Future of BI for NoSQL Data by John De Goes of Sla...
Database Trends for Modern Applications: Why the Database You Choose Matters
MongoDB Launchpad 2016: What’s New in the 3.4 Server
Webinar: Back to Basics: Thinking in Documents
Visualizing Mobile Broadband with MongoDB
Beyond the page
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
Creating social features at BranchOut using MongoDB
Webinar: Best Practices for Getting Started with MongoDB
MongoDB Days Silicon Valley: Introducing MongoDB 3.2
Building your first app with MongoDB
Deciphering Explain Output
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
The Fine Art of Schema Design in MongoDB: Dos and Don'ts
Schema Design Best Practices with Buzz Moschetti
MongoDB Schema Design: Four Real-World Examples
Mongo DB schema design patterns
Practical Ruby Projects (Alex Sharp)
Practical Ruby Projects with MongoDB - MongoSF
Schema Design by Example ~ MongoSF 2012
Big Data Day LA 2015 - The Future of BI for NoSQL Data by John De Goes of Sla...
Ad

Similar to 1 24 - user data management (20)

KEY
Building your first application w/mongoDB MongoSV2011
KEY
How Signpost uses MongoDB for Tracking and Analytics
PPT
Building web applications with mongo db presentation
KEY
mongoDB at Visibiz
KEY
Building Your First MongoDB Application
PPTX
First app online conf
PDF
Building a Social Network with MongoDB
PPTX
Webinar: Building Your First Application with MongoDB
PDF
Building a Social Network with MongoDB
PDF
Nosql hands on handout 04
PDF
Appboy analytics - NYC MUG 11/19/13
KEY
NOSQL101, Or: How I Learned To Stop Worrying And Love The Mongo!
PPTX
Hadoop World 2011: Advanced HBase Schema Design
PDF
Navigating the Transition from relational to NoSQL - CloudCon Expo 2012
PPTX
Hadoop World 2011: Advanced HBase Schema Design - Lars George, Cloudera
PPTX
MediaGlu and Mongo DB
PPTX
Social Analytics with MongoDB
PDF
MongoDB Use Cases and Roadmap
PDF
MongoDB World 2019: From SQL to NoSQL -- Changing Your Mindset
PPTX
Internet of things
Building your first application w/mongoDB MongoSV2011
How Signpost uses MongoDB for Tracking and Analytics
Building web applications with mongo db presentation
mongoDB at Visibiz
Building Your First MongoDB Application
First app online conf
Building a Social Network with MongoDB
Webinar: Building Your First Application with MongoDB
Building a Social Network with MongoDB
Nosql hands on handout 04
Appboy analytics - NYC MUG 11/19/13
NOSQL101, Or: How I Learned To Stop Worrying And Love The Mongo!
Hadoop World 2011: Advanced HBase Schema Design
Navigating the Transition from relational to NoSQL - CloudCon Expo 2012
Hadoop World 2011: Advanced HBase Schema Design - Lars George, Cloudera
MediaGlu and Mongo DB
Social Analytics with MongoDB
MongoDB Use Cases and Roadmap
MongoDB World 2019: From SQL to NoSQL -- Changing Your Mindset
Internet of things
Ad

More from MongoDB (20)

PDF
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
PDF
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
PDF
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
PDF
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
PDF
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
PDF
MongoDB SoCal 2020: MongoDB Atlas Jump Start
PDF
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
PDF
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
PDF
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
PDF
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
PDF
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
PDF
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
PDF
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
PDF
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
PDF
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
PDF
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
PDF
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
PDF
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
PDF
MongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDB
PDF
MongoDB .local Paris 2020: Tout savoir sur le moteur de recherche Full Text S...
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDB
MongoDB .local Paris 2020: Tout savoir sur le moteur de recherche Full Text S...

1 24 - user data management

  • 1. User Data Management with Please stand by... We’ll begin shortly. Audio: 1-877-668-4493 Kevin Hanson Solutions Architect, 10gen Access code: 666 500 606 kevin@10gen.com Q&A to follow the webinar twitter: @hungarianhc Recording Available 24 Hours After Event Other issues? E-mail webinars@10gen.com
  • 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
  • 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
  • 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
  • 5. Insurance Company Data Account Information – Name, Address, etc – Account Status eling – Notes Mod A Data rcise Exe
  • 9. Insurance Company 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
  • 10. 2 Types of Data 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
  • 11. Rule of Thumb: Categories of Data Map Well to MongoDB Collections Policies Activities
  • 12. Policies policy = { name: “Kevin Hanson” employer: “10gen”, address: “555 University”, e-mail: “kevin@10gen.com”, twitter: “@hungarianhc”, spouse: “Yes”, dependents: “No”, dates: [ {start: 5/26/2012 10:12:00}, end: 5/26/2013 10:12:00}], others: “No” }
  • 13. Activities User Opened Account Date: 05/26/2012 activity = { Status: Success user-id: “kevinhanson421” type: “account-opening”, Account Modified Date: 06/22/2012 status: “Success”, Action: Added Spouse dates: 5/26/2012 10:12:00, related-doc: “/customer/ User Call Log kevinhanson421/open.pdf” Date: 07/24/2012 } Type: Complaint
  • 14. User Check-Ins Activity Streams – Posts, Tweets, Check-Ins – Recording User Actions
  • 15. Places Q: Current location A: Places near location User Generated Content Places
  • 16. 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)
  • 17. 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"}}}}
  • 18. 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”})
  • 19. User Check-Ins Record User Check-Ins Users Stats Stats Check-Ins Users
  • 20. Users user1 = { name: “Kevin Hanson” e-mail: “kevin@10gen.com”, check-ins: [4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab] } checkins [] = ObjectId reference to Check-Ins Collection
  • 21. 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)
  • 22. 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()
  • 23. 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!
  • 24. Adding More User Data 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
  • 25. Adding More User Data Click! Click! User Opened Account Date: 05/26/2012 Click! Status: Success Account Modified Click! Date: 06/22/2012 Click! Action: Added Spouse User Call Log Date: 07/24/2012 Type: Complaint
  • 27. Each Click Creates a New Doc Policies Activities Clicks
  • 28. Clicks click = { 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.
  • 29. Extending the Schema user1 = { name: “Kevin Hanson” e-mail: “kevin@10gen.com”, check-ins: [4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab] }
  • 30. Extending the Schema user1 = { name: “Kevin Hanson” e-mail: “kevin@10gen.com”, check-ins: [4b97e62bf1d8c7152c9ccb74, 5a20e62bf1d8c736ab], friends: [7b47j62bk1d3c5621c1icv90, 1h11p62bf1d8c716za] }
  • 31. 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
  • 32. More info at http://www.mongodb.org/ conferences,  appearances,  and  meetups http://www.10gen.com/events Questions? kevin@10gen.com @hungarianhc Facebook                    |                  Twitter                  |                  LinkedIn http://bit.ly/mongo>   @mongodb http://linkd.in/joinmongo