SlideShare a Scribd company logo
Building a System of Engagement
with MongoDB
{ Name: ‘Bryan Reinero’,
Title: ‘Developer Advocate’,
Twitter: ‘@blimpyacht’,
Email: ‘bryan@mongdb.com’ }
2
Systems of Engagement
• Real-Time
• Context-Aware
• Encourage
Interaction
• Embedded in
Business Systems
3
Systems of Engagement
• Context rich and User
Relevant Interactions
• Integrates data from many
systems
• Integrates Analytics
4
The Importance of Engagement
• 74% Consumer would respond positively to companies that
understand them
• 57% Would recommend the company
• 29% Would make additional purchases
2013 Experian study
5
• 84% Would walk away from a non-responsive company
• 45% from a company that contacted them when they had asked
not to
• 52% Would leave a company that tries to sell them something
they already said they weren't interested in
The Importance of Engagement
2013 Experian study
6
• 84% Would walk away from a non-responsive company
• 45% from a company that contacted them when they had asked
not to
• 52% Would leave a company that tries to sell them something
they already said they weren't interested in
The Importance of Engagement
How is the application of value to the user?
7
8
Department of Veterans Affairs
20+ million Veterans in the US today
Doctors need a single view of a patient’s health record.
What happens when a patient has to change their address?
9
Customer Single View
• Understand customer
relationships
• Improves customer experience
• Develops effective customer
marketing
• Improves product
Requirements
• High performance requirements
• Increasingly large datasets
• High Availability
11
Architecture
Systems of Engagement
DataServices
Systems of Record
Master Data
Raw Data
Integrated Data
…
ETL
record
record
record
12
Aggregating a Single View
Single customer
VIEW
13
Aggregating a Single View
Common Data
Source Metadata
Source Data A
Source Data B
14
Aggregating a Single View
Common Data
Source Metadata
Source Data A
Source Data B
{
_id: <hash>,
address: {
num: 860,
street: “Grove”,
city: “San Francisco”,
state: “CA”,
zip:
}
}
15
Aggregating a Single View
Common Data
Source Metadata
Source Data A
Source Data B
{
sources: [
{
source: “URI”,
updated: ISODate(),
},
…
]
}
16
Aggregating a Single View
Common Data
Source Metadata
Source Data A
Source Data B
Shopping Cart,
Purchase history,
Prescriptions,
Medical History,
17
Multiple Data Sources
• Wearable Devices
• Embedded Systems
• Internet of Things
The Point of Engagement
19
The Scavenger Hunt App
Users create
scavenger hunts by
“pinning” waypoints
20
The Checkpoint Document
{
_id: ObjectId(),
user: UUID,
huntId: UUID,
timestamp: ISODate(),
geometry: {
type: "Point",
coordinates: [125.6, 10.1]
}
}
21
The Checkpoint Document
{
_id: ObjectId(),
user: UUID,
huntId: UUID,
timestamp: ISODate(),
geometry: {
type: "Point",
coordinates: [125.6, 10.1]
}
}
db.checkpoints.ensureIndex(
timestamp: -1,
geometry: “2dsphere”
);
22
The Checkpoint Document
db.checkpoints.find(
{
date: {$gt: <10mins ago> }
geometry: {
$near:{
{ type : "Point" ,
coordinates :
[ -173, 40.7 ]
},
$maxDistance : 100 }
}});
{
_id: ObjectId(),
user: UUID,
huntId: UUID,
timestamp: ISODate(),
geometry: {
type: "Point",
coordinates: [125.6, 10.1]
}
}
23
The Scavenger Hunt App
Business Requirements
• Location Based
Targeting
• Enable Social
Interactions
• Recommendations
24
Waypoint
{ _id: ObjectId(),
name: "Doug’s Coffee",
desc: "The best brew",
offers: [
”Morning rush hour discount",
”Order ahead with our app",
”Start your digital frequent flyer
card"
],
"geometry": {
"type": "Point",
"coordinates": [125.6, 10.1] }
};
25
Waypoint
{ _id: ObjectId(),
name: "Doug’s Coffee",
desc: "The best brew",
offers: [
”Morning rush hour discount",
”Order ahead with our app",
”Start your digital frequent flyer
card"
],
"geometry": {
"type": "Point",
"coordinates": [125.6, 10.1] }
};
26
Waypoint
{ _id: ObjectId(),
name: "Doug’s Coffee",
desc: "The best brew",
offers: [
”Morning rush hour discount",
”Order ahead with our app",
”Start your digital frequent flyer
card"
],
"geometry": {
"type": "Point",
"coordinates": [125.6, 10.1] }
};
Geospacial Index:
ensureIndex(
{ geometry: “2dsphere” }
)
27
The Checkpoint Document
{
_id: ObjectId(),
user: UUID,
huntId: UUID,
timestamp: ISODate(),
geometry: {
type: "Point",
coordinates: [125.6, 10.1]
}
}
28
The Checkpoint Document
{
_id: ObjectId(),
user: UUID,
huntId: UUID,
timestamp: ISODate(),
geometry: {
type: "Point",
coordinates: [125.6, 10.1]
}
}
db.checkpoints.ensureIndex(
timestamp: -1,
geometry: “2dsphere”
);
29
The Checkpoint Document
db.checkpoints.find(
{
date: {$gt: <10mins ago> }
geometry: {
$near:{
{ type : "Point" ,
coordinates :
[ -173, 40.7 ]
},
$maxDistance : 100 }
}});
{
_id: ObjectId(),
user: UUID,
huntId: UUID,
timestamp: ISODate(),
geometry: {
type: "Point",
coordinates: [125.6, 10.1]
}
}
30
Geo Targeting
31
Geo Targeting
{
"type": "Polygon",
"coordinates" : [
[
[ -73.969581, 40.760331 ],
[ -73.974487, 40.762245 ],
[ -73.977692, 40.763598],
[ -73.979508, 40.761269 ],
[ -73.982364, 40.762358 ],
[ -73.983692, 40.760497 ],
[ -73.972821, 40.755861 ],
[ -73.969581, 40.760331 ]
]
]
} Defines a business service area
32
$geoIntersects
{
$geoIntersects: {
$geometry: {
"type": "Point",
"coordinates": [
-73.975010,
40.760071
]
}
}
}
33
Defining Service Areas
Data Driven Decisions
• Find users within a given area
• Intersections with multiple service areas
• Fraud detection
• Where are my competitors located
Social Interactions
35
Social Interactions
Requirements
• Allow users to follow one
another
• Allow users to exchange
messages
• Send users notifications
36
Social Interactions
Eratosthenes
Democritus
Hypatia
Shemp
Euripides
Graph models
Personal Relationships
Recommendation Engines
37
Social Interactions
Followers Collection
{ follower: ‘Shemp’, followed: ‘Euripides’},
{ follower:‘Shemp’, followed: ’Eratosthenes”},
{ follower: “Eratosthenes’, followed: ‘Shemp’ },
…
Eratosthenes
Democritus
Hypatia
Shemp
Euripides
38
Social Interactions
Eratosthenes
Democritus
Hypatia
Shemp
Euripides
Followers Collection
{ follower: ‘Shemp’, followed: ‘Euripides’},
{ follower:‘Shemp’, followed: ’Eratosthenes”},
{ follower: “Eratosthenes’, followed: ‘Shemp’ },
…
! (Euripides -> Shemp )
39
Social Interactions
db.followers.find( { follower:‘Shemp’ } );
Followers Collection
{ follower: ‘Shemp’, followed: ‘Euripides’},
{ follower:‘Shemp’, followed: ’Eratosthenes”},
{ follower: “Eratosthenes’, followed: ‘Shemp’ },
…
Notifications
41
Personal Timeline / Hotlist
{
_id: UUID,
user: ”Democritus",
hotList" : [
{
message: "New scavenger hunt tomorrow!",
url: "http://bit.ly/1hKn9ff",
date" : ISODate()
},
{
message: "Get 50% off at Toga City",
url: "http://bit.ly/1KnlFHQ",
date: ISODate()
}
],
atime: ISODate("20150313T04:38:43.606Z")
}
42
Personal Timeline / Hotlist
Notifications of highest
user relevance
{
_id: UUID,
user: ”Democritus",
hotList" : [
{
message: "New scavenger hunt tomorrow!",
url: "http://bit.ly/1hKn9ff",
date" : ISODate()
},
{
message: "Get 50% off at Toga City",
url: "http://bit.ly/1KnlFHQ",
date: ISODate()
}
],
atime: ISODate("20150313T04:38:43.606Z")
}
43
Write to Bucket
Parameters
• User
db.user.update(
{"user" : "Democritus"},
{$push: {
hotList: {
$each:
[
{ o: 10, <MESSAGE> },
{ o: 7, <MESSAGE> },
…
],
$sort: { o: -1 },
$slice: 50 }
}}
);
44
Write to Bucket
Parameters
• user
• $push append to end of hotList array
db.user.update(
{"user" : "Democritus"},
{$push: {
hotList: {
$each:
[
{ o: 10, <MESSAGE> },
{ o: 7, <MESSAGE> },
…
],
$sort: { o: -1 },
$slice: 50 }
}}
);
45
Write to Bucket
Parameters
• user
• $push append to end of hotList array
• $each list of message elements
db.user.update(
{"user" : "Democritus"},
{$push: {
hotList: {
$each:
[
{ o: 10, <MESSAGE> },
{ o: 7, <MESSAGE> },
…
],
$sort: { o: -1 },
$slice: 50 }
}}
);
46
Write to Bucket
Parameters
• user
• $push append to end of hotList array
• $each message in array
• $sort the resulting array in descending order
db.user.update(
{"user" : "Democritus"},
{$push: {
hotList: {
$each:
[
{ o: 10, <MESSAGE> },
{ o: 7, <MESSAGE> },
…
],
$sort: { o: -1 },
$slice: 50 }
}}
);
47
Write to Bucket
Parameters
• user
• $push append to end of hotList array
• $each message in array
• $sort the resulting array in descending order
• $slice include only the first 50 elements
db.user.update(
{"user" : "Democritus"},
{$push: {
hotList: {
$each:
[
{ o: 10, <MESSAGE> },
{ o: 7, <MESSAGE> },
…
],
$sort: { o: -1 },
$slice: 50 }
}}
);
Analytics
49
Analytics
• Behavioral analytics
• Segmentation
• Fraud detection
• Prediction
• Pricing analytics
• Sales analytics
50
Analytics
Systems of Engagement
DataServices
Data Processing
Integration, Analytics, etc.
Systems of Record
Master Data
Raw Data
Integrated Data
…
ETL
record
record
record
51
MongoDB as an Operational Store
Application Server
Other DBMS
& Legacy systems
Data Capture
53
Capture Data Changes
Systems of Engagement
DataServices
Data Processing
Integration, Analytics, etc.
Systems of Record
Master Data
Raw Data
Integrated Data
…
ETL
Bus
Apache Kafka
record
record
record
54
Many Complexities to Tackle
• Data modeling
• Data Extraction (ETL)
• Change Data Capture (CDC)
• Data Governance
• Data Lineage
• Security
55
How is the application of
value to the user?
Thanks!
{ Name: ‘Bryan Reinero’,
Title: ‘Developer Advocate’,
Twitter: ‘@blimpyacht’,
Email: ‘bryan@mongdb.com’ }

More Related Content

What's hot

Mongo db문서의생성,갱신,삭제
Mongo db문서의생성,갱신,삭제Mongo db문서의생성,갱신,삭제
Mongo db문서의생성,갱신,삭제
홍준 김
 
How Signpost uses MongoDB for Tracking and Analytics
How Signpost uses MongoDB for Tracking and AnalyticsHow Signpost uses MongoDB for Tracking and Analytics
How Signpost uses MongoDB for Tracking and Analytics
mattinsler
 
Di web tech mail (no subject)
Di web tech mail   (no subject)Di web tech mail   (no subject)
Di web tech mail (no subject)
shubhamvcs
 
First app online conf
First app   online confFirst app   online conf
First app online conf
MongoDB
 
Hi5 Opensocial Code Lab Presentation
Hi5 Opensocial Code Lab PresentationHi5 Opensocial Code Lab Presentation
Hi5 Opensocial Code Lab Presentation
plindner
 
Desenvolvimento web com Ruby on Rails (parte 5)
Desenvolvimento web com Ruby on Rails (parte 5)Desenvolvimento web com Ruby on Rails (parte 5)
Desenvolvimento web com Ruby on Rails (parte 5)
Joao Lucas Santana
 

What's hot (19)

Letgo Data Platform: A global overview
Letgo Data Platform: A global overviewLetgo Data Platform: A global overview
Letgo Data Platform: A global overview
 
Mongo db문서의생성,갱신,삭제
Mongo db문서의생성,갱신,삭제Mongo db문서의생성,갱신,삭제
Mongo db문서의생성,갱신,삭제
 
MongoD Essentials
MongoD EssentialsMongoD Essentials
MongoD Essentials
 
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
 
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...
 
Basic crud operation
Basic crud operationBasic crud operation
Basic crud operation
 
Talk MongoDB - Amil
Talk MongoDB - AmilTalk MongoDB - Amil
Talk MongoDB - Amil
 
How Signpost uses MongoDB for Tracking and Analytics
How Signpost uses MongoDB for Tracking and AnalyticsHow Signpost uses MongoDB for Tracking and Analytics
How Signpost uses MongoDB for Tracking and Analytics
 
Di web tech mail (no subject)
Di web tech mail   (no subject)Di web tech mail   (no subject)
Di web tech mail (no subject)
 
First app online conf
First app   online confFirst app   online conf
First app online conf
 
Hi5 Opensocial Code Lab Presentation
Hi5 Opensocial Code Lab PresentationHi5 Opensocial Code Lab Presentation
Hi5 Opensocial Code Lab Presentation
 
Every Click Counts (But All the Money Goes to Me)
Every Click Counts (But All the Money Goes to Me)Every Click Counts (But All the Money Goes to Me)
Every Click Counts (But All the Money Goes to Me)
 
How to Avoid Common Data Visualization Pitfalls and Being Led Astray By Your ...
How to Avoid Common Data Visualization Pitfalls and Being Led Astray By Your ...How to Avoid Common Data Visualization Pitfalls and Being Led Astray By Your ...
How to Avoid Common Data Visualization Pitfalls and Being Led Astray By Your ...
 
Modeling for Performance
Modeling for PerformanceModeling for Performance
Modeling for Performance
 
Data Modeling for Performance
Data Modeling for PerformanceData Modeling for Performance
Data Modeling for Performance
 
Desenvolvimento web com Ruby on Rails (parte 5)
Desenvolvimento web com Ruby on Rails (parte 5)Desenvolvimento web com Ruby on Rails (parte 5)
Desenvolvimento web com Ruby on Rails (parte 5)
 
Building a Cross Channel Content Delivery Platform with MongoDB
Building a Cross Channel Content Delivery Platform with MongoDBBuilding a Cross Channel Content Delivery Platform with MongoDB
Building a Cross Channel Content Delivery Platform with MongoDB
 
Advanced Document Modeling Techniques from a High-Scale Commerce Platform
Advanced Document Modeling Techniques from a High-Scale Commerce PlatformAdvanced Document Modeling Techniques from a High-Scale Commerce Platform
Advanced Document Modeling Techniques from a High-Scale Commerce Platform
 
MongoDB World 2018: Time for a Change Stream - Using MongoDB Change Streams t...
MongoDB World 2018: Time for a Change Stream - Using MongoDB Change Streams t...MongoDB World 2018: Time for a Change Stream - Using MongoDB Change Streams t...
MongoDB World 2018: Time for a Change Stream - Using MongoDB Change Streams t...
 

Viewers also liked

Maintainable code
Maintainable codeMaintainable code
Maintainable code
RiverGlide
 
HILTON CRM CASE STUDY
HILTON CRM CASE STUDYHILTON CRM CASE STUDY
HILTON CRM CASE STUDY
Yingyuan Deng
 

Viewers also liked (6)

Marketing, Technology, and the Empowered Customer
Marketing, Technology, and the Empowered CustomerMarketing, Technology, and the Empowered Customer
Marketing, Technology, and the Empowered Customer
 
Maintainable code
Maintainable codeMaintainable code
Maintainable code
 
Business Drivers of SDN by Paul Wiefels, Chasm Group
Business Drivers of SDN by Paul Wiefels, Chasm GroupBusiness Drivers of SDN by Paul Wiefels, Chasm Group
Business Drivers of SDN by Paul Wiefels, Chasm Group
 
Salesforce External Objects for Big Data
Salesforce External Objects for Big DataSalesforce External Objects for Big Data
Salesforce External Objects for Big Data
 
HILTON CRM CASE STUDY
HILTON CRM CASE STUDYHILTON CRM CASE STUDY
HILTON CRM CASE STUDY
 
Ten Disruptions in HR Technology for 2015: Ignore At Your Peril
Ten Disruptions in HR Technology for 2015:  Ignore At Your PerilTen Disruptions in HR Technology for 2015:  Ignore At Your Peril
Ten Disruptions in HR Technology for 2015: Ignore At Your Peril
 

Similar to Powering Systems of Engagement

User Data Management with MongoDB
User Data Management with MongoDB User Data Management with MongoDB
User Data Management with MongoDB
MongoDB
 
Evolving your Data Access with MongoDB Stitch
Evolving your Data Access with MongoDB StitchEvolving your Data Access with MongoDB Stitch
Evolving your Data Access with MongoDB Stitch
MongoDB
 
Creating a Single View Part 1: Overview and Data Analysis
Creating a Single View Part 1: Overview and Data AnalysisCreating a Single View Part 1: Overview and Data Analysis
Creating a Single View Part 1: Overview and Data Analysis
MongoDB
 

Similar to Powering Systems of Engagement (20)

Systems of engagement
Systems of engagementSystems of engagement
Systems of engagement
 
How to leverage what's new in MongoDB 3.6
How to leverage what's new in MongoDB 3.6How to leverage what's new in MongoDB 3.6
How to leverage what's new in MongoDB 3.6
 
User Data Management with MongoDB
User Data Management with MongoDB User Data Management with MongoDB
User Data Management with MongoDB
 
Evolving your Data Access with MongoDB Stitch
Evolving your Data Access with MongoDB StitchEvolving your Data Access with MongoDB Stitch
Evolving your Data Access with MongoDB Stitch
 
Creating a Single View Part 1: Overview and Data Analysis
Creating a Single View Part 1: Overview and Data AnalysisCreating a Single View Part 1: Overview and Data Analysis
Creating a Single View Part 1: Overview and Data Analysis
 
MongoDB Evenings Dallas: What's the Scoop on MongoDB & Hadoop
MongoDB Evenings Dallas: What's the Scoop on MongoDB & HadoopMongoDB Evenings Dallas: What's the Scoop on MongoDB & Hadoop
MongoDB Evenings Dallas: What's the Scoop on MongoDB & Hadoop
 
Big Data Analytics 1: Driving Personalized Experiences Using Customer Profiles
Big Data Analytics 1: Driving Personalized Experiences Using Customer ProfilesBig Data Analytics 1: Driving Personalized Experiences Using Customer Profiles
Big Data Analytics 1: Driving Personalized Experiences Using Customer Profiles
 
Mongo db 101 dc group
Mongo db 101 dc groupMongo db 101 dc group
Mongo db 101 dc group
 
Java/Scala Lab: Борис Трофимов - Обжигающая Big Data.
Java/Scala Lab: Борис Трофимов - Обжигающая Big Data.Java/Scala Lab: Борис Трофимов - Обжигающая Big Data.
Java/Scala Lab: Борис Трофимов - Обжигающая Big Data.
 
Practical MongoDB
Practical MongoDBPractical MongoDB
Practical MongoDB
 
Retail Reference Architecture Part 2: Real-Time, Geo Distributed Inventory
Retail Reference Architecture Part 2: Real-Time, Geo Distributed InventoryRetail Reference Architecture Part 2: Real-Time, Geo Distributed Inventory
Retail Reference Architecture Part 2: Real-Time, Geo Distributed Inventory
 
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
 
MongoDB Evenings Houston: What's the Scoop on MongoDB and Hadoop? by Jake Ang...
MongoDB Evenings Houston: What's the Scoop on MongoDB and Hadoop? by Jake Ang...MongoDB Evenings Houston: What's the Scoop on MongoDB and Hadoop? by Jake Ang...
MongoDB Evenings Houston: What's the Scoop on MongoDB and Hadoop? by Jake Ang...
 
MongoDB .local Chicago 2019: Best Practices for Working with IoT and Time-ser...
MongoDB .local Chicago 2019: Best Practices for Working with IoT and Time-ser...MongoDB .local Chicago 2019: Best Practices for Working with IoT and Time-ser...
MongoDB .local Chicago 2019: Best Practices for Working with IoT and Time-ser...
 
MongoDB World 2019: Building an Efficient and Performant Data Model: Real Wor...
MongoDB World 2019: Building an Efficient and Performant Data Model: Real Wor...MongoDB World 2019: Building an Efficient and Performant Data Model: Real Wor...
MongoDB World 2019: Building an Efficient and Performant Data Model: Real Wor...
 
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 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
 
Using MongoDB As a Tick Database
Using MongoDB As a Tick DatabaseUsing MongoDB As a Tick Database
Using MongoDB As a Tick Database
 
Analytics with MongoDB Aggregation Framework and Hadoop Connector
Analytics with MongoDB Aggregation Framework and Hadoop ConnectorAnalytics with MongoDB Aggregation Framework and Hadoop Connector
Analytics with MongoDB Aggregation Framework and Hadoop Connector
 
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
 

More from MongoDB

More from 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: 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...
 
MongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDB
MongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDBMongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDB
MongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDB
 

Recently uploaded

Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Peter Udo Diehl
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Bhaskar Mitra
 

Recently uploaded (20)

Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
НАДІЯ ФЕДЮШКО БАЦ «Професійне зростання QA спеціаліста»
НАДІЯ ФЕДЮШКО БАЦ  «Професійне зростання QA спеціаліста»НАДІЯ ФЕДЮШКО БАЦ  «Професійне зростання QA спеціаліста»
НАДІЯ ФЕДЮШКО БАЦ «Професійне зростання QA спеціаліста»
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 

Powering Systems of Engagement

  • 1. Building a System of Engagement with MongoDB { Name: ‘Bryan Reinero’, Title: ‘Developer Advocate’, Twitter: ‘@blimpyacht’, Email: ‘bryan@mongdb.com’ }
  • 2. 2 Systems of Engagement • Real-Time • Context-Aware • Encourage Interaction • Embedded in Business Systems
  • 3. 3 Systems of Engagement • Context rich and User Relevant Interactions • Integrates data from many systems • Integrates Analytics
  • 4. 4 The Importance of Engagement • 74% Consumer would respond positively to companies that understand them • 57% Would recommend the company • 29% Would make additional purchases 2013 Experian study
  • 5. 5 • 84% Would walk away from a non-responsive company • 45% from a company that contacted them when they had asked not to • 52% Would leave a company that tries to sell them something they already said they weren't interested in The Importance of Engagement 2013 Experian study
  • 6. 6 • 84% Would walk away from a non-responsive company • 45% from a company that contacted them when they had asked not to • 52% Would leave a company that tries to sell them something they already said they weren't interested in The Importance of Engagement How is the application of value to the user?
  • 7. 7
  • 8. 8 Department of Veterans Affairs 20+ million Veterans in the US today Doctors need a single view of a patient’s health record. What happens when a patient has to change their address?
  • 9. 9 Customer Single View • Understand customer relationships • Improves customer experience • Develops effective customer marketing • Improves product
  • 10. Requirements • High performance requirements • Increasingly large datasets • High Availability
  • 11. 11 Architecture Systems of Engagement DataServices Systems of Record Master Data Raw Data Integrated Data … ETL record record record
  • 12. 12 Aggregating a Single View Single customer VIEW
  • 13. 13 Aggregating a Single View Common Data Source Metadata Source Data A Source Data B
  • 14. 14 Aggregating a Single View Common Data Source Metadata Source Data A Source Data B { _id: <hash>, address: { num: 860, street: “Grove”, city: “San Francisco”, state: “CA”, zip: } }
  • 15. 15 Aggregating a Single View Common Data Source Metadata Source Data A Source Data B { sources: [ { source: “URI”, updated: ISODate(), }, … ] }
  • 16. 16 Aggregating a Single View Common Data Source Metadata Source Data A Source Data B Shopping Cart, Purchase history, Prescriptions, Medical History,
  • 17. 17 Multiple Data Sources • Wearable Devices • Embedded Systems • Internet of Things
  • 18. The Point of Engagement
  • 19. 19 The Scavenger Hunt App Users create scavenger hunts by “pinning” waypoints
  • 20. 20 The Checkpoint Document { _id: ObjectId(), user: UUID, huntId: UUID, timestamp: ISODate(), geometry: { type: "Point", coordinates: [125.6, 10.1] } }
  • 21. 21 The Checkpoint Document { _id: ObjectId(), user: UUID, huntId: UUID, timestamp: ISODate(), geometry: { type: "Point", coordinates: [125.6, 10.1] } } db.checkpoints.ensureIndex( timestamp: -1, geometry: “2dsphere” );
  • 22. 22 The Checkpoint Document db.checkpoints.find( { date: {$gt: <10mins ago> } geometry: { $near:{ { type : "Point" , coordinates : [ -173, 40.7 ] }, $maxDistance : 100 } }}); { _id: ObjectId(), user: UUID, huntId: UUID, timestamp: ISODate(), geometry: { type: "Point", coordinates: [125.6, 10.1] } }
  • 23. 23 The Scavenger Hunt App Business Requirements • Location Based Targeting • Enable Social Interactions • Recommendations
  • 24. 24 Waypoint { _id: ObjectId(), name: "Doug’s Coffee", desc: "The best brew", offers: [ ”Morning rush hour discount", ”Order ahead with our app", ”Start your digital frequent flyer card" ], "geometry": { "type": "Point", "coordinates": [125.6, 10.1] } };
  • 25. 25 Waypoint { _id: ObjectId(), name: "Doug’s Coffee", desc: "The best brew", offers: [ ”Morning rush hour discount", ”Order ahead with our app", ”Start your digital frequent flyer card" ], "geometry": { "type": "Point", "coordinates": [125.6, 10.1] } };
  • 26. 26 Waypoint { _id: ObjectId(), name: "Doug’s Coffee", desc: "The best brew", offers: [ ”Morning rush hour discount", ”Order ahead with our app", ”Start your digital frequent flyer card" ], "geometry": { "type": "Point", "coordinates": [125.6, 10.1] } }; Geospacial Index: ensureIndex( { geometry: “2dsphere” } )
  • 27. 27 The Checkpoint Document { _id: ObjectId(), user: UUID, huntId: UUID, timestamp: ISODate(), geometry: { type: "Point", coordinates: [125.6, 10.1] } }
  • 28. 28 The Checkpoint Document { _id: ObjectId(), user: UUID, huntId: UUID, timestamp: ISODate(), geometry: { type: "Point", coordinates: [125.6, 10.1] } } db.checkpoints.ensureIndex( timestamp: -1, geometry: “2dsphere” );
  • 29. 29 The Checkpoint Document db.checkpoints.find( { date: {$gt: <10mins ago> } geometry: { $near:{ { type : "Point" , coordinates : [ -173, 40.7 ] }, $maxDistance : 100 } }}); { _id: ObjectId(), user: UUID, huntId: UUID, timestamp: ISODate(), geometry: { type: "Point", coordinates: [125.6, 10.1] } }
  • 31. 31 Geo Targeting { "type": "Polygon", "coordinates" : [ [ [ -73.969581, 40.760331 ], [ -73.974487, 40.762245 ], [ -73.977692, 40.763598], [ -73.979508, 40.761269 ], [ -73.982364, 40.762358 ], [ -73.983692, 40.760497 ], [ -73.972821, 40.755861 ], [ -73.969581, 40.760331 ] ] ] } Defines a business service area
  • 32. 32 $geoIntersects { $geoIntersects: { $geometry: { "type": "Point", "coordinates": [ -73.975010, 40.760071 ] } } }
  • 33. 33 Defining Service Areas Data Driven Decisions • Find users within a given area • Intersections with multiple service areas • Fraud detection • Where are my competitors located
  • 35. 35 Social Interactions Requirements • Allow users to follow one another • Allow users to exchange messages • Send users notifications
  • 37. 37 Social Interactions Followers Collection { follower: ‘Shemp’, followed: ‘Euripides’}, { follower:‘Shemp’, followed: ’Eratosthenes”}, { follower: “Eratosthenes’, followed: ‘Shemp’ }, … Eratosthenes Democritus Hypatia Shemp Euripides
  • 38. 38 Social Interactions Eratosthenes Democritus Hypatia Shemp Euripides Followers Collection { follower: ‘Shemp’, followed: ‘Euripides’}, { follower:‘Shemp’, followed: ’Eratosthenes”}, { follower: “Eratosthenes’, followed: ‘Shemp’ }, … ! (Euripides -> Shemp )
  • 39. 39 Social Interactions db.followers.find( { follower:‘Shemp’ } ); Followers Collection { follower: ‘Shemp’, followed: ‘Euripides’}, { follower:‘Shemp’, followed: ’Eratosthenes”}, { follower: “Eratosthenes’, followed: ‘Shemp’ }, …
  • 41. 41 Personal Timeline / Hotlist { _id: UUID, user: ”Democritus", hotList" : [ { message: "New scavenger hunt tomorrow!", url: "http://bit.ly/1hKn9ff", date" : ISODate() }, { message: "Get 50% off at Toga City", url: "http://bit.ly/1KnlFHQ", date: ISODate() } ], atime: ISODate("20150313T04:38:43.606Z") }
  • 42. 42 Personal Timeline / Hotlist Notifications of highest user relevance { _id: UUID, user: ”Democritus", hotList" : [ { message: "New scavenger hunt tomorrow!", url: "http://bit.ly/1hKn9ff", date" : ISODate() }, { message: "Get 50% off at Toga City", url: "http://bit.ly/1KnlFHQ", date: ISODate() } ], atime: ISODate("20150313T04:38:43.606Z") }
  • 43. 43 Write to Bucket Parameters • User db.user.update( {"user" : "Democritus"}, {$push: { hotList: { $each: [ { o: 10, <MESSAGE> }, { o: 7, <MESSAGE> }, … ], $sort: { o: -1 }, $slice: 50 } }} );
  • 44. 44 Write to Bucket Parameters • user • $push append to end of hotList array db.user.update( {"user" : "Democritus"}, {$push: { hotList: { $each: [ { o: 10, <MESSAGE> }, { o: 7, <MESSAGE> }, … ], $sort: { o: -1 }, $slice: 50 } }} );
  • 45. 45 Write to Bucket Parameters • user • $push append to end of hotList array • $each list of message elements db.user.update( {"user" : "Democritus"}, {$push: { hotList: { $each: [ { o: 10, <MESSAGE> }, { o: 7, <MESSAGE> }, … ], $sort: { o: -1 }, $slice: 50 } }} );
  • 46. 46 Write to Bucket Parameters • user • $push append to end of hotList array • $each message in array • $sort the resulting array in descending order db.user.update( {"user" : "Democritus"}, {$push: { hotList: { $each: [ { o: 10, <MESSAGE> }, { o: 7, <MESSAGE> }, … ], $sort: { o: -1 }, $slice: 50 } }} );
  • 47. 47 Write to Bucket Parameters • user • $push append to end of hotList array • $each message in array • $sort the resulting array in descending order • $slice include only the first 50 elements db.user.update( {"user" : "Democritus"}, {$push: { hotList: { $each: [ { o: 10, <MESSAGE> }, { o: 7, <MESSAGE> }, … ], $sort: { o: -1 }, $slice: 50 } }} );
  • 49. 49 Analytics • Behavioral analytics • Segmentation • Fraud detection • Prediction • Pricing analytics • Sales analytics
  • 50. 50 Analytics Systems of Engagement DataServices Data Processing Integration, Analytics, etc. Systems of Record Master Data Raw Data Integrated Data … ETL record record record
  • 51. 51 MongoDB as an Operational Store Application Server Other DBMS & Legacy systems
  • 53. 53 Capture Data Changes Systems of Engagement DataServices Data Processing Integration, Analytics, etc. Systems of Record Master Data Raw Data Integrated Data … ETL Bus Apache Kafka record record record
  • 54. 54 Many Complexities to Tackle • Data modeling • Data Extraction (ETL) • Change Data Capture (CDC) • Data Governance • Data Lineage • Security
  • 55. 55 How is the application of value to the user?
  • 56. Thanks! { Name: ‘Bryan Reinero’, Title: ‘Developer Advocate’, Twitter: ‘@blimpyacht’, Email: ‘bryan@mongdb.com’ }

Editor's Notes

  1. As apposed to
  2. Applications must be targeted, timely and engaging A product that is of no relevance will likely infuriate them
  3. 2013 Experian study http://www.experian.co.uk/blogs/insights/2013/09/impact-of-having-an-effective-single-customer-view-on-consumer-behaviour/
  4. 2013 Experian study http://www.experian.co.uk/blogs/insights/2013/09/impact-of-having-an-effective-single-customer-view-on-consumer-behaviour/
  5. Source http://www.experian.co.uk/assets/about-us/white-papers/single-customer-view-whitepaper.pdf
  6. So let's add a component that will propagate changes from the system of engagement back to the systems of record In addition to the previous components we put in place for the single view, we need some sort of message processing component to receive and publish data changes back to the source systems. For this example, we will use Apache Kafka as it is pretty commonly used these days. We'll show changing the integrated data in the system of engagement database and propagating that back to the systems of record
  7. So let's add a component that will propagate changes from the system of engagement back to the systems of record In addition to the previous components we put in place for the single view, we need some sort of message processing component to receive and publish data changes back to the source systems. For this example, we will use Apache Kafka as it is pretty commonly used these days. We'll show changing the integrated data in the system of engagement database and propagating that back to the systems of record
  8. So let's add a component that will propagate changes from the system of engagement back to the systems of record In addition to the previous components we put in place for the single view, we need some sort of message processing component to receive and publish data changes back to the source systems. For this example, we will use Apache Kafka as it is pretty commonly used these days. We'll show changing the integrated data in the system of engagement database and propagating that back to the systems of record
  9. So let's add a component that will propagate changes from the system of engagement back to the systems of record In addition to the previous components we put in place for the single view, we need some sort of message processing component to receive and publish data changes back to the source systems. For this example, we will use Apache Kafka as it is pretty commonly used these days. We'll show changing the integrated data in the system of engagement database and propagating that back to the systems of record
  10. So let's add a component that will propagate changes from the system of engagement back to the systems of record In addition to the previous components we put in place for the single view, we need some sort of message processing component to receive and publish data changes back to the source systems. For this example, we will use Apache Kafka as it is pretty commonly used these days. We'll show changing the integrated data in the system of engagement database and propagating that back to the systems of record
  11. So let's add a component that will propagate changes from the system of engagement back to the systems of record In addition to the previous components we put in place for the single view, we need some sort of message processing component to receive and publish data changes back to the source systems. For this example, we will use Apache Kafka as it is pretty commonly used these days. We'll show changing the integrated data in the system of engagement database and propagating that back to the systems of record
  12. Graph patterns are also great for recommendation engines