SlideShare une entreprise Scribd logo
1  sur  57
Télécharger pour lire hors ligne
Building Social Features
with MongoDB
Nathan Smith
BranchOut.com
Jan. 22, 2013
Tuesday, January 22, 13
BranchOut
• Connect with your colleagues (follow)
• Activity feed of their professional activity
• Timeline of an individual’s posts
A more social professional network
Tuesday, January 22, 13
BranchOut
• 30M installed users
• 750MM total user records
• Average 300 connections per installed user
A more social professional network
Tuesday, January 22, 13
MongoDB @ BranchOut
Tuesday, January 22, 13
MongoDB @ BranchOut
• 100% MySQL until ~July 2012
Tuesday, January 22, 13
MongoDB @ BranchOut
• 100% MySQL until ~July 2012
• Much of our data fits well into a document
model
Tuesday, January 22, 13
MongoDB @ BranchOut
• 100% MySQL until ~July 2012
• Much of our data fits well into a document
model
• Our data design avoids RDBMS features
Tuesday, January 22, 13
Follow System
Tuesday, January 22, 13
Follow System
Business logic
Tuesday, January 22, 13
Follow System
• Limit of 2000 followees (people you follow)
Business logic
Tuesday, January 22, 13
Follow System
• Limit of 2000 followees (people you follow)
• Unlimited followers
Business logic
Tuesday, January 22, 13
Follow System
• Limit of 2000 followees (people you follow)
• Unlimited followers
• Both lists reflect updates in near-real time
Business logic
Tuesday, January 22, 13
Follow System
Traditional RDBMS (i.e. MySQL)
follower_uid followee_uid follow_time
123 456 2013-01-22 15:43:00
456 123 2013-01-22 15:52:00
Tuesday, January 22, 13
Follow System
Traditional RDBMS (i.e. MySQL)
follower_uid followee_uid follow_time
123 456 2013-01-22 15:43:00
456 123 2013-01-22 15:52:00
Advantage: Easy inserts, deletes
Tuesday, January 22, 13
Follow System
Traditional RDBMS (i.e. MySQL)
follower_uid followee_uid follow_time
123 456 2013-01-22 15:43:00
456 123 2013-01-22 15:52:00
Advantage: Easy inserts, deletes
Disadvantage: Data locality, index size
Tuesday, January 22, 13
Follow System
MongoDB (first pass)
followee: {
_id: 123
uids: [456, 567, 678]
}
Tuesday, January 22, 13
Follow System
MongoDB (first pass)
Advantage: Compact data, read locality
followee: {
_id: 123
uids: [456, 567, 678]
}
Tuesday, January 22, 13
Follow System
MongoDB (first pass)
Advantage: Compact data, read locality
Disadvantage: Can’t display a user’s followers
followee: {
_id: 123
uids: [456, 567, 678]
}
Tuesday, January 22, 13
db.follow.find({uids: 456}, {_id: 1});
Follow System
Can’t display a user’s followers (easily)
followee: {
_id: 123
uids: [456, 567, 678]
}
...with multi-key index on
uids
Tuesday, January 22, 13
db.follow.find({uids: 456}, {_id: 1});
Follow System
Can’t display a user’s followers (easily)
Expensive! Also, no guarantee of order.
followee: {
_id: 123
uids: [456, 567, 678]
}
...with multi-key index on
uids
Tuesday, January 22, 13
Follow System
MongoDB (second pass)
followee: {
_id: 1,
uids: [2, 3]
},
followee: {
_id: 2,
uids: [1, 3]
}
follower: {
_id: 1,
uids: [2]
},
follower: {
_id: 2,
uids: [1]
}
follower: {
_id: 3,
uids: [1, 2]
}
Tuesday, January 22, 13
Follow System
MongoDB (second pass)
Advantages: Local data, fast selects
followee: {
_id: 1,
uids: [2, 3]
},
followee: {
_id: 2,
uids: [1, 3]
}
follower: {
_id: 1,
uids: [2]
},
follower: {
_id: 2,
uids: [1]
}
follower: {
_id: 3,
uids: [1, 2]
}
Tuesday, January 22, 13
Follow System
MongoDB (second pass)
Advantages: Local data, fast selects
Disadvantages: Follower doc size
followee: {
_id: 1,
uids: [2, 3]
},
followee: {
_id: 2,
uids: [1, 3]
}
follower: {
_id: 1,
uids: [2]
},
follower: {
_id: 2,
uids: [1]
}
follower: {
_id: 3,
uids: [1, 2]
}
Tuesday, January 22, 13
Follow System
Follower document size
Tuesday, January 22, 13
Follow System
Follower document size
• Max Mongo doc size: 16MB
Tuesday, January 22, 13
Follow System
Follower document size
• Max Mongo doc size: 16MB
• Number of people who follow our
community manager: 30MM
Tuesday, January 22, 13
Follow System
Follower document size
• Max Mongo doc size: 16MB
• Number of people who follow our
community manager: 30MM
• 30MM uids × 8 bytes/uid = 240MB
Tuesday, January 22, 13
Follow System
Follower document size
• Max Mongo doc size: 16MB
• Number of people who follow our
community manager: 30MM
• 30MM uids × 8 bytes/uid = 240MB
• Max followers per doc: ~2MM
Tuesday, January 22, 13
Follow System
MongoDB (final pass)
follower: {
_id: “1”,
uids: [2,3,4,...],
count: 20001,
next_page: 2
},
follower: {
_id: “1_p2”,
uids: [23,24,25,...],
count: 10000
}
followee: {
_id: 1,
uids: [2, 3]
},
followee: {
_id: 2,
uids: [1, 3]
}
Tuesday, January 22, 13
Follow System
MongoDB (final pass)
follower: {
_id: “1”,
uids: [2,3,4,...],
count: 20001,
next_page: 2
},
follower: {
_id: “1_p2”,
uids: [23,24,25,...],
count: 10000
}
followee: {
_id: 1,
uids: [2, 3]
},
followee: {
_id: 2,
uids: [1, 3]
}
follower: {
_id: “1”,
uids: [2,3,4,...],
count: 10001,
next_page: 3
},
follower: {
_id: “1_p2”,
uids: [23,24,25,...],
count: 10000
}
Tuesday, January 22, 13
Follow System
MongoDB (final pass)
Asynchronous thread manages follower documents
follower: {
_id: “1”,
uids: [2,3,4,...],
count: 20001,
next_page: 2
},
follower: {
_id: “1_p2”,
uids: [23,24,25,...],
count: 10000
}
followee: {
_id: 1,
uids: [2, 3]
},
followee: {
_id: 2,
uids: [1, 3]
}
follower: {
_id: “1”,
uids: [2,3,4,...],
count: 10001,
next_page: 3
},
follower: {
_id: “1_p2”,
uids: [23,24,25,...],
count: 10000
}
Tuesday, January 22, 13
Activity Feed
Tuesday, January 22, 13
Push vs Pull architecture
Activity Feed
Tuesday, January 22, 13
Push vs Pull architecture
Activity Feed
Tuesday, January 22, 13
Push vs Pull architecture
Activity Feed
Tuesday, January 22, 13
Business logic
Activity Feed
Tuesday, January 22, 13
Business logic
• All connections and followees appear in your feed
Activity Feed
Tuesday, January 22, 13
Business logic
• All connections and followees appear in your feed
• Reverse chron sort order (but should support other
rankings)
Activity Feed
Tuesday, January 22, 13
Business logic
• All connections and followees appear in your feed
• Reverse chron sort order (but should support other
rankings)
• Support for evolving set of feed event types
Activity Feed
Tuesday, January 22, 13
Business logic
• All connections and followees appear in your feed
• Reverse chron sort order (but should support other
rankings)
• Support for evolving set of feed event types
• Tagging creates multiple feed events for the same
underlying object
Activity Feed
Tuesday, January 22, 13
Business logic
• All connections and followees appear in your feed
• Reverse chron sort order (but should support other
rankings)
• Support for evolving set of feed event types
• Tagging creates multiple feed events for the same
underlying object
• Feed events are not ephemeral -- Timeline
Activity Feed
Tuesday, January 22, 13
Traditional RDBMS (i.e. MySQL)
activity_id uid event_time type oid1 oid2
1 123 2013-01-22 15:43:00 photo 123abc 789ghi
2 345 2013-01-22 15:52:00 status 456def foobar
Activity Feed
Tuesday, January 22, 13
Traditional RDBMS (i.e. MySQL)
activity_id uid event_time type oid1 oid2
1 123 2013-01-22 15:43:00 photo 123abc 789ghi
2 345 2013-01-22 15:52:00 status 456def foobar
Advantage: Easy inserts
Activity Feed
Tuesday, January 22, 13
Traditional RDBMS (i.e. MySQL)
activity_id uid event_time type oid1 oid2
1 123 2013-01-22 15:43:00 photo 123abc 789ghi
2 345 2013-01-22 15:52:00 status 456def foobar
Advantage: Easy inserts
Disadvantages: Rigid schema adapts poorly to
new activity types, doesn’t scale
Activity Feed
Tuesday, January 22, 13
MongoDB
ufc:{
_id: 123, // UID
total_events: 18,
2013_01_total: 4,
2012_12_total: 8,
2012_11_total: 6,
...other counts...
}
ufm:{
_id: “123_2013_01”,
events: [
{
uid: 123,
type: “photo_upload”,
content_id: “abcd9876”,
timestamp: 1358824502,
...more metadata...
},
...more events...
]
}
user_feed_card user_feed_month
Activity Feed
Tuesday, January 22, 13
Algorithm
Activity Feed
Tuesday, January 22, 13
Algorithm
1. Load user_feed_cards for all connections
Activity Feed
Tuesday, January 22, 13
Algorithm
1. Load user_feed_cards for all connections
2. Calculate which user_feed_months to load
Activity Feed
Tuesday, January 22, 13
Algorithm
1. Load user_feed_cards for all connections
2. Calculate which user_feed_months to load
3. Load user_feed_months
Activity Feed
Tuesday, January 22, 13
Algorithm
1. Load user_feed_cards for all connections
2. Calculate which user_feed_months to load
3. Load user_feed_months
4. Aggregate events that refer to the same story
Activity Feed
Tuesday, January 22, 13
Algorithm
1. Load user_feed_cards for all connections
2. Calculate which user_feed_months to load
3. Load user_feed_months
4. Aggregate events that refer to the same story
5. Sort (reverse chron)
Activity Feed
Tuesday, January 22, 13
Algorithm
1. Load user_feed_cards for all connections
2. Calculate which user_feed_months to load
3. Load user_feed_months
4. Aggregate events that refer to the same story
5. Sort (reverse chron)
6. Load content, comments, etc. and build stories
Activity Feed
Tuesday, January 22, 13
Performance
Activity Feed
Tuesday, January 22, 13
Performance
• Response times average under 500 ms (98th
percentile under 1 sec
Activity Feed
Tuesday, January 22, 13
Performance
• Response times average under 500 ms (98th
percentile under 1 sec
• Design expected to scale well horizontally
Activity Feed
Tuesday, January 22, 13
Performance
• Response times average under 500 ms (98th
percentile under 1 sec
• Design expected to scale well horizontally
• Need to continue to optimize
Activity Feed
Tuesday, January 22, 13
Building Social Features
with MongoDB
Nathan Smith
BrO: http://branchout.com/nate
FB: http://facebook.com/neocortica
Twitter: @nate510
Email: nate@branchout.com
Aditya Agarwal on Facebook’s architecture: http://www.infoq.com/presentations/Facebook-Software-Stack
Dan McKinley on Etsy’s activity feed: http://www.slideshare.net/danmckinley/etsy-activity-feeds-architecture
Good Quora questions on activity feeds:
http://www.quora.com/What-are-the-scaling-issues-to-keep-in-mind-while-developing-a-social-network-feed
http://www.quora.com/What-are-best-practices-for-building-something-like-a-News-Feed
Tuesday, January 22, 13

Contenu connexe

Tendances

Webinar: Best Practices for Getting Started with MongoDB
Webinar: Best Practices for Getting Started with MongoDBWebinar: Best Practices for Getting Started with MongoDB
Webinar: Best Practices for Getting Started with MongoDBMongoDB
 
Building a Scalable Inbox System with MongoDB and Java
Building a Scalable Inbox System with MongoDB and JavaBuilding a Scalable Inbox System with MongoDB and Java
Building a Scalable Inbox System with MongoDB and Javaantoinegirbal
 
Back to Basics Webinar 3: Schema Design Thinking in Documents
 Back to Basics Webinar 3: Schema Design Thinking in Documents Back to Basics Webinar 3: Schema Design Thinking in Documents
Back to Basics Webinar 3: Schema Design Thinking in DocumentsMongoDB
 
Android and firebase database
Android and firebase databaseAndroid and firebase database
Android and firebase databaseNILESH SAWARDEKAR
 
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...MongoDB
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB
 
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...MongoDB
 
5 Pitfalls to Avoid with MongoDB
5 Pitfalls to Avoid with MongoDB5 Pitfalls to Avoid with MongoDB
5 Pitfalls to Avoid with MongoDBTim Callaghan
 
Back to Basics: My First MongoDB Application
Back to Basics: My First MongoDB ApplicationBack to Basics: My First MongoDB Application
Back to Basics: My First MongoDB ApplicationMongoDB
 
MongoDB Schema Design
MongoDB Schema DesignMongoDB Schema Design
MongoDB Schema DesignMongoDB
 
MongoDB Launchpad 2016: What’s New in the 3.4 Server
MongoDB Launchpad 2016: What’s New in the 3.4 ServerMongoDB Launchpad 2016: What’s New in the 3.4 Server
MongoDB Launchpad 2016: What’s New in the 3.4 ServerMongoDB
 
Socialite, the Open Source Status Feed Part 3: Scaling the Data Feed
Socialite, the Open Source Status Feed Part 3: Scaling the Data FeedSocialite, the Open Source Status Feed Part 3: Scaling the Data Feed
Socialite, the Open Source Status Feed Part 3: Scaling the Data FeedMongoDB
 
MongoDB Days Silicon Valley: Introducing MongoDB 3.2
MongoDB Days Silicon Valley: Introducing MongoDB 3.2MongoDB Days Silicon Valley: Introducing MongoDB 3.2
MongoDB Days Silicon Valley: Introducing MongoDB 3.2MongoDB
 
Back to Basics Webinar 2: Your First MongoDB Application
Back to Basics Webinar 2: Your First MongoDB ApplicationBack to Basics Webinar 2: Your First MongoDB Application
Back to Basics Webinar 2: Your First MongoDB ApplicationMongoDB
 
MongoDB .local Munich 2019: Still Haven't Found What You Are Looking For? Use...
MongoDB .local Munich 2019: Still Haven't Found What You Are Looking For? Use...MongoDB .local Munich 2019: Still Haven't Found What You Are Looking For? Use...
MongoDB .local Munich 2019: Still Haven't Found What You Are Looking For? Use...MongoDB
 
Webinar: Back to Basics: Thinking in Documents
Webinar: Back to Basics: Thinking in DocumentsWebinar: Back to Basics: Thinking in Documents
Webinar: Back to Basics: Thinking in DocumentsMongoDB
 
Back to Basics 1: Thinking in documents
Back to Basics 1: Thinking in documentsBack to Basics 1: Thinking in documents
Back to Basics 1: Thinking in documentsMongoDB
 
Back to Basics Webinar 3 - Thinking in Documents
Back to Basics Webinar 3 - Thinking in DocumentsBack to Basics Webinar 3 - Thinking in Documents
Back to Basics Webinar 3 - Thinking in DocumentsJoe Drumgoole
 

Tendances (20)

Webinar: Best Practices for Getting Started with MongoDB
Webinar: Best Practices for Getting Started with MongoDBWebinar: Best Practices for Getting Started with MongoDB
Webinar: Best Practices for Getting Started with MongoDB
 
Building a Scalable Inbox System with MongoDB and Java
Building a Scalable Inbox System with MongoDB and JavaBuilding a Scalable Inbox System with MongoDB and Java
Building a Scalable Inbox System with MongoDB and Java
 
Back to Basics Webinar 3: Schema Design Thinking in Documents
 Back to Basics Webinar 3: Schema Design Thinking in Documents Back to Basics Webinar 3: Schema Design Thinking in Documents
Back to Basics Webinar 3: Schema Design Thinking in Documents
 
Coding serbia
Coding serbiaCoding serbia
Coding serbia
 
Android and firebase database
Android and firebase databaseAndroid and firebase database
Android and firebase database
 
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
 
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
MongoDB .local Munich 2019: Best Practices for Working with IoT and Time-seri...
 
5 Pitfalls to Avoid with MongoDB
5 Pitfalls to Avoid with MongoDB5 Pitfalls to Avoid with MongoDB
5 Pitfalls to Avoid with MongoDB
 
Back to Basics: My First MongoDB Application
Back to Basics: My First MongoDB ApplicationBack to Basics: My First MongoDB Application
Back to Basics: My First MongoDB Application
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
MongoDB Schema Design
MongoDB Schema DesignMongoDB Schema Design
MongoDB Schema Design
 
MongoDB Launchpad 2016: What’s New in the 3.4 Server
MongoDB Launchpad 2016: What’s New in the 3.4 ServerMongoDB Launchpad 2016: What’s New in the 3.4 Server
MongoDB Launchpad 2016: What’s New in the 3.4 Server
 
Socialite, the Open Source Status Feed Part 3: Scaling the Data Feed
Socialite, the Open Source Status Feed Part 3: Scaling the Data FeedSocialite, the Open Source Status Feed Part 3: Scaling the Data Feed
Socialite, the Open Source Status Feed Part 3: Scaling the Data Feed
 
MongoDB Days Silicon Valley: Introducing MongoDB 3.2
MongoDB Days Silicon Valley: Introducing MongoDB 3.2MongoDB Days Silicon Valley: Introducing MongoDB 3.2
MongoDB Days Silicon Valley: Introducing MongoDB 3.2
 
Back to Basics Webinar 2: Your First MongoDB Application
Back to Basics Webinar 2: Your First MongoDB ApplicationBack to Basics Webinar 2: Your First MongoDB Application
Back to Basics Webinar 2: Your First MongoDB Application
 
MongoDB .local Munich 2019: Still Haven't Found What You Are Looking For? Use...
MongoDB .local Munich 2019: Still Haven't Found What You Are Looking For? Use...MongoDB .local Munich 2019: Still Haven't Found What You Are Looking For? Use...
MongoDB .local Munich 2019: Still Haven't Found What You Are Looking For? Use...
 
Webinar: Back to Basics: Thinking in Documents
Webinar: Back to Basics: Thinking in DocumentsWebinar: Back to Basics: Thinking in Documents
Webinar: Back to Basics: Thinking in Documents
 
Back to Basics 1: Thinking in documents
Back to Basics 1: Thinking in documentsBack to Basics 1: Thinking in documents
Back to Basics 1: Thinking in documents
 
Back to Basics Webinar 3 - Thinking in Documents
Back to Basics Webinar 3 - Thinking in DocumentsBack to Basics Webinar 3 - Thinking in Documents
Back to Basics Webinar 3 - Thinking in Documents
 

En vedette

Enterprise UX Industry Report 2017–2018
Enterprise UX Industry Report 2017–2018Enterprise UX Industry Report 2017–2018
Enterprise UX Industry Report 2017–2018Lewis Lin 🦊
 
MongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World ExamplesMongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World ExamplesLewis Lin 🦊
 
MBA CSEA 2017 Attendees
MBA CSEA 2017 AttendeesMBA CSEA 2017 Attendees
MBA CSEA 2017 AttendeesLewis Lin 🦊
 
Performance Based Interviewing (PBI) Questions
Performance Based Interviewing (PBI) QuestionsPerformance Based Interviewing (PBI) Questions
Performance Based Interviewing (PBI) QuestionsLewis Lin 🦊
 
2016 VC Executive Compensation Trend Report
2016 VC Executive Compensation Trend Report2016 VC Executive Compensation Trend Report
2016 VC Executive Compensation Trend ReportLewis Lin 🦊
 
MongoDB Best Practices
MongoDB Best PracticesMongoDB Best Practices
MongoDB Best PracticesLewis Lin 🦊
 
UI Design Patterns for the Web, Part 1
UI Design Patterns for the Web, Part 1UI Design Patterns for the Web, Part 1
UI Design Patterns for the Web, Part 1Lewis Lin 🦊
 
Facebook Rotational Product Manager Interview: Jewel Lim's Tips on Getting an...
Facebook Rotational Product Manager Interview: Jewel Lim's Tips on Getting an...Facebook Rotational Product Manager Interview: Jewel Lim's Tips on Getting an...
Facebook Rotational Product Manager Interview: Jewel Lim's Tips on Getting an...Lewis Lin 🦊
 
UI Design Patterns for the Web, Part 2
UI Design Patterns for the Web, Part 2UI Design Patterns for the Web, Part 2
UI Design Patterns for the Web, Part 2Lewis Lin 🦊
 
What Game Developers Look for in a New Graduate: Interviews and Surveys at On...
What Game Developers Look for in a New Graduate: Interviews and Surveys at On...What Game Developers Look for in a New Graduate: Interviews and Surveys at On...
What Game Developers Look for in a New Graduate: Interviews and Surveys at On...Lewis Lin 🦊
 
Salary Negotiation Cheat Sheet
Salary Negotiation Cheat SheetSalary Negotiation Cheat Sheet
Salary Negotiation Cheat SheetLewis Lin 🦊
 
Book Summary: Decode and Conquer by Lewis C. Lin
Book Summary: Decode and Conquer by Lewis C. LinBook Summary: Decode and Conquer by Lewis C. Lin
Book Summary: Decode and Conquer by Lewis C. LinLewis Lin 🦊
 

En vedette (12)

Enterprise UX Industry Report 2017–2018
Enterprise UX Industry Report 2017–2018Enterprise UX Industry Report 2017–2018
Enterprise UX Industry Report 2017–2018
 
MongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World ExamplesMongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World Examples
 
MBA CSEA 2017 Attendees
MBA CSEA 2017 AttendeesMBA CSEA 2017 Attendees
MBA CSEA 2017 Attendees
 
Performance Based Interviewing (PBI) Questions
Performance Based Interviewing (PBI) QuestionsPerformance Based Interviewing (PBI) Questions
Performance Based Interviewing (PBI) Questions
 
2016 VC Executive Compensation Trend Report
2016 VC Executive Compensation Trend Report2016 VC Executive Compensation Trend Report
2016 VC Executive Compensation Trend Report
 
MongoDB Best Practices
MongoDB Best PracticesMongoDB Best Practices
MongoDB Best Practices
 
UI Design Patterns for the Web, Part 1
UI Design Patterns for the Web, Part 1UI Design Patterns for the Web, Part 1
UI Design Patterns for the Web, Part 1
 
Facebook Rotational Product Manager Interview: Jewel Lim's Tips on Getting an...
Facebook Rotational Product Manager Interview: Jewel Lim's Tips on Getting an...Facebook Rotational Product Manager Interview: Jewel Lim's Tips on Getting an...
Facebook Rotational Product Manager Interview: Jewel Lim's Tips on Getting an...
 
UI Design Patterns for the Web, Part 2
UI Design Patterns for the Web, Part 2UI Design Patterns for the Web, Part 2
UI Design Patterns for the Web, Part 2
 
What Game Developers Look for in a New Graduate: Interviews and Surveys at On...
What Game Developers Look for in a New Graduate: Interviews and Surveys at On...What Game Developers Look for in a New Graduate: Interviews and Surveys at On...
What Game Developers Look for in a New Graduate: Interviews and Surveys at On...
 
Salary Negotiation Cheat Sheet
Salary Negotiation Cheat SheetSalary Negotiation Cheat Sheet
Salary Negotiation Cheat Sheet
 
Book Summary: Decode and Conquer by Lewis C. Lin
Book Summary: Decode and Conquer by Lewis C. LinBook Summary: Decode and Conquer by Lewis C. Lin
Book Summary: Decode and Conquer by Lewis C. Lin
 

Similaire à Creating social features at BranchOut using MongoDB

Introduction to NoSQL with MongoDB
Introduction to NoSQL with MongoDBIntroduction to NoSQL with MongoDB
Introduction to NoSQL with MongoDBHector Correa
 
SenchaCon: Sencha Touch Custom Components
SenchaCon: Sencha Touch Custom Components SenchaCon: Sencha Touch Custom Components
SenchaCon: Sencha Touch Custom Components Patrick Sheridan
 
AWS July Webinar Series: Amazon Redshift Reporting and Advanced Analytics
AWS July Webinar Series: Amazon Redshift Reporting and Advanced AnalyticsAWS July Webinar Series: Amazon Redshift Reporting and Advanced Analytics
AWS July Webinar Series: Amazon Redshift Reporting and Advanced AnalyticsAmazon Web Services
 
Best practices machine learning final
Best practices machine learning finalBest practices machine learning final
Best practices machine learning finalDianna Doan
 
Unlocked Workshop OSCON 2013 - Part I
Unlocked Workshop OSCON 2013 - Part IUnlocked Workshop OSCON 2013 - Part I
Unlocked Workshop OSCON 2013 - Part IWayne Walls
 
Cassandra sf meetup_2013_07_31
Cassandra sf meetup_2013_07_31Cassandra sf meetup_2013_07_31
Cassandra sf meetup_2013_07_31George Courtsunis
 
Cassandra at Disqus — SF Cassandra Users Group July 31st
Cassandra at Disqus — SF Cassandra Users Group July 31stCassandra at Disqus — SF Cassandra Users Group July 31st
Cassandra at Disqus — SF Cassandra Users Group July 31stDataStax Academy
 
An Overview of the Emerging Graph Landscape (Oct 2013)
An Overview of the Emerging Graph Landscape (Oct 2013)An Overview of the Emerging Graph Landscape (Oct 2013)
An Overview of the Emerging Graph Landscape (Oct 2013)Emil Eifrem
 
Best Practices for Big Data Analytics with Machine Learning by Datameer
Best Practices for Big Data Analytics with Machine Learning by DatameerBest Practices for Big Data Analytics with Machine Learning by Datameer
Best Practices for Big Data Analytics with Machine Learning by DatameerDatameer
 
IEEE 2014 DOTNET CLOUD COMPUTING PROJECTS A scientometric analysis of cloud c...
IEEE 2014 DOTNET CLOUD COMPUTING PROJECTS A scientometric analysis of cloud c...IEEE 2014 DOTNET CLOUD COMPUTING PROJECTS A scientometric analysis of cloud c...
IEEE 2014 DOTNET CLOUD COMPUTING PROJECTS A scientometric analysis of cloud c...IEEEMEMTECHSTUDENTPROJECTS
 
Concepts, use cases and principles to build big data systems (1)
Concepts, use cases and principles to build big data systems (1)Concepts, use cases and principles to build big data systems (1)
Concepts, use cases and principles to build big data systems (1)Trieu Nguyen
 
Extracting Insights from Data at Twitter
Extracting Insights from Data at TwitterExtracting Insights from Data at Twitter
Extracting Insights from Data at TwitterPrasad Wagle
 
DP-203T00 Microsoft Azure Data Engineering-08.pptx
DP-203T00 Microsoft Azure Data Engineering-08.pptxDP-203T00 Microsoft Azure Data Engineering-08.pptx
DP-203T00 Microsoft Azure Data Engineering-08.pptxssuser45b0e7
 
Data analytics introduction
Data analytics introductionData analytics introduction
Data analytics introductionamiyadash
 
A Novel Method for Data Cleaning and User- Session Identification for Web Mining
A Novel Method for Data Cleaning and User- Session Identification for Web MiningA Novel Method for Data Cleaning and User- Session Identification for Web Mining
A Novel Method for Data Cleaning and User- Session Identification for Web MiningIJMER
 
Complex realtime event analytics using BigQuery @Crunch Warmup
Complex realtime event analytics using BigQuery @Crunch WarmupComplex realtime event analytics using BigQuery @Crunch Warmup
Complex realtime event analytics using BigQuery @Crunch WarmupMárton Kodok
 

Similaire à Creating social features at BranchOut using MongoDB (20)

Introduction to NoSQL with MongoDB
Introduction to NoSQL with MongoDBIntroduction to NoSQL with MongoDB
Introduction to NoSQL with MongoDB
 
SenchaCon: Sencha Touch Custom Components
SenchaCon: Sencha Touch Custom Components SenchaCon: Sencha Touch Custom Components
SenchaCon: Sencha Touch Custom Components
 
AWS July Webinar Series: Amazon Redshift Reporting and Advanced Analytics
AWS July Webinar Series: Amazon Redshift Reporting and Advanced AnalyticsAWS July Webinar Series: Amazon Redshift Reporting and Advanced Analytics
AWS July Webinar Series: Amazon Redshift Reporting and Advanced Analytics
 
Quals
QualsQuals
Quals
 
Best practices machine learning final
Best practices machine learning finalBest practices machine learning final
Best practices machine learning final
 
Unlocked Workshop OSCON 2013 - Part I
Unlocked Workshop OSCON 2013 - Part IUnlocked Workshop OSCON 2013 - Part I
Unlocked Workshop OSCON 2013 - Part I
 
Cassandra sf meetup_2013_07_31
Cassandra sf meetup_2013_07_31Cassandra sf meetup_2013_07_31
Cassandra sf meetup_2013_07_31
 
Cassandra at Disqus — SF Cassandra Users Group July 31st
Cassandra at Disqus — SF Cassandra Users Group July 31stCassandra at Disqus — SF Cassandra Users Group July 31st
Cassandra at Disqus — SF Cassandra Users Group July 31st
 
UCIAD - quick overview
UCIAD - quick overviewUCIAD - quick overview
UCIAD - quick overview
 
Quals
QualsQuals
Quals
 
An Overview of the Emerging Graph Landscape (Oct 2013)
An Overview of the Emerging Graph Landscape (Oct 2013)An Overview of the Emerging Graph Landscape (Oct 2013)
An Overview of the Emerging Graph Landscape (Oct 2013)
 
Best Practices for Big Data Analytics with Machine Learning by Datameer
Best Practices for Big Data Analytics with Machine Learning by DatameerBest Practices for Big Data Analytics with Machine Learning by Datameer
Best Practices for Big Data Analytics with Machine Learning by Datameer
 
Active directory 101
Active directory 101Active directory 101
Active directory 101
 
IEEE 2014 DOTNET CLOUD COMPUTING PROJECTS A scientometric analysis of cloud c...
IEEE 2014 DOTNET CLOUD COMPUTING PROJECTS A scientometric analysis of cloud c...IEEE 2014 DOTNET CLOUD COMPUTING PROJECTS A scientometric analysis of cloud c...
IEEE 2014 DOTNET CLOUD COMPUTING PROJECTS A scientometric analysis of cloud c...
 
Concepts, use cases and principles to build big data systems (1)
Concepts, use cases and principles to build big data systems (1)Concepts, use cases and principles to build big data systems (1)
Concepts, use cases and principles to build big data systems (1)
 
Extracting Insights from Data at Twitter
Extracting Insights from Data at TwitterExtracting Insights from Data at Twitter
Extracting Insights from Data at Twitter
 
DP-203T00 Microsoft Azure Data Engineering-08.pptx
DP-203T00 Microsoft Azure Data Engineering-08.pptxDP-203T00 Microsoft Azure Data Engineering-08.pptx
DP-203T00 Microsoft Azure Data Engineering-08.pptx
 
Data analytics introduction
Data analytics introductionData analytics introduction
Data analytics introduction
 
A Novel Method for Data Cleaning and User- Session Identification for Web Mining
A Novel Method for Data Cleaning and User- Session Identification for Web MiningA Novel Method for Data Cleaning and User- Session Identification for Web Mining
A Novel Method for Data Cleaning and User- Session Identification for Web Mining
 
Complex realtime event analytics using BigQuery @Crunch Warmup
Complex realtime event analytics using BigQuery @Crunch WarmupComplex realtime event analytics using BigQuery @Crunch Warmup
Complex realtime event analytics using BigQuery @Crunch Warmup
 

Plus de Lewis Lin 🦊

Gaskins' memo pitching PowerPoint
Gaskins' memo pitching PowerPointGaskins' memo pitching PowerPoint
Gaskins' memo pitching PowerPointLewis Lin 🦊
 
P&G Memo: Creating Modern Day Brand Management
P&G Memo: Creating Modern Day Brand ManagementP&G Memo: Creating Modern Day Brand Management
P&G Memo: Creating Modern Day Brand ManagementLewis Lin 🦊
 
Jeffrey Katzenberg on Disney Studios
Jeffrey Katzenberg on Disney StudiosJeffrey Katzenberg on Disney Studios
Jeffrey Katzenberg on Disney StudiosLewis Lin 🦊
 
Carnegie Mellon MS PM Internships 2020
Carnegie Mellon MS PM Internships 2020Carnegie Mellon MS PM Internships 2020
Carnegie Mellon MS PM Internships 2020Lewis Lin 🦊
 
Gallup's Notes on Reinventing Performance Management
Gallup's Notes on Reinventing Performance ManagementGallup's Notes on Reinventing Performance Management
Gallup's Notes on Reinventing Performance ManagementLewis Lin 🦊
 
Twitter Job Opportunities for Students
Twitter Job Opportunities for StudentsTwitter Job Opportunities for Students
Twitter Job Opportunities for StudentsLewis Lin 🦊
 
Facebook's Official Guide to Technical Program Management Candidates
Facebook's Official Guide to Technical Program Management CandidatesFacebook's Official Guide to Technical Program Management Candidates
Facebook's Official Guide to Technical Program Management CandidatesLewis Lin 🦊
 
Performance Management at Google
Performance Management at GooglePerformance Management at Google
Performance Management at GoogleLewis Lin 🦊
 
Google Interview Prep Guide Software Engineer
Google Interview Prep Guide Software EngineerGoogle Interview Prep Guide Software Engineer
Google Interview Prep Guide Software EngineerLewis Lin 🦊
 
Google Interview Prep Guide Product Manager
Google Interview Prep Guide Product ManagerGoogle Interview Prep Guide Product Manager
Google Interview Prep Guide Product ManagerLewis Lin 🦊
 
Skills Assessment Offering by Lewis C. Lin
Skills Assessment Offering by Lewis C. LinSkills Assessment Offering by Lewis C. Lin
Skills Assessment Offering by Lewis C. LinLewis Lin 🦊
 
How Men and Women Differ Across Leadership Traits
How Men and Women Differ Across Leadership TraitsHow Men and Women Differ Across Leadership Traits
How Men and Women Differ Across Leadership TraitsLewis Lin 🦊
 
Product Manager Skills Survey
Product Manager Skills SurveyProduct Manager Skills Survey
Product Manager Skills SurveyLewis Lin 🦊
 
Uxpin Why Build a Design System
Uxpin Why Build a Design SystemUxpin Why Build a Design System
Uxpin Why Build a Design SystemLewis Lin 🦊
 
30-Day Google PM Interview Study Guide
30-Day Google PM Interview Study Guide30-Day Google PM Interview Study Guide
30-Day Google PM Interview Study GuideLewis Lin 🦊
 
30-Day Facebook PM Interview Study Guide
30-Day Facebook PM Interview Study Guide30-Day Facebook PM Interview Study Guide
30-Day Facebook PM Interview Study GuideLewis Lin 🦊
 
36-Day Amazon PM Interview Study Guide
36-Day Amazon PM Interview Study Guide36-Day Amazon PM Interview Study Guide
36-Day Amazon PM Interview Study GuideLewis Lin 🦊
 
McKinsey's Assessment on PM Careers
McKinsey's Assessment on PM CareersMcKinsey's Assessment on PM Careers
McKinsey's Assessment on PM CareersLewis Lin 🦊
 
Five Traits of Great Product Managers
Five Traits of Great Product ManagersFive Traits of Great Product Managers
Five Traits of Great Product ManagersLewis Lin 🦊
 

Plus de Lewis Lin 🦊 (20)

Gaskins' memo pitching PowerPoint
Gaskins' memo pitching PowerPointGaskins' memo pitching PowerPoint
Gaskins' memo pitching PowerPoint
 
P&G Memo: Creating Modern Day Brand Management
P&G Memo: Creating Modern Day Brand ManagementP&G Memo: Creating Modern Day Brand Management
P&G Memo: Creating Modern Day Brand Management
 
Jeffrey Katzenberg on Disney Studios
Jeffrey Katzenberg on Disney StudiosJeffrey Katzenberg on Disney Studios
Jeffrey Katzenberg on Disney Studios
 
Carnegie Mellon MS PM Internships 2020
Carnegie Mellon MS PM Internships 2020Carnegie Mellon MS PM Internships 2020
Carnegie Mellon MS PM Internships 2020
 
Gallup's Notes on Reinventing Performance Management
Gallup's Notes on Reinventing Performance ManagementGallup's Notes on Reinventing Performance Management
Gallup's Notes on Reinventing Performance Management
 
Twitter Job Opportunities for Students
Twitter Job Opportunities for StudentsTwitter Job Opportunities for Students
Twitter Job Opportunities for Students
 
Facebook's Official Guide to Technical Program Management Candidates
Facebook's Official Guide to Technical Program Management CandidatesFacebook's Official Guide to Technical Program Management Candidates
Facebook's Official Guide to Technical Program Management Candidates
 
Performance Management at Google
Performance Management at GooglePerformance Management at Google
Performance Management at Google
 
Google Interview Prep Guide Software Engineer
Google Interview Prep Guide Software EngineerGoogle Interview Prep Guide Software Engineer
Google Interview Prep Guide Software Engineer
 
Google Interview Prep Guide Product Manager
Google Interview Prep Guide Product ManagerGoogle Interview Prep Guide Product Manager
Google Interview Prep Guide Product Manager
 
Skills Assessment Offering by Lewis C. Lin
Skills Assessment Offering by Lewis C. LinSkills Assessment Offering by Lewis C. Lin
Skills Assessment Offering by Lewis C. Lin
 
How Men and Women Differ Across Leadership Traits
How Men and Women Differ Across Leadership TraitsHow Men and Women Differ Across Leadership Traits
How Men and Women Differ Across Leadership Traits
 
Product Manager Skills Survey
Product Manager Skills SurveyProduct Manager Skills Survey
Product Manager Skills Survey
 
Uxpin Why Build a Design System
Uxpin Why Build a Design SystemUxpin Why Build a Design System
Uxpin Why Build a Design System
 
Sourcing on GitHub
Sourcing on GitHubSourcing on GitHub
Sourcing on GitHub
 
30-Day Google PM Interview Study Guide
30-Day Google PM Interview Study Guide30-Day Google PM Interview Study Guide
30-Day Google PM Interview Study Guide
 
30-Day Facebook PM Interview Study Guide
30-Day Facebook PM Interview Study Guide30-Day Facebook PM Interview Study Guide
30-Day Facebook PM Interview Study Guide
 
36-Day Amazon PM Interview Study Guide
36-Day Amazon PM Interview Study Guide36-Day Amazon PM Interview Study Guide
36-Day Amazon PM Interview Study Guide
 
McKinsey's Assessment on PM Careers
McKinsey's Assessment on PM CareersMcKinsey's Assessment on PM Careers
McKinsey's Assessment on PM Careers
 
Five Traits of Great Product Managers
Five Traits of Great Product ManagersFive Traits of Great Product Managers
Five Traits of Great Product Managers
 

Dernier

Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorTier1 app
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slidesvaideheekore1
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...OnePlan Solutions
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolsosttopstonverter
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesKrzysztofKkol1
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingShane Coughlan
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
Not a Kubernetes fan? The state of PaaS in 2024
Not a Kubernetes fan? The state of PaaS in 2024Not a Kubernetes fan? The state of PaaS in 2024
Not a Kubernetes fan? The state of PaaS in 2024Anthony Dahanne
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldRoberto Pérez Alcolea
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonApplitools
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 

Dernier (20)

Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryError
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
Not a Kubernetes fan? The state of PaaS in 2024
Not a Kubernetes fan? The state of PaaS in 2024Not a Kubernetes fan? The state of PaaS in 2024
Not a Kubernetes fan? The state of PaaS in 2024
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 

Creating social features at BranchOut using MongoDB

  • 1. Building Social Features with MongoDB Nathan Smith BranchOut.com Jan. 22, 2013 Tuesday, January 22, 13
  • 2. BranchOut • Connect with your colleagues (follow) • Activity feed of their professional activity • Timeline of an individual’s posts A more social professional network Tuesday, January 22, 13
  • 3. BranchOut • 30M installed users • 750MM total user records • Average 300 connections per installed user A more social professional network Tuesday, January 22, 13
  • 5. MongoDB @ BranchOut • 100% MySQL until ~July 2012 Tuesday, January 22, 13
  • 6. MongoDB @ BranchOut • 100% MySQL until ~July 2012 • Much of our data fits well into a document model Tuesday, January 22, 13
  • 7. MongoDB @ BranchOut • 100% MySQL until ~July 2012 • Much of our data fits well into a document model • Our data design avoids RDBMS features Tuesday, January 22, 13
  • 10. Follow System • Limit of 2000 followees (people you follow) Business logic Tuesday, January 22, 13
  • 11. Follow System • Limit of 2000 followees (people you follow) • Unlimited followers Business logic Tuesday, January 22, 13
  • 12. Follow System • Limit of 2000 followees (people you follow) • Unlimited followers • Both lists reflect updates in near-real time Business logic Tuesday, January 22, 13
  • 13. Follow System Traditional RDBMS (i.e. MySQL) follower_uid followee_uid follow_time 123 456 2013-01-22 15:43:00 456 123 2013-01-22 15:52:00 Tuesday, January 22, 13
  • 14. Follow System Traditional RDBMS (i.e. MySQL) follower_uid followee_uid follow_time 123 456 2013-01-22 15:43:00 456 123 2013-01-22 15:52:00 Advantage: Easy inserts, deletes Tuesday, January 22, 13
  • 15. Follow System Traditional RDBMS (i.e. MySQL) follower_uid followee_uid follow_time 123 456 2013-01-22 15:43:00 456 123 2013-01-22 15:52:00 Advantage: Easy inserts, deletes Disadvantage: Data locality, index size Tuesday, January 22, 13
  • 16. Follow System MongoDB (first pass) followee: { _id: 123 uids: [456, 567, 678] } Tuesday, January 22, 13
  • 17. Follow System MongoDB (first pass) Advantage: Compact data, read locality followee: { _id: 123 uids: [456, 567, 678] } Tuesday, January 22, 13
  • 18. Follow System MongoDB (first pass) Advantage: Compact data, read locality Disadvantage: Can’t display a user’s followers followee: { _id: 123 uids: [456, 567, 678] } Tuesday, January 22, 13
  • 19. db.follow.find({uids: 456}, {_id: 1}); Follow System Can’t display a user’s followers (easily) followee: { _id: 123 uids: [456, 567, 678] } ...with multi-key index on uids Tuesday, January 22, 13
  • 20. db.follow.find({uids: 456}, {_id: 1}); Follow System Can’t display a user’s followers (easily) Expensive! Also, no guarantee of order. followee: { _id: 123 uids: [456, 567, 678] } ...with multi-key index on uids Tuesday, January 22, 13
  • 21. Follow System MongoDB (second pass) followee: { _id: 1, uids: [2, 3] }, followee: { _id: 2, uids: [1, 3] } follower: { _id: 1, uids: [2] }, follower: { _id: 2, uids: [1] } follower: { _id: 3, uids: [1, 2] } Tuesday, January 22, 13
  • 22. Follow System MongoDB (second pass) Advantages: Local data, fast selects followee: { _id: 1, uids: [2, 3] }, followee: { _id: 2, uids: [1, 3] } follower: { _id: 1, uids: [2] }, follower: { _id: 2, uids: [1] } follower: { _id: 3, uids: [1, 2] } Tuesday, January 22, 13
  • 23. Follow System MongoDB (second pass) Advantages: Local data, fast selects Disadvantages: Follower doc size followee: { _id: 1, uids: [2, 3] }, followee: { _id: 2, uids: [1, 3] } follower: { _id: 1, uids: [2] }, follower: { _id: 2, uids: [1] } follower: { _id: 3, uids: [1, 2] } Tuesday, January 22, 13
  • 24. Follow System Follower document size Tuesday, January 22, 13
  • 25. Follow System Follower document size • Max Mongo doc size: 16MB Tuesday, January 22, 13
  • 26. Follow System Follower document size • Max Mongo doc size: 16MB • Number of people who follow our community manager: 30MM Tuesday, January 22, 13
  • 27. Follow System Follower document size • Max Mongo doc size: 16MB • Number of people who follow our community manager: 30MM • 30MM uids × 8 bytes/uid = 240MB Tuesday, January 22, 13
  • 28. Follow System Follower document size • Max Mongo doc size: 16MB • Number of people who follow our community manager: 30MM • 30MM uids × 8 bytes/uid = 240MB • Max followers per doc: ~2MM Tuesday, January 22, 13
  • 29. Follow System MongoDB (final pass) follower: { _id: “1”, uids: [2,3,4,...], count: 20001, next_page: 2 }, follower: { _id: “1_p2”, uids: [23,24,25,...], count: 10000 } followee: { _id: 1, uids: [2, 3] }, followee: { _id: 2, uids: [1, 3] } Tuesday, January 22, 13
  • 30. Follow System MongoDB (final pass) follower: { _id: “1”, uids: [2,3,4,...], count: 20001, next_page: 2 }, follower: { _id: “1_p2”, uids: [23,24,25,...], count: 10000 } followee: { _id: 1, uids: [2, 3] }, followee: { _id: 2, uids: [1, 3] } follower: { _id: “1”, uids: [2,3,4,...], count: 10001, next_page: 3 }, follower: { _id: “1_p2”, uids: [23,24,25,...], count: 10000 } Tuesday, January 22, 13
  • 31. Follow System MongoDB (final pass) Asynchronous thread manages follower documents follower: { _id: “1”, uids: [2,3,4,...], count: 20001, next_page: 2 }, follower: { _id: “1_p2”, uids: [23,24,25,...], count: 10000 } followee: { _id: 1, uids: [2, 3] }, followee: { _id: 2, uids: [1, 3] } follower: { _id: “1”, uids: [2,3,4,...], count: 10001, next_page: 3 }, follower: { _id: “1_p2”, uids: [23,24,25,...], count: 10000 } Tuesday, January 22, 13
  • 33. Push vs Pull architecture Activity Feed Tuesday, January 22, 13
  • 34. Push vs Pull architecture Activity Feed Tuesday, January 22, 13
  • 35. Push vs Pull architecture Activity Feed Tuesday, January 22, 13
  • 37. Business logic • All connections and followees appear in your feed Activity Feed Tuesday, January 22, 13
  • 38. Business logic • All connections and followees appear in your feed • Reverse chron sort order (but should support other rankings) Activity Feed Tuesday, January 22, 13
  • 39. Business logic • All connections and followees appear in your feed • Reverse chron sort order (but should support other rankings) • Support for evolving set of feed event types Activity Feed Tuesday, January 22, 13
  • 40. Business logic • All connections and followees appear in your feed • Reverse chron sort order (but should support other rankings) • Support for evolving set of feed event types • Tagging creates multiple feed events for the same underlying object Activity Feed Tuesday, January 22, 13
  • 41. Business logic • All connections and followees appear in your feed • Reverse chron sort order (but should support other rankings) • Support for evolving set of feed event types • Tagging creates multiple feed events for the same underlying object • Feed events are not ephemeral -- Timeline Activity Feed Tuesday, January 22, 13
  • 42. Traditional RDBMS (i.e. MySQL) activity_id uid event_time type oid1 oid2 1 123 2013-01-22 15:43:00 photo 123abc 789ghi 2 345 2013-01-22 15:52:00 status 456def foobar Activity Feed Tuesday, January 22, 13
  • 43. Traditional RDBMS (i.e. MySQL) activity_id uid event_time type oid1 oid2 1 123 2013-01-22 15:43:00 photo 123abc 789ghi 2 345 2013-01-22 15:52:00 status 456def foobar Advantage: Easy inserts Activity Feed Tuesday, January 22, 13
  • 44. Traditional RDBMS (i.e. MySQL) activity_id uid event_time type oid1 oid2 1 123 2013-01-22 15:43:00 photo 123abc 789ghi 2 345 2013-01-22 15:52:00 status 456def foobar Advantage: Easy inserts Disadvantages: Rigid schema adapts poorly to new activity types, doesn’t scale Activity Feed Tuesday, January 22, 13
  • 45. MongoDB ufc:{ _id: 123, // UID total_events: 18, 2013_01_total: 4, 2012_12_total: 8, 2012_11_total: 6, ...other counts... } ufm:{ _id: “123_2013_01”, events: [ { uid: 123, type: “photo_upload”, content_id: “abcd9876”, timestamp: 1358824502, ...more metadata... }, ...more events... ] } user_feed_card user_feed_month Activity Feed Tuesday, January 22, 13
  • 47. Algorithm 1. Load user_feed_cards for all connections Activity Feed Tuesday, January 22, 13
  • 48. Algorithm 1. Load user_feed_cards for all connections 2. Calculate which user_feed_months to load Activity Feed Tuesday, January 22, 13
  • 49. Algorithm 1. Load user_feed_cards for all connections 2. Calculate which user_feed_months to load 3. Load user_feed_months Activity Feed Tuesday, January 22, 13
  • 50. Algorithm 1. Load user_feed_cards for all connections 2. Calculate which user_feed_months to load 3. Load user_feed_months 4. Aggregate events that refer to the same story Activity Feed Tuesday, January 22, 13
  • 51. Algorithm 1. Load user_feed_cards for all connections 2. Calculate which user_feed_months to load 3. Load user_feed_months 4. Aggregate events that refer to the same story 5. Sort (reverse chron) Activity Feed Tuesday, January 22, 13
  • 52. Algorithm 1. Load user_feed_cards for all connections 2. Calculate which user_feed_months to load 3. Load user_feed_months 4. Aggregate events that refer to the same story 5. Sort (reverse chron) 6. Load content, comments, etc. and build stories Activity Feed Tuesday, January 22, 13
  • 54. Performance • Response times average under 500 ms (98th percentile under 1 sec Activity Feed Tuesday, January 22, 13
  • 55. Performance • Response times average under 500 ms (98th percentile under 1 sec • Design expected to scale well horizontally Activity Feed Tuesday, January 22, 13
  • 56. Performance • Response times average under 500 ms (98th percentile under 1 sec • Design expected to scale well horizontally • Need to continue to optimize Activity Feed Tuesday, January 22, 13
  • 57. Building Social Features with MongoDB Nathan Smith BrO: http://branchout.com/nate FB: http://facebook.com/neocortica Twitter: @nate510 Email: nate@branchout.com Aditya Agarwal on Facebook’s architecture: http://www.infoq.com/presentations/Facebook-Software-Stack Dan McKinley on Etsy’s activity feed: http://www.slideshare.net/danmckinley/etsy-activity-feeds-architecture Good Quora questions on activity feeds: http://www.quora.com/What-are-the-scaling-issues-to-keep-in-mind-while-developing-a-social-network-feed http://www.quora.com/What-are-best-practices-for-building-something-like-a-News-Feed Tuesday, January 22, 13