SlideShare uma empresa Scribd logo
1 de 59
Baixar para ler offline
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%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

Mais conteúdo relacionado

Mais procurados

PFE_Presentation
PFE_PresentationPFE_Presentation
PFE_Presentation
Brahim Sana
 
machine électrique Machines-spéciales-cours.pdf
machine électrique Machines-spéciales-cours.pdfmachine électrique Machines-spéciales-cours.pdf
machine électrique Machines-spéciales-cours.pdf
rahimbencheikh12
 
PFA : Développement d'une application mobile/desktop pour la configuration et...
PFA : Développement d'une application mobile/desktop pour la configuration et...PFA : Développement d'une application mobile/desktop pour la configuration et...
PFA : Développement d'une application mobile/desktop pour la configuration et...
Khadija LASSOUED
 
Application du modèle de prévision météorologique WRF au Vietnam
Application du modèle de prévision météorologique WRF au VietnamApplication du modèle de prévision météorologique WRF au Vietnam
Application du modèle de prévision météorologique WRF au Vietnam
Viet-Trung TRAN
 

Mais procurados (20)

Version finale
Version finaleVersion finale
Version finale
 
Attestation nidhal azizi stage pfe carthage solutions
Attestation nidhal azizi stage pfe carthage solutionsAttestation nidhal azizi stage pfe carthage solutions
Attestation nidhal azizi stage pfe carthage solutions
 
advizeo - Présentation
advizeo - Présentationadvizeo - Présentation
advizeo - Présentation
 
PFE_Presentation
PFE_PresentationPFE_Presentation
PFE_Presentation
 
Etude de la maintenance préventif
Etude de la maintenance préventifEtude de la maintenance préventif
Etude de la maintenance préventif
 
03 - La Fiabilité.pdf
03 - La Fiabilité.pdf03 - La Fiabilité.pdf
03 - La Fiabilité.pdf
 
An Introduction to Condition Based Maintenance (CBM)
An Introduction to  Condition Based Maintenance (CBM)An Introduction to  Condition Based Maintenance (CBM)
An Introduction to Condition Based Maintenance (CBM)
 
Diaporama AMDEC.pdf
Diaporama  AMDEC.pdfDiaporama  AMDEC.pdf
Diaporama AMDEC.pdf
 
Liste des livrables
Liste des livrablesListe des livrables
Liste des livrables
 
machine électrique Machines-spéciales-cours.pdf
machine électrique Machines-spéciales-cours.pdfmachine électrique Machines-spéciales-cours.pdf
machine électrique Machines-spéciales-cours.pdf
 
SCADA Labview PLC TIA portal v13
SCADA Labview PLC TIA portal v13SCADA Labview PLC TIA portal v13
SCADA Labview PLC TIA portal v13
 
présentation soutenance PFE 2016
présentation soutenance PFE 2016présentation soutenance PFE 2016
présentation soutenance PFE 2016
 
PFA : Développement d'une application mobile/desktop pour la configuration et...
PFA : Développement d'une application mobile/desktop pour la configuration et...PFA : Développement d'une application mobile/desktop pour la configuration et...
PFA : Développement d'une application mobile/desktop pour la configuration et...
 
Application du modèle de prévision météorologique WRF au Vietnam
Application du modèle de prévision météorologique WRF au VietnamApplication du modèle de prévision météorologique WRF au Vietnam
Application du modèle de prévision météorologique WRF au Vietnam
 
Cartes de controle.ppt
Cartes de controle.pptCartes de controle.ppt
Cartes de controle.ppt
 
Etude, dimensionnement, calcul des structures et conception d’une empileuse s...
Etude, dimensionnement, calcul des structures et conception d’une empileuse s...Etude, dimensionnement, calcul des structures et conception d’une empileuse s...
Etude, dimensionnement, calcul des structures et conception d’une empileuse s...
 
Why RCM Doesn't Work?
Why RCM Doesn't Work?Why RCM Doesn't Work?
Why RCM Doesn't Work?
 
Rapport projet fin d'études SALAH EDDINE GHANDRI
Rapport projet fin d'études SALAH EDDINE GHANDRI Rapport projet fin d'études SALAH EDDINE GHANDRI
Rapport projet fin d'études SALAH EDDINE GHANDRI
 
Rapport Stage Capgemini Otmane DOUIEB
Rapport Stage Capgemini Otmane DOUIEBRapport Stage Capgemini Otmane DOUIEB
Rapport Stage Capgemini Otmane DOUIEB
 
L'AMDEC - Manuel de mise en oeuvre
L'AMDEC - Manuel de mise en oeuvreL'AMDEC - Manuel de mise en oeuvre
L'AMDEC - Manuel de mise en oeuvre
 

Destaque

Building a Social Network with MongoDB
  Building a Social Network with MongoDB  Building a Social Network with MongoDB
Building a Social Network with MongoDB
Fred Chu
 
Social Data and Log Analysis Using MongoDB
Social Data and Log Analysis Using MongoDBSocial Data and Log Analysis Using MongoDB
Social Data and Log Analysis Using MongoDB
Takahiro Inoue
 
MongoDB at eBay
MongoDB at eBayMongoDB at eBay
MongoDB at eBay
MongoDB
 

Destaque (20)

MongoDB
MongoDBMongoDB
MongoDB
 
MongoDB Schema Design (Event: An Evening with MongoDB Houston 3/11/15)
MongoDB Schema Design (Event: An Evening with MongoDB Houston 3/11/15)MongoDB Schema Design (Event: An Evening with MongoDB Houston 3/11/15)
MongoDB Schema Design (Event: An Evening with MongoDB Houston 3/11/15)
 
Building a Social Network with MongoDB
  Building a Social Network with MongoDB  Building a Social Network with MongoDB
Building a Social Network with MongoDB
 
MongoDB Schema Design
MongoDB Schema DesignMongoDB Schema Design
MongoDB Schema Design
 
MongoATL: How Sourceforge is Using MongoDB
MongoATL: How Sourceforge is Using MongoDBMongoATL: How Sourceforge is Using MongoDB
MongoATL: How Sourceforge is Using MongoDB
 
ebay
ebayebay
ebay
 
Semantic Wiki: Social Semantic Web In Action:
Semantic Wiki: Social Semantic Web In Action: Semantic Wiki: Social Semantic Web In Action:
Semantic Wiki: Social Semantic Web In Action:
 
An Elastic Metadata Store for eBay’s Media Platform
An Elastic Metadata Store for eBay’s Media PlatformAn Elastic Metadata Store for eBay’s Media Platform
An Elastic Metadata Store for eBay’s Media Platform
 
Scaling with MongoDB
Scaling with MongoDBScaling with MongoDB
Scaling with MongoDB
 
Artigo Nosql
Artigo NosqlArtigo Nosql
Artigo Nosql
 
NOSQL uma breve introdução
NOSQL uma breve introduçãoNOSQL uma breve introdução
NOSQL uma breve introdução
 
MongoDB San Francisco 2013: Storing eBay's Media Metadata on MongoDB present...
MongoDB San Francisco 2013: Storing eBay's Media Metadata on MongoDB  present...MongoDB San Francisco 2013: Storing eBay's Media Metadata on MongoDB  present...
MongoDB San Francisco 2013: Storing eBay's Media Metadata on MongoDB present...
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodb
 
Social Data and Log Analysis Using MongoDB
Social Data and Log Analysis Using MongoDBSocial Data and Log Analysis Using MongoDB
Social Data and Log Analysis Using MongoDB
 
eBay Cloud CMS based on NOSQL
eBay Cloud CMS based on NOSQLeBay Cloud CMS based on NOSQL
eBay Cloud CMS based on NOSQL
 
Ebay: DB Capacity planning at eBay
Ebay: DB Capacity planning at eBayEbay: DB Capacity planning at eBay
Ebay: DB Capacity planning at eBay
 
NoSQL at Twitter (NoSQL EU 2010)
NoSQL at Twitter (NoSQL EU 2010)NoSQL at Twitter (NoSQL EU 2010)
NoSQL at Twitter (NoSQL EU 2010)
 
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
 
MongoDB at eBay
MongoDB at eBayMongoDB at eBay
MongoDB at eBay
 
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
 

Semelhante a Building LinkedIn's Learning Platform with MongoDB

Semelhante a Building LinkedIn's Learning Platform with MongoDB (20)

Building LinkedIn's Learning Platform with MongoDB
Building LinkedIn's Learning Platform with MongoDBBuilding LinkedIn's Learning Platform with MongoDB
Building LinkedIn's Learning Platform with MongoDB
 
Creating a Single View: Overview and Analysis
Creating a Single View: Overview and AnalysisCreating a Single View: Overview and Analysis
Creating a Single View: Overview and Analysis
 
Social Networking using ROR
Social Networking using RORSocial Networking using ROR
Social Networking using ROR
 
Digital Success Stack for DCBKK 2018
Digital Success Stack for DCBKK 2018Digital Success Stack for DCBKK 2018
Digital Success Stack for DCBKK 2018
 
Keynote - Speaker: Grigori Melnik
Keynote - Speaker: Grigori Melnik Keynote - Speaker: Grigori Melnik
Keynote - Speaker: Grigori Melnik
 
DAS Slides: Data Architect vs. Data Engineer vs. Data Modeler
DAS Slides: Data Architect vs. Data Engineer vs. Data ModelerDAS Slides: Data Architect vs. Data Engineer vs. Data Modeler
DAS Slides: Data Architect vs. Data Engineer vs. Data Modeler
 
moma-django overview --> Django + MongoDB: building a custom ORM layer
moma-django overview --> Django + MongoDB: building a custom ORM layermoma-django overview --> Django + MongoDB: building a custom ORM layer
moma-django overview --> Django + MongoDB: building a custom ORM layer
 
Yeoman AngularJS and D3 - A solid stack for web apps
Yeoman AngularJS and D3 - A solid stack for web appsYeoman AngularJS and D3 - A solid stack for web apps
Yeoman AngularJS and D3 - A solid stack for web apps
 
Noman Khan Internship Report 2.pptx
Noman Khan Internship Report 2.pptxNoman Khan Internship Report 2.pptx
Noman Khan Internship Report 2.pptx
 
SQL to NoSQL: Top 6 Questions
SQL to NoSQL: Top 6 QuestionsSQL to NoSQL: Top 6 Questions
SQL to NoSQL: Top 6 Questions
 
bmarshall teaching Calculation Manager on prem
bmarshall teaching Calculation Manager on prembmarshall teaching Calculation Manager on prem
bmarshall teaching Calculation Manager on prem
 
Mstr meetup
Mstr meetupMstr meetup
Mstr meetup
 
Using feature teams to deliver high business value
Using feature teams to deliver high business valueUsing feature teams to deliver high business value
Using feature teams to deliver high business value
 
MongoDB.local Seattle 2019: MongoDB Stitch Tutorial
MongoDB.local Seattle 2019: MongoDB Stitch TutorialMongoDB.local Seattle 2019: MongoDB Stitch Tutorial
MongoDB.local Seattle 2019: MongoDB Stitch Tutorial
 
MongoDB.local Dallas 2019: MongoDB Stitch Tutorial
MongoDB.local Dallas 2019: MongoDB Stitch TutorialMongoDB.local Dallas 2019: MongoDB Stitch Tutorial
MongoDB.local Dallas 2019: MongoDB Stitch Tutorial
 
Nicolas Embleton, Advanced Angular JS
Nicolas Embleton, Advanced Angular JSNicolas Embleton, Advanced Angular JS
Nicolas Embleton, Advanced Angular JS
 
BDD Selenium for Agile Teams - User Stories
BDD Selenium for Agile Teams - User StoriesBDD Selenium for Agile Teams - User Stories
BDD Selenium for Agile Teams - User Stories
 
Engineering the New LinkedIn Profile
Engineering the New LinkedIn ProfileEngineering the New LinkedIn Profile
Engineering the New LinkedIn Profile
 
Back to Basics, webinar 2: La tua prima applicazione MongoDB
Back to Basics, webinar 2: La tua prima applicazione MongoDBBack to Basics, webinar 2: La tua prima applicazione MongoDB
Back to Basics, webinar 2: La tua prima applicazione MongoDB
 
Dust.js
Dust.jsDust.js
Dust.js
 

Mais de MongoDB

Mais de MongoDB (20)

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

Último

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 

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%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