SlideShare a Scribd company logo
1
Jacob Dejno
Web Developer
Ryan Seamons
Product Manager
2
What we will not cover:
• Scaling MongoDB
• High load volume and QPS
• Using MongoDB for analytics
• MongoDB Production/Development Deployments
• Big Data.
3
We will cover:
• LearnIn, LinkedIn’s Internal Learning Portal
• Using Node.js and MongoDB
• Mongoose ODM
• Move to Elasticsearch
4
Quick API development using MongoDB
5
What’s your next play?
6
7
8
9
10
What technologies should we use?
11
How do we leverage our current knowledge?
12
What server and database?
13
How did we build this… quickly?
14
Let’s start with server selection… which one?
15
16
Node.js
• Server-side JavaScript
• Lightweight and quick to setup
• NPM package support
• Extensive documentation and community
• Allows for data-driven JSON template rendering
• Easy REST API creation using Express.js
17
Which database?
18
LearnIn’s Database Needs
• Support 5,000+ employees, globally
• Minimal data storage needs
• Many more reads that writes
• Able to scale with company growth
• Flexibility
19
20
MongoDB
• Easy to setup
• NoSQL with JSON structure
• Advanced querying
• Flexible schema, schema-less
• Extensive documentation
• High Single instance thresholds
21
22
{
“data”: “have”,
“models”: “schema”
}
23
mongoose
24
Mongoose
• Object Document Mapper with easy type casting
• Quick to setup, replaces Mongo JS driver
• Easy document modeling and field validation API
• Business logic hooks, Custom Middleware
• Mongo _id reference population
25
var mongoose = require(‘mongoose’),
!
connection = mongoose.connect('mongodb://localhost:27017/test');
26
var mongoose = require(‘mongoose’),
Schema = mongoose.Schema
!
!
function BaseSchema() {

Schema.apply(this, arguments);



this.add({

publisher: {

type: ObjectId,

ref: 'User'

}

});

}
Document Modeling & Validation
var AssetSchema = new BaseModel.BaseSchema({

title: {

type: String,

required: true,

trim: true

},

description: {

type: String,

required: true,

trim: true

}

},{

collection: 'assets'

});
27
this.pre('save', function (next) {



if ( !this.publisher ) {

this.publisher = this.lastUpdatedByUser;

}


// Continue on to next function in queue

next();

});
Business Logic Hooks
28
function queryAssets(query, callback) {

model

.find(query) // query is JSON object

.populate(‘publisher’) // populate publisher from ‘users’ collection

.exec(function (error, resultSet) {

return callback && callback(error, resultSet);

});

}
NoSQL Reference Population
29
Our Schema Design with Mongoose
Normalized Data Modeling
Many-to-many relationships
Collection per data type
30
var AssetSchema = new BaseModel.BaseSchema({

title: {

type: String,

required: true,

trim: true

},

type: {

type: String,

default: 'general',

enum: typeEnums

},

relatedAssets: [

{

type: ObjectId,

ref: 'Asset'

}

]

}, {

collection: 'assets'

});
31
CourseSchema = new BaseModel.BaseSchema({

groups: [

{

title: {

type: String

},

items: [

{

asset: {

type: ObjectId,

ref: 'Asset'

},

task: {

type: ObjectId,

ref: 'Task'

}

}

]

}

]

}, {

collection: 'courses'

});
// nested population
function getCourseById(id, callback) {

Model
.findById(id)
.populate('groups.items.asset groups.items.task’)
.exec(callback);

}
32
function getAsset(req, res) {

if (!req.params.id) {

return res.send(500, 'Please add a asset ID.');

}



assetModel.model.findOne({

_id: req.params.id

}).populate('relatedAssets').exec(function (err, asset) {

if(err){

res.send(500, err);

return;

}

res.json(200, asset);

});

}
app.get('/api/asset/:id', controller.getAsset);
Route:
Controller:
33
34
35
{ "_id" : ObjectId("51c0b755d292ad5a7a000039"), "academy" : "Leadership", "dateCreated" : ISODate("2013-06-18T19:39:01Z"), "date_es_indexed" : ISODate("2014-02-07T16:35:00.173Z"),
"description" : "We'll discuss what is required to work in a global context at LinkedIn and how managers can become effective global leaders? ", "image_url" : "/media/images/comingsoon/
thumbnails_coming-soon3.jpg", "longdescription" : "What is required to work in a global context at LinkedIn? What are the personal capabilities that enable a global manager to succeed? How
do managers begin to develop a global perspective that will enable them to become effective global leaders? Please come prepared to discuss the following questions:nn(a) In your job, what
will you be doing differently to reflect the global nature of our business?n(b) What are some things we do as a company that still take a US-centric approach, and what would you recommend
we do to change that?", "state" : "draft", "tag_suggest" : { "input" : [ "Management & Leadership" ] }, "tags" : [ "Management & Leadership" ], "title" : "Think Global with Arvind Rajan", "type" :
"slideshow" }
{ "_id" : ObjectId("51c0b755d292ad5a7a00003a"), "academy" : "Leadership", "dateCreated" : ISODate("2013-06-18T19:39:01Z"), "date_es_indexed" : ISODate("2014-02-07T16:35:00.173Z"),
"description" : "We'll discuss how to handle difficult conversations with employees regarding performance or not meeting expectations", "image_url" : "/media/images/comingsoon/
thumbnails_coming-soon3.jpg", "longdescription" : "We'll discuss how to handle difficult conversations with employees regarding performance or not meeting expectations", "state" : "draft",
"tag_suggest" : { "input" : [ "Management & Leadership" ] }, "tags" : [ "Management & Leadership" ], "title" : "Handling Difficult Conversations with Cliff Rosenberg", "type" : "slideshow" }
{ "_id" : ObjectId("51c0b755d292ad5a7a00003b"), "academy" : "Leadership", "adder" : "", "applyContent" : "", "author" : "", "clicks" : 8, "dateCreated" : ISODate("2013-06-18T19:39:01Z"),
"date_es_indexed" : ISODate("2014-02-07T16:35:00.173Z"), "description" : "Containing vital performance and career lessons for managers at every level; this book presents the remarkable
findings of Gallup's massive in-depth study of great managers across a wide variety of situations.", "enableEnrichedAsset" : false, "image_url" : "/media/images/learningassets/leadership/
12.jpg", "longdescription" : "(b) What are some things we do as a company that still take a US-centric approach, and what would you recommend we do to change that?", "practiceContent" : "",
"state" : "live", "tag_suggest" : { "input" : [ "Editor", "Leadership & Management", "Books & Articles", "Transitioning to Management", "Management & Leadership" ] },
"tags" : [ "Editor", "Leadership & Management", "Books & Articles", "Transitioning to Management", "Management & Leadership" ], "thinkContent" : "", "title" : "First, Break All
the Rules: What the World's Greatest Managers Do Differently", "type" : "book", "url" : "https://linkedin.okta.com/app/template_saml_2_0/k2bnhvkoMCFSHKCKIJUA/sso/saml?
RelayState=https%3A%2F%2Ffanyv88.com%3A443%2Fhttps%2Flinkedin.skillport.com%2Fskillportfe%2Fcustom%2Flogin%2Flinkedin%2Flogin.action%3Fcourseaction%3DLaunch%26assetid%3D_ss_book%3A15501" }
{ "_id" : ObjectId("51c0b755d292ad5a7a00003c"), "academy" : "Leadership", "dateCreated" : ISODate("2013-06-18T19:39:01Z"), "date_es_indexed" : ISODate("2014-02-07T16:35:00.173Z"),
"description" : "We'll discuss the FCS model for managing hyper-growth. Fewer things done better. Communicating the right information to the right person at the right time.", "image_url" : "/
media/images/comingsoon/thumbnails_coming-soon3.jpg", "longdescription" : "We'll discuss the FCS model for managing hyper-growth. Fewer things done better. Communicating the right
information to the right person at the right time.", "state" : "draft", "tag_suggest" : { "input" : [ "Management & Leadership" ] }, "tags" : [ "Management & Leadership" ], "title" : "Managing Hyper-
growth with Jeff Weiner", "type" : "slideshow" }
{ "_id" : ObjectId("51c0b755d292ad5a7a00003d"), "academy" : "Leadership", "adder" : "", "applyContent" : "", "author" : "", "clicks" : 24, "dateCreated" : ISODate("2013-06-18T19:39:01Z"),
"date_es_indexed" : ISODate("2014-02-07T16:35:00.173Z"), "description" : "David shares learnings from the leaders that have inspired him and examples from his own career. ",
"enableEnrichedAsset" : false, "image_url" : "/media/images/learningassets/leadership/43.jpg", "longdescription" : "David shares learnings from the leaders that have inspired him and
examples from his own career. ", "practiceContent" : "", "recommendations" : [ ObjectId("521e6fd66f13a29715000044") ], "state" : "live", "tag_suggest" : { "input" : [ "Editor", "Leadership &
Management", "Videos", "Leadership 101", "Leaders Teaching Leaders", "LTL", "Management & Leadership" ] }, "tags" : [ "Editor", "Leadership & Management",
"Videos", "Leadership 101", "Leaders Teaching Leaders", "LTL", "Management & Leadership" ], "thinkContent" : "", "title" : "Leadership 101 with David Henke", "type" :
"video", "url" : "http://innertube.linkedin.biz/video/Leadership101_2013_0118/index.html" }
{ "_id" : ObjectId("51c0b755d292ad5a7a00003e"), "academy" : "Professional", "author" : "EMEA", "dateCreated" : ISODate("2013-06-18T19:39:01Z"), "date_es_indexed" :
ISODate("2014-02-07T16:35:00.173Z"), "description" : "Learn how to apply tips and tools for using your time more efficiently, meeting deadlines and increasing productivity, including learning
how to use MS Outlook more effectively.nn", "image_url" : "/media/images/learningassets/professional/36_time_management.jpg", "longdescription" : "long description", "options" :
[ "hidden" ], "state" : "draft", "tag_suggest" : { "input" : [ "Professional Development", "Learning Programs & Classes" ] }, "tags" : [ "Professional Development", "Learning Programs &
Classes" ], "title" : "Time Management ", "type" : "article", "url" : "https://linkedin.okta.com/app/template_saml_2_0/k166h5vsMZMIUWGSDZSJ/sso/saml?RelayState=%2fdeeplink
%2fssodeeplink.aspx%3fmodule%3dtranscript%26loid%3d919c0d74-4d51-43bd-87c9-546896287d49" }
{ "_id" : ObjectId("51c0b755d292ad5a7a000039"), "academy" : "Leadership", "dateCreated" : ISODate("2013-06-18T19:39:01Z"), "date_es_indexed" : ISODate("2014-02-07T16:35:00.173Z"),
"description" : "We'll discuss what is required to work in a global context at LinkedIn and how managers can become effective global leaders? ", "image_url" : "/media/images/comingsoon/
thumbnails_coming-soon3.jpg", "longdescription" : "What is required to work in a global context at LinkedIn? What are the personal capabilities that enable a global manager to succeed? How
do managers begin to develop a global perspective that will enable them to become effective global leaders? Please come prepared to discuss the following questions:nn(a) In your job, what
will you be doing differently to reflect the global nature of our business?n(b) What are some things we do as a company that still take a US-centric approach, and what would you recommend
How do we search?
36
> db.collection.find({ title: new RegExp(‘<search query>’, ‘i’) });
37
Full-Text Search
38
39
> db.collection.ensureIndex({ <field>: “text" })
40
> db.collection.find({ $text: { $search: <string> } });
• Easy searching by creating MongoDB index
• Relevancy scoring
• Stemming and multi-language support
What text search gives us:
41
• Single tokenizer/analyzer
• Simple relevancy scoring, but not using Lucene
• No completion suggestion
• No fuzzy matching
• No related item search
Some limitations…
42
What we needed:
• Lucene index relevancy scoring and performance
• Custom field analyzers for tokenization and stemming
• ‘Related to’ or ‘More like this’ querying
• Quick completion suggestions
• Complicated wildcard searching
• Easy Node.js integration
43
44
45
?
elasticsearch-river-mongodb
46
How does it work?
47
Replica Set
OpLog
Primary
Secondary Replica
Index
ES River
48
Configuring the River
$ curl -XPUT “localhost:9200/_river/<RIVER_NAME>/_meta” -d ‘
{

"type": "mongodb",

"mongodb": {

"servers": [

{

"host": "< HOST >",

"port": "< PORT >"

}

],

"db": "learnin",

"options": {

"import_all_collections": "true"

}

},

"index": {

"name": "prodindexnew"

}

}’
49
http://localhost:9200/index/type/_search?q=<search>
50
elasticsearch.js
51
Some limitations…
52
53
mongoose
LearnIn API
54
55
Contact
linkedin.com/in/rseamons
!
@ryanseamons
linkedin.com/in/dejno
!
@dejno
Jacob Dejno
Web Developer
Ryan Seamons
Product Manager
56
Questions?
57
Appendix
• MongoDB NoSQL Database
• Mongoose ODM
• Node.js server
• Express.js WebApp Framework
• MongoDB Full-Text Search
• Elasticsearch
• Elasticsearch-River-MongoDB
• Elasticsearch Rivers
• These Slides
58
©2014 LinkedIn Corporation. All Rights Reserved.
59

More Related Content

PPT
Introduction à l'intelligence collective pour les entreprises
Jean-François Noubel
 
PPTX
MongoDB
Ganesh Kunwar
 
PDF
MongoDB Schema Design (Event: An Evening with MongoDB Houston 3/11/15)
MongoDB
 
PDF
Building a Social Network with MongoDB
Fred Chu
 
PPT
MongoDB Schema Design
MongoDB
 
PPT
MongoATL: How Sourceforge is Using MongoDB
Rick Copeland
 
PPTX
Semantic Wiki: Social Semantic Web In Action:
Jesse Wang
 
Introduction à l'intelligence collective pour les entreprises
Jean-François Noubel
 
MongoDB
Ganesh Kunwar
 
MongoDB Schema Design (Event: An Evening with MongoDB Houston 3/11/15)
MongoDB
 
Building a Social Network with MongoDB
Fred Chu
 
MongoDB Schema Design
MongoDB
 
MongoATL: How Sourceforge is Using MongoDB
Rick Copeland
 
Semantic Wiki: Social Semantic Web In Action:
Jesse Wang
 

Viewers also liked (13)

PDF
An Elastic Metadata Store for eBay’s Media Platform
MongoDB
 
KEY
Scaling with MongoDB
MongoDB
 
PDF
Artigo Nosql
Ademir Tadeu
 
PPTX
NOSQL uma breve introdução
Wise Systems
 
PPTX
MongoDB San Francisco 2013: Storing eBay's Media Metadata on MongoDB present...
MongoDB
 
PDF
No sql e as vantagens na utilização do mongodb
fabio perrella
 
PDF
Social Data and Log Analysis Using MongoDB
Takahiro Inoue
 
PPTX
eBay Cloud CMS based on NOSQL
Xu Jiang
 
PDF
Ebay: DB Capacity planning at eBay
DataStax Academy
 
KEY
NoSQL at Twitter (NoSQL EU 2010)
Kevin Weil
 
PPTX
MongoDB Schema Design: Four Real-World Examples
Mike Friedman
 
PPTX
MongoDB at eBay
MongoDB
 
PPTX
MongoDB Schema Design: Four Real-World Examples
Lewis Lin 🦊
 
An Elastic Metadata Store for eBay’s Media Platform
MongoDB
 
Scaling with MongoDB
MongoDB
 
Artigo Nosql
Ademir Tadeu
 
NOSQL uma breve introdução
Wise Systems
 
MongoDB San Francisco 2013: Storing eBay's Media Metadata on MongoDB present...
MongoDB
 
No sql e as vantagens na utilização do mongodb
fabio perrella
 
Social Data and Log Analysis Using MongoDB
Takahiro Inoue
 
eBay Cloud CMS based on NOSQL
Xu Jiang
 
Ebay: DB Capacity planning at eBay
DataStax Academy
 
NoSQL at Twitter (NoSQL EU 2010)
Kevin Weil
 
MongoDB Schema Design: Four Real-World Examples
Mike Friedman
 
MongoDB at eBay
MongoDB
 
MongoDB Schema Design: Four Real-World Examples
Lewis Lin 🦊
 
Ad

Similar to Building LinkedIn's Learning Platform with MongoDB (20)

PDF
Building LinkedIn's Learning Platform with MongoDB
Jake Dejno
 
PPTX
Creating a Single View: Overview and Analysis
MongoDB
 
DOCX
Social Networking using ROR
Dhaval Patel
 
PDF
Digital Success Stack for DCBKK 2018
Kyvio
 
PPTX
Keynote - Speaker: Grigori Melnik
MongoDB
 
PDF
DAS Slides: Data Architect vs. Data Engineer vs. Data Modeler
DATAVERSITY
 
PPTX
moma-django overview --> Django + MongoDB: building a custom ORM layer
Gadi Oren
 
PDF
Yeoman AngularJS and D3 - A solid stack for web apps
climboid
 
PPTX
Noman Khan Internship Report 2.pptx
NomanKhan869872
 
PPTX
SQL to NoSQL: Top 6 Questions
Mike Broberg
 
PPTX
bmarshall teaching Calculation Manager on prem
Roma766619
 
PDF
Mstr meetup
Bhavani Akunuri
 
PDF
Using feature teams to deliver high business value
Thoughtworks
 
PPTX
MongoDB.local Seattle 2019: MongoDB Stitch Tutorial
MongoDB
 
PPTX
MongoDB.local Dallas 2019: MongoDB Stitch Tutorial
MongoDB
 
PDF
Nicolas Embleton, Advanced Angular JS
JavaScript Meetup HCMC
 
PPTX
BDD Selenium for Agile Teams - User Stories
Sauce Labs
 
PDF
Engineering the New LinkedIn Profile
Josh Clemm
 
PPTX
Back to Basics, webinar 2: La tua prima applicazione MongoDB
MongoDB
 
PDF
Microsoft-365-Administrator-s-Guide1.pdf
mazharatknl
 
Building LinkedIn's Learning Platform with MongoDB
Jake Dejno
 
Creating a Single View: Overview and Analysis
MongoDB
 
Social Networking using ROR
Dhaval Patel
 
Digital Success Stack for DCBKK 2018
Kyvio
 
Keynote - Speaker: Grigori Melnik
MongoDB
 
DAS Slides: Data Architect vs. Data Engineer vs. Data Modeler
DATAVERSITY
 
moma-django overview --> Django + MongoDB: building a custom ORM layer
Gadi Oren
 
Yeoman AngularJS and D3 - A solid stack for web apps
climboid
 
Noman Khan Internship Report 2.pptx
NomanKhan869872
 
SQL to NoSQL: Top 6 Questions
Mike Broberg
 
bmarshall teaching Calculation Manager on prem
Roma766619
 
Mstr meetup
Bhavani Akunuri
 
Using feature teams to deliver high business value
Thoughtworks
 
MongoDB.local Seattle 2019: MongoDB Stitch Tutorial
MongoDB
 
MongoDB.local Dallas 2019: MongoDB Stitch Tutorial
MongoDB
 
Nicolas Embleton, Advanced Angular JS
JavaScript Meetup HCMC
 
BDD Selenium for Agile Teams - User Stories
Sauce Labs
 
Engineering the New LinkedIn Profile
Josh Clemm
 
Back to Basics, webinar 2: La tua prima applicazione MongoDB
MongoDB
 
Microsoft-365-Administrator-s-Guide1.pdf
mazharatknl
 
Ad

More from MongoDB (20)

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

Recently uploaded (20)

PPTX
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
PPTX
Stamford - Community User Group Leaders_ Agentblazer Status, AI Sustainabilit...
Amol Dixit
 
PDF
Revolutionize Operations with Intelligent IoT Monitoring and Control
Rejig Digital
 
PPT
L2 Rules of Netiquette in Empowerment technology
Archibal2
 
PDF
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PDF
Doc9.....................................
SofiaCollazos
 
PDF
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
PDF
Chapter 2 Digital Image Fundamentals.pdf
Getnet Tigabie Askale -(GM)
 
PDF
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
PPTX
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
PDF
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
PDF
REPORT: Heating appliances market in Poland 2024
SPIUG
 
PDF
DevOps & Developer Experience Summer BBQ
AUGNYC
 
PDF
How-Cloud-Computing-Impacts-Businesses-in-2025-and-Beyond.pdf
Artjoker Software Development Company
 
PDF
This slide provides an overview Technology
mineshkharadi333
 
PPT
Coupa-Kickoff-Meeting-Template presentai
annapureddyn
 
PDF
BLW VOCATIONAL TRAINING SUMMER INTERNSHIP REPORT
codernjn73
 
PPTX
How to Build a Scalable Micro-Investing Platform in 2025 - A Founder’s Guide ...
Third Rock Techkno
 
PPTX
Smart Infrastructure and Automation through IoT Sensors
Rejig Digital
 
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
Stamford - Community User Group Leaders_ Agentblazer Status, AI Sustainabilit...
Amol Dixit
 
Revolutionize Operations with Intelligent IoT Monitoring and Control
Rejig Digital
 
L2 Rules of Netiquette in Empowerment technology
Archibal2
 
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
Doc9.....................................
SofiaCollazos
 
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
Chapter 2 Digital Image Fundamentals.pdf
Getnet Tigabie Askale -(GM)
 
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
REPORT: Heating appliances market in Poland 2024
SPIUG
 
DevOps & Developer Experience Summer BBQ
AUGNYC
 
How-Cloud-Computing-Impacts-Businesses-in-2025-and-Beyond.pdf
Artjoker Software Development Company
 
This slide provides an overview Technology
mineshkharadi333
 
Coupa-Kickoff-Meeting-Template presentai
annapureddyn
 
BLW VOCATIONAL TRAINING SUMMER INTERNSHIP REPORT
codernjn73
 
How to Build a Scalable Micro-Investing Platform in 2025 - A Founder’s Guide ...
Third Rock Techkno
 
Smart Infrastructure and Automation through IoT Sensors
Rejig Digital
 

Building LinkedIn's Learning Platform with MongoDB

  • 1. 1
  • 2. Jacob Dejno Web Developer Ryan Seamons Product Manager 2
  • 3. What we will not cover: • Scaling MongoDB • High load volume and QPS • Using MongoDB for analytics • MongoDB Production/Development Deployments • Big Data. 3
  • 4. We will cover: • LearnIn, LinkedIn’s Internal Learning Portal • Using Node.js and MongoDB • Mongoose ODM • Move to Elasticsearch 4
  • 5. Quick API development using MongoDB 5
  • 7. 7
  • 8. 8
  • 9. 9
  • 10. 10
  • 12. How do we leverage our current knowledge? 12
  • 13. What server and database? 13
  • 14. How did we build this… quickly? 14
  • 15. Let’s start with server selection… which one? 15
  • 16. 16
  • 17. Node.js • Server-side JavaScript • Lightweight and quick to setup • NPM package support • Extensive documentation and community • Allows for data-driven JSON template rendering • Easy REST API creation using Express.js 17
  • 19. LearnIn’s Database Needs • Support 5,000+ employees, globally • Minimal data storage needs • Many more reads that writes • Able to scale with company growth • Flexibility 19
  • 20. 20
  • 21. MongoDB • Easy to setup • NoSQL with JSON structure • Advanced querying • Flexible schema, schema-less • Extensive documentation • High Single instance thresholds 21
  • 22. 22
  • 25. Mongoose • Object Document Mapper with easy type casting • Quick to setup, replaces Mongo JS driver • Easy document modeling and field validation API • Business logic hooks, Custom Middleware • Mongo _id reference population 25
  • 26. var mongoose = require(‘mongoose’), ! connection = mongoose.connect('mongodb://localhost:27017/test'); 26
  • 27. var mongoose = require(‘mongoose’), Schema = mongoose.Schema ! ! function BaseSchema() {
 Schema.apply(this, arguments);
 
 this.add({
 publisher: {
 type: ObjectId,
 ref: 'User'
 }
 });
 } Document Modeling & Validation var AssetSchema = new BaseModel.BaseSchema({
 title: {
 type: String,
 required: true,
 trim: true
 },
 description: {
 type: String,
 required: true,
 trim: true
 }
 },{
 collection: 'assets'
 }); 27
  • 28. this.pre('save', function (next) {
 
 if ( !this.publisher ) {
 this.publisher = this.lastUpdatedByUser;
 } 
 // Continue on to next function in queue
 next();
 }); Business Logic Hooks 28
  • 29. function queryAssets(query, callback) {
 model
 .find(query) // query is JSON object
 .populate(‘publisher’) // populate publisher from ‘users’ collection
 .exec(function (error, resultSet) {
 return callback && callback(error, resultSet);
 });
 } NoSQL Reference Population 29
  • 30. Our Schema Design with Mongoose Normalized Data Modeling Many-to-many relationships Collection per data type 30
  • 31. var AssetSchema = new BaseModel.BaseSchema({
 title: {
 type: String,
 required: true,
 trim: true
 },
 type: {
 type: String,
 default: 'general',
 enum: typeEnums
 },
 relatedAssets: [
 {
 type: ObjectId,
 ref: 'Asset'
 }
 ]
 }, {
 collection: 'assets'
 }); 31
  • 32. CourseSchema = new BaseModel.BaseSchema({
 groups: [
 {
 title: {
 type: String
 },
 items: [
 {
 asset: {
 type: ObjectId,
 ref: 'Asset'
 },
 task: {
 type: ObjectId,
 ref: 'Task'
 }
 }
 ]
 }
 ]
 }, {
 collection: 'courses'
 }); // nested population function getCourseById(id, callback) {
 Model .findById(id) .populate('groups.items.asset groups.items.task’) .exec(callback);
 } 32
  • 33. function getAsset(req, res) {
 if (!req.params.id) {
 return res.send(500, 'Please add a asset ID.');
 }
 
 assetModel.model.findOne({
 _id: req.params.id
 }).populate('relatedAssets').exec(function (err, asset) {
 if(err){
 res.send(500, err);
 return;
 }
 res.json(200, asset);
 });
 } app.get('/api/asset/:id', controller.getAsset); Route: Controller: 33
  • 34. 34
  • 35. 35
  • 36. { "_id" : ObjectId("51c0b755d292ad5a7a000039"), "academy" : "Leadership", "dateCreated" : ISODate("2013-06-18T19:39:01Z"), "date_es_indexed" : ISODate("2014-02-07T16:35:00.173Z"), "description" : "We'll discuss what is required to work in a global context at LinkedIn and how managers can become effective global leaders? ", "image_url" : "/media/images/comingsoon/ thumbnails_coming-soon3.jpg", "longdescription" : "What is required to work in a global context at LinkedIn? What are the personal capabilities that enable a global manager to succeed? How do managers begin to develop a global perspective that will enable them to become effective global leaders? Please come prepared to discuss the following questions:nn(a) In your job, what will you be doing differently to reflect the global nature of our business?n(b) What are some things we do as a company that still take a US-centric approach, and what would you recommend we do to change that?", "state" : "draft", "tag_suggest" : { "input" : [ "Management & Leadership" ] }, "tags" : [ "Management & Leadership" ], "title" : "Think Global with Arvind Rajan", "type" : "slideshow" } { "_id" : ObjectId("51c0b755d292ad5a7a00003a"), "academy" : "Leadership", "dateCreated" : ISODate("2013-06-18T19:39:01Z"), "date_es_indexed" : ISODate("2014-02-07T16:35:00.173Z"), "description" : "We'll discuss how to handle difficult conversations with employees regarding performance or not meeting expectations", "image_url" : "/media/images/comingsoon/ thumbnails_coming-soon3.jpg", "longdescription" : "We'll discuss how to handle difficult conversations with employees regarding performance or not meeting expectations", "state" : "draft", "tag_suggest" : { "input" : [ "Management & Leadership" ] }, "tags" : [ "Management & Leadership" ], "title" : "Handling Difficult Conversations with Cliff Rosenberg", "type" : "slideshow" } { "_id" : ObjectId("51c0b755d292ad5a7a00003b"), "academy" : "Leadership", "adder" : "", "applyContent" : "", "author" : "", "clicks" : 8, "dateCreated" : ISODate("2013-06-18T19:39:01Z"), "date_es_indexed" : ISODate("2014-02-07T16:35:00.173Z"), "description" : "Containing vital performance and career lessons for managers at every level; this book presents the remarkable findings of Gallup's massive in-depth study of great managers across a wide variety of situations.", "enableEnrichedAsset" : false, "image_url" : "/media/images/learningassets/leadership/ 12.jpg", "longdescription" : "(b) What are some things we do as a company that still take a US-centric approach, and what would you recommend we do to change that?", "practiceContent" : "", "state" : "live", "tag_suggest" : { "input" : [ "Editor", "Leadership & Management", "Books & Articles", "Transitioning to Management", "Management & Leadership" ] }, "tags" : [ "Editor", "Leadership & Management", "Books & Articles", "Transitioning to Management", "Management & Leadership" ], "thinkContent" : "", "title" : "First, Break All the Rules: What the World's Greatest Managers Do Differently", "type" : "book", "url" : "https://linkedin.okta.com/app/template_saml_2_0/k2bnhvkoMCFSHKCKIJUA/sso/saml? RelayState=https%3A%2F%2Ffanyv88.com%3A443%2Fhttps%2Flinkedin.skillport.com%2Fskillportfe%2Fcustom%2Flogin%2Flinkedin%2Flogin.action%3Fcourseaction%3DLaunch%26assetid%3D_ss_book%3A15501" } { "_id" : ObjectId("51c0b755d292ad5a7a00003c"), "academy" : "Leadership", "dateCreated" : ISODate("2013-06-18T19:39:01Z"), "date_es_indexed" : ISODate("2014-02-07T16:35:00.173Z"), "description" : "We'll discuss the FCS model for managing hyper-growth. Fewer things done better. Communicating the right information to the right person at the right time.", "image_url" : "/ media/images/comingsoon/thumbnails_coming-soon3.jpg", "longdescription" : "We'll discuss the FCS model for managing hyper-growth. Fewer things done better. Communicating the right information to the right person at the right time.", "state" : "draft", "tag_suggest" : { "input" : [ "Management & Leadership" ] }, "tags" : [ "Management & Leadership" ], "title" : "Managing Hyper- growth with Jeff Weiner", "type" : "slideshow" } { "_id" : ObjectId("51c0b755d292ad5a7a00003d"), "academy" : "Leadership", "adder" : "", "applyContent" : "", "author" : "", "clicks" : 24, "dateCreated" : ISODate("2013-06-18T19:39:01Z"), "date_es_indexed" : ISODate("2014-02-07T16:35:00.173Z"), "description" : "David shares learnings from the leaders that have inspired him and examples from his own career. ", "enableEnrichedAsset" : false, "image_url" : "/media/images/learningassets/leadership/43.jpg", "longdescription" : "David shares learnings from the leaders that have inspired him and examples from his own career. ", "practiceContent" : "", "recommendations" : [ ObjectId("521e6fd66f13a29715000044") ], "state" : "live", "tag_suggest" : { "input" : [ "Editor", "Leadership & Management", "Videos", "Leadership 101", "Leaders Teaching Leaders", "LTL", "Management & Leadership" ] }, "tags" : [ "Editor", "Leadership & Management", "Videos", "Leadership 101", "Leaders Teaching Leaders", "LTL", "Management & Leadership" ], "thinkContent" : "", "title" : "Leadership 101 with David Henke", "type" : "video", "url" : "http://innertube.linkedin.biz/video/Leadership101_2013_0118/index.html" } { "_id" : ObjectId("51c0b755d292ad5a7a00003e"), "academy" : "Professional", "author" : "EMEA", "dateCreated" : ISODate("2013-06-18T19:39:01Z"), "date_es_indexed" : ISODate("2014-02-07T16:35:00.173Z"), "description" : "Learn how to apply tips and tools for using your time more efficiently, meeting deadlines and increasing productivity, including learning how to use MS Outlook more effectively.nn", "image_url" : "/media/images/learningassets/professional/36_time_management.jpg", "longdescription" : "long description", "options" : [ "hidden" ], "state" : "draft", "tag_suggest" : { "input" : [ "Professional Development", "Learning Programs & Classes" ] }, "tags" : [ "Professional Development", "Learning Programs & Classes" ], "title" : "Time Management ", "type" : "article", "url" : "https://linkedin.okta.com/app/template_saml_2_0/k166h5vsMZMIUWGSDZSJ/sso/saml?RelayState=%2fdeeplink %2fssodeeplink.aspx%3fmodule%3dtranscript%26loid%3d919c0d74-4d51-43bd-87c9-546896287d49" } { "_id" : ObjectId("51c0b755d292ad5a7a000039"), "academy" : "Leadership", "dateCreated" : ISODate("2013-06-18T19:39:01Z"), "date_es_indexed" : ISODate("2014-02-07T16:35:00.173Z"), "description" : "We'll discuss what is required to work in a global context at LinkedIn and how managers can become effective global leaders? ", "image_url" : "/media/images/comingsoon/ thumbnails_coming-soon3.jpg", "longdescription" : "What is required to work in a global context at LinkedIn? What are the personal capabilities that enable a global manager to succeed? How do managers begin to develop a global perspective that will enable them to become effective global leaders? Please come prepared to discuss the following questions:nn(a) In your job, what will you be doing differently to reflect the global nature of our business?n(b) What are some things we do as a company that still take a US-centric approach, and what would you recommend How do we search? 36
  • 37. > db.collection.find({ title: new RegExp(‘<search query>’, ‘i’) }); 37
  • 40. 40 > db.collection.find({ $text: { $search: <string> } });
  • 41. • Easy searching by creating MongoDB index • Relevancy scoring • Stemming and multi-language support What text search gives us: 41
  • 42. • Single tokenizer/analyzer • Simple relevancy scoring, but not using Lucene • No completion suggestion • No fuzzy matching • No related item search Some limitations… 42
  • 43. What we needed: • Lucene index relevancy scoring and performance • Custom field analyzers for tokenization and stemming • ‘Related to’ or ‘More like this’ querying • Quick completion suggestions • Complicated wildcard searching • Easy Node.js integration 43
  • 44. 44
  • 45. 45 ?
  • 47. How does it work? 47
  • 49. Configuring the River $ curl -XPUT “localhost:9200/_river/<RIVER_NAME>/_meta” -d ‘ {
 "type": "mongodb",
 "mongodb": {
 "servers": [
 {
 "host": "< HOST >",
 "port": "< PORT >"
 }
 ],
 "db": "learnin",
 "options": {
 "import_all_collections": "true"
 }
 },
 "index": {
 "name": "prodindexnew"
 }
 }’ 49
  • 53. 53
  • 55. 55
  • 58. Appendix • MongoDB NoSQL Database • Mongoose ODM • Node.js server • Express.js WebApp Framework • MongoDB Full-Text Search • Elasticsearch • Elasticsearch-River-MongoDB • Elasticsearch Rivers • These Slides 58
  • 59. ©2014 LinkedIn Corporation. All Rights Reserved. 59