SlideShare a Scribd company logo
1 of 92
Download to read offline
Stop! Don't make these
mistakes in your
document database!
@Lauren_Schaefer
Learn about and
prevent schema design
anti-patterns.
Massive arrays
Massive number of
collections
Unnecessary indexes
Separating data that is
accessed together
4Schema Design
Anti-Patterns
Massive arrays
Massive number of
collections
Unnecessary indexes
Separating data that is
accessed together
4Schema Design
Anti-Patterns
Massive arrays
Massive number of
collections
Unnecessary indexes
Separating data that is
accessed together
4Schema Design
Anti-Patterns
Massive arrays
Massive number of
collections
Unnecessary indexes
Separating data that is
accessed together
4Schema Design
Anti-Patterns
Massive arrays
Massive number of
collections
Unnecessary indexes
Separating data that is
accessed together
4Schema Design
Anti-Patterns
Massive arrays
Massive number of
collections
Unnecessary indexes
Separating data that is
accessed together
4Schema Design
Anti-Patterns
@Lauren_Schaefer
Developer Advocate, MongoDB
@Lauren_Schaefer
Developer Advocate, MongoDB
Document
{
first_name: "Lauren",
last_name: "Schaefer",
tik_tok: "Lauren_Schaefer"
}
Collection
{
first_name: "Lauren",
last_name: "Schaefer",
tik_tok: "Lauren_Schaefer"
}
{
first_name: "Lauren",
last_name: "Schaefer",
tik_tok: "Lauren_Schaefer"
}
{
first_name: "Lauren",
last_name: "Schaefer",
tik_tok: "Lauren_Schaefer"
}
Users
Database {
…
}
{
…
}
{
…
}
{
…
}
{
…
}
{
…
}
{
…
}
{
…
}
{
…
}
Massive arrays
Massive number of
collections
Unnecessary indexes
Separating data that is
accessed together
4Schema Design
Anti-Patterns
Data that is accessed
together should be
stored together.
Massive Arrays
Massive Arrays
{
a: "b",
c: "d",
e: {
f: "g",
h: "i"
},
j: ["k", "l", "m"]
}
Massive Arrays
{
a: "b",
c: "d",
e: {
f: "g",
h: "i"
},
j: ["k", "l", "m"]
}
Massive Arrays
{
a: "b",
c: "d",
e: {
f: "g",
h: "i"
},
j: ["k", "l", "m"]
}
The
Problem
● May exceed document size limits
● Index performance on arrays
decreases as array size increases
Massive Arrays
Buildings
{
"_id": "city_hall",
"name": "City Hall",
"city": "Pawnee",
"state": "IN",
"employees": [
{
"_id": 123456789,
"first": "Leslie",
"last": "Yepp",
"cell": "8125552344",
"start-year": "2004"
},
{
"_id": 234567890,
"first": "Ron",
"last": "Swandaughter",
"cell": "8125559347",
"start-year": "2002"
}
]
}
Massive Arrays
Buildings
{
"_id": "city_hall",
"name": "City Hall",
"city": "Pawnee",
"state": "IN",
"employees": [
{
"_id": 123456789,
"first": "Leslie",
"last": "Yepp",
"cell": "8125552344",
"start-year": "2004"
},
{
"_id": 234567890,
"first": "Ron",
"last": "Swandaughter",
"cell": "8125559347",
"start-year": "2002"
},
{
"_id": 345678901,
"first": "Andy",
"last": "Fryer",
"cell": "8125552341",
"start-year": "2002"
},
Massive Arrays
Employees
{
"_id": 123456789,
"first": "Leslie",
"last": "Yepp",
"cell": "8125552344",
"start-year": "2004",
"building": {
"_id": "city_hall",
"name": "City Hall",
"city": "Pawnee",
"state": "IN"
}
}
{
"_id": 234567890,
"first": "Ron",
"last": "Swandaughter",
"cell": "8125559347",
"start-year": "2002",
"building": {
"_id": "city_hall",
"name": "City Hall",
"city": "Pawnee",
"state": "IN"
}
}
Massive Arrays
Buildings
{
"_id": "city_hall",
"name": "City Hall",
"city": "Pawnee",
"state": "IN"
}
Employees
{
"_id": 123456789,
"first": "Leslie",
"last": "Yepp",
"cell": "8125552344",
"start-year": "2004",
"building_id": "city_hall"
}
{
"_id": 234567890,
"first": "Ron",
"last": "Swandaughter",
"cell": "8125559347",
"start-year": "2002",
"building_id": "city_hall"
}
Massive Arrays
The extended reference
pattern
Massive Arrays
Massive Arrays
Buildings
{
"_id": "city_hall",
"name": "City Hall",
"city": "Pawnee",
"state": "IN"
}
Employees
{
"_id": 123456789,
"first": "Leslie",
"last": "Yepp",
"cell": "8125552344",
"start-year": "2004",
"building": {
"name": "City Hall",
"state": "IN"
}
}
{
"_id": 234567890,
"first": "Ron",
"last": "Swandaughter",
"cell": "8125559347",
"start-year": "2002",
"building": {
"name": "City Hall",
"state": "IN"
}
}
Massive Arrays
Summary
Massive Arrays
Summary
● Do: Store information together that
you'll be frequently querying
together
Massive Arrays
��
Summary
● Do: Store information together that
you'll be frequently querying
together
● Don't: Store information in massive,
unbounded arrays
Massive Arrays
��
��
Massive arrays
Massive number of
collections
Unnecessary indexes
Separating data that is
accessed together
4Schema Design
Anti-Patterns
The
Problem
● Empty and unused indexes drain
resources
Massive Number of Collections
Massive Number of Collections
Massive Number of Collections
Massive Number of Collections
Massive Number of Collections
Collections
To Drop
● Empty collections
● Collections whose size is mostly
indexes
Massive Number of Collections
Summary
Massive Number of Collections
Summary
● Don't: create a massive number of
collections
��
Massive Number of Collections
Massive arrays
Massive number of
collections
Unnecessary indexes
Separating data that is
accessed together
4Schema Design
Anti-Patterns
Indexes are good.
Unnecessary Indexes
Indexes are good.
Unnecessary Indexes
Unnecessary Indexes
Should I create an index
on every field?
No.
Unnecessary Indexes
The
Problem
● Indexes take up space
● Indexes can negatively impact write
performance
Unnecessary Indexes
Indexes to
Drop
● Rarely used indexes
● Redundant indexes
Unnecessary Indexes
Unnecessary Indexes
Inspirational Women of the World
Summary
Unnecessary Indexes
Summary
● Do: Create indexes that support
frequent queries
Unnecessary Indexes
��
Summary
● Do: Create indexes that support
frequent queries
● Don't: Create unnecessary indexes
Unnecessary Indexes
��
��
Massive arrays
Massive number of
collections
Unnecessary indexes
Separating data that is
accessed together
4Schema Design
Anti-Patterns
The
Problem
● Not all document databases support
joins
● Joins can be slow and
resource-intensive
Separating Data That is
Accessed Together
Data that is accessed
together should be
stored together.
Separating Data That is Accessed Together
Separating Data That is Accessed Together
Separating Data That is Accessed Together
Data to store
● Basic stats about each country
● List of resources that each country has available to trade
● List of delegates for each country
● Policy statements for each country
{
…
}
{
…
}
{
…
}
Countries
{
…
}
{
…
}
{
…
}
Resources
{
…
}
{
…
}
{
…
}
Delegates
{
…
}
{
…
}
{
…
}
Policies
Separating Data That is Accessed Together
Country Report
● Basic stats
● Resources available to trade
● Delegates
● Names and dates of last five policy documents
Separating Data That is Accessed Together
Separating Data That is Accessed Together
Separating Data That is Accessed Together
Separating Data That is Accessed Together
Countries
{
"_id": "finland",
"official_name": "Republic of Finland",
"capital": "Helsinki",
"languages": [
"Finnish",
"Swedish",
"Sámi"
],
"population": 5528737
}
Resources
{
"_id": ObjectId("5ef0feeb0d9314ac117d2034"),
"country_id": "finland",
"lions": 32563,
"military_personnel": 0,
"pulp": 0,
"paper": 0
}
Delegates
{
"_id": ObjectId("5ef0ff480d9314ac117d2035"),
"country_id": "finland",
"first_name": "Andy",
"last_name": "Fryer"
}
{
"_id": ObjectId("5ef0ff710d9314ac117d2036"),
"country_id": "finland",
"first_name": "Donna",
"last_name": "Beagle"
}
Policies
{
"_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"),
"date-created":
ISODate("2011-11-09T04:00:00.000+00:00"),
"status": "draft",
"title": "Country Defense Policy",
"country_id": "finland",
"policy": "Finland has formally decided to
use lions in lieu of military for all
self defense..."
}
Separating Data That is Accessed Together
Country Report
● Basic stats
● Resources available to trade
● Delegates
● Names and dates of last five policy documents
Separating Data That is Accessed Together
Countries
{
"_id": "finland",
"official_name": "Republic of Finland",
"capital": "Helsinki",
"languages": [
"Finnish",
"Swedish",
"Sámi"
],
"population": 5528737
}
Resources
{
"_id": ObjectId("5ef0feeb0d9314ac117d2034"),
"country_id": "finland",
"lions": 32563,
"military_personnel": 0,
"pulp": 0,
"paper": 0
}
Delegates
{
"_id": ObjectId("5ef0ff480d9314ac117d2035"),
"country_id": "finland",
"first_name": "Andy",
"last_name": "Fryer"
}
{
"_id": ObjectId("5ef0ff710d9314ac117d2036"),
"country_id": "finland",
"first_name": "Donna",
"last_name": "Beagle"
}
Policies
{
"_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"),
"date-created":
ISODate("2011-11-09T04:00:00.000+00:00"),
"status": "draft",
"title": "Country Defense Policy",
"country_id": "finland",
"policy": "Finland has formally decided to
use lions in lieu of military for all
self defense..."
}
Separating Data That is Accessed Together
Resources
{
"_id": ObjectId("5ef0feeb0d9314ac117d2034"),
"country_id": "finland",
"lions": 32563,
"military_personnel": 0,
"pulp": 0,
"paper": 0
}
Countries
{
"_id": "finland",
"official_name": "Republic of Finland",
"capital": "Helsinki",
"languages": [
"Finnish",
"Swedish",
"Sámi"
],
"population": 5528737,
"resources": {
"lions": 32563,
"military_personnel": 0,
"pulp": 0,
"paper": 0
}
}
Delegates
{
"_id": ObjectId("5ef0ff480d9314ac117d2035"),
"country_id": "finland",
"first_name": "Andy",
"last_name": "Fryer"
}
{
"_id": ObjectId("5ef0ff710d9314ac117d2036"),
"country_id": "finland",
"first_name": "Donna",
"last_name": "Beagle"
}
Policies
{
"_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"),
"date-created":
ISODate("2011-11-09T04:00:00.000+00:00"),
"status": "draft",
"title": "Country Defense Policy",
"country_id": "finland",
"policy": "Finland has formally decided to
use lions in lieu of military for all
self defense..."
}
Separating Data That is Accessed Together
Countries
{
"_id": "finland",
"official_name": "Republic of Finland",
"capital": "Helsinki",
"languages": [
"Finnish",
"Swedish",
"Sámi"
],
"population": 5528737,
"resources": {
"lions": 32563,
"military_personnel": 0,
"pulp": 0,
"paper": 0
}
}
Delegates
{
"_id": ObjectId("5ef0ff480d9314ac117d2035"),
"country_id": "finland",
"first_name": "Andy",
"last_name": "Fryer"
}
{
"_id": ObjectId("5ef0ff710d9314ac117d2036"),
"country_id": "finland",
"first_name": "Donna",
"last_name": "Beagle"
}
Policies
{
"_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"),
"date-created":
ISODate("2011-11-09T04:00:00.000+00:00"),
"status": "draft",
"title": "Country Defense Policy",
"country_id": "finland",
"policy": "Finland has formally decided to
use lions in lieu of military for all
self defense..."
}
Separating Data That is Accessed Together
Countries
{
"_id": "finland",
"official_name": "Republic of Finland",
"capital": "Helsinki",
"languages": [
"Finnish",
"Swedish",
"Sámi"
],
"population": 5528737,
"resources": {
"lions": 32563,
"military_personnel": 0,
"pulp": 0,
"paper": 0
}
}
Delegates
{
"_id": ObjectId("5ef0ff480d9314ac117d2035"),
"country_id": "finland",
"first_name": "Andy",
"last_name": "Fryer"
}
{
"_id": ObjectId("5ef0ff710d9314ac117d2036"),
"country_id": "finland",
"first_name": "Donna",
"last_name": "Beagle"
}
Policies
{
"_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"),
"date-created":
ISODate("2011-11-09T04:00:00.000+00:00"),
"status": "draft",
"title": "Country Defense Policy",
"country_id": "finland",
"policy": "Finland has formally decided to
use lions in lieu of military for all
self defense..."
}
Separating Data That is Accessed Together
Countries
{
"_id": "finland",
"official_name": "Republic of Finland",
"capital": "Helsinki",
"languages": [
"Finnish",
"Swedish",
"Sámi"
],
"population": 5528737,
"resources": {
"lions": 32563,
"military_personnel": 0,
"pulp": 0,
"paper": 0
},
"delegates": [
{
"first_name": "Andy",
"last_name": "Fryer"
},
{
"first_name": "Donna",
"last_name": "Beagle"
}
]
}
Policies
{
"_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"),
"date-created":
ISODate("2011-11-09T04:00:00.000+00:00"),
"status": "draft",
"title": "Country Defense Policy",
"country_id": "finland",
"policy": "Finland has formally decided to
use lions in lieu of military for all
self defense..."
}
Delegates
{
"_id": ObjectId("5ef0ff480d9314ac117d2035"),
"country_id": "finland",
"first_name": "Andy",
"last_name": "Fryer"
}
{
"_id": ObjectId("5ef0ff710d9314ac117d2036"),
"country_id": "finland",
"first_name": "Donna",
"last_name": "Beagle"
}
Separating Data That is Accessed Together
Countries
{
"_id": "finland",
"official_name": "Republic of Finland",
"capital": "Helsinki",
"languages": [
"Finnish",
"Swedish",
"Sámi"
],
"population": 5528737,
"resources": {
"lions": 32563,
"military_personnel": 0,
"pulp": 0,
"paper": 0
},
"delegates": [
{
"first_name": "Andy",
"last_name": "Fryer"
},
{
"first_name": "Donna",
"last_name": "Beagle"
}
]
}
Policies
{
"_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"),
"date-created":
ISODate("2011-11-09T04:00:00.000+00:00"),
"status": "draft",
"title": "Country Defense Policy",
"country_id": "finland",
"policy": "Finland has formally decided to
use lions in lieu of military for all
self defense..."
}
Separating Data That is Accessed Together
Countries
{
"_id": "finland",
"official_name": "Republic of Finland",
"capital": "Helsinki",
"languages": [
"Finnish",
"Swedish",
"Sámi"
],
"population": 5528737,
"resources": {
"lions": 32563,
"military_personnel": 0,
"pulp": 0,
"paper": 0
},
"delegates": [
{
"first_name": "Andy",
"last_name": "Fryer"
},
{
"first_name": "Donna",
"last_name": "Beagle"
}
]
}
Policies
{
"_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"),
"date-created":
ISODate("2011-11-09T04:00:00.000+00:00"),
"status": "draft",
"title": "Country Defense Policy",
"country_id": "finland",
"policy": "Finland has formally decided to
use lions in lieu of military for all
self defense..."
}
Separating Data That is Accessed Together
Countries
{
"_id": "finland",
"official_name": "Republic of Finland",
"capital": "Helsinki",
"languages": [
"Finnish",
"Swedish",
"Sámi"
],
"population": 5528737,
"resources": {
"lions": 32563,
"military_personnel": 0,
"pulp": 0,
"paper": 0
},
"delegates": [
...
],
"recent-policies": [
{
"_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"),
"date-created":
ISODate("2011-11-09T04:00:00.000+00:00"),
"title": "Country Defense Policy"
},
{
"_id": ObjectId("5ef357bb3e5f7febbd3ed7fd"),
"date-created":
ISODate("2011-11-10T04:00:00.000+00:00"),
"title": "Humanitarian Food Policy"
}
]
}
Policies
{
"_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"),
"date-created":
ISODate("2011-11-09T04:00:00.000+00:00"),
"status": "draft",
"title": "Country Defense Policy",
"country_id": "finland",
"policy": "Finland has formally decided to
use lions in lieu of military for all
self defense..."
}
Separating Data That is Accessed Together
Countries
{
"_id": "finland",
"official_name": "Republic of Finland",
"capital": "Helsinki",
"languages": [
"Finnish",
"Swedish",
"Sámi"
],
"population": 5528737,
"resources": {
"lions": 32563,
"military_personnel": 0,
"pulp": 0,
"paper": 0
},
"delegates": [
...
],
"recent-policies": [
{
"_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"),
"date-created":
ISODate("2011-11-09T04:00:00.000+00:00"),
"title": "Country Defense Policy"
},
{
"_id": ObjectId("5ef357bb3e5f7febbd3ed7fd"),
"date-created":
ISODate("2011-11-10T04:00:00.000+00:00"),
"title": "Humanitarian Food Policy"
}
]
}
Policies
{
"_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"),
"date-created":
ISODate("2011-11-09T04:00:00.000+00:00"),
"status": "draft",
"title": "Country Defense Policy",
"country_id": "finland",
"policy": "Finland has formally decided to
use lions in lieu of military for all
self defense..."
}
Separating Data That is Accessed Together
Countries
{
"_id": "finland",
"official_name": "Republic of Finland",
"capital": "Helsinki",
"languages": [
...
],
"population": 5528737,
"resources": {
...
},
"delegates": [
...
],
"recent-policies": [
...
],
"events": [
{
"event-id": ObjectId("5ef34faa3e5f7febbd3ed7fc"),
"event-date":
ISODate("2011-11-10T05:00:00.000+00:00"),
"topic": "Global Food Crisis"
},
{
"event-id": ObjectId("5ef35ac93e5f7febbd3ed7fe"),
"event-date":
ISODate("2012-02-18T05:00:00.000+00:00"),
"topic": "Pandemic"
}
]
}
Policies
{
"_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"),
"date-created":
ISODate("2011-11-09T04:00:00.000+00:00"),
"status": "draft",
"title": "Country Defense Policy",
"country_id": "finland",
"policy": "Finland has formally decided to
use lions in lieu of military for all
self defense..."
}
Separating Data That is Accessed Together
Summary
Separating Data That is Accessed
Together
Summary
● Do: Carefully consider your use case
as you design your schema
Separating Data That is Accessed
Together
��
Summary
● Do: Carefully consider your use case
as you design your schema
● Don't: Separate data that is accessed
together
Separating Data That is Accessed
Together
��
��
Massive arrays
Massive number of
collections
Unnecessary indexes
Separating data that is
accessed together
4Schema Design
Anti-Patterns
Massive arrays
Massive number of
collections
Unnecessary indexes
Separating data that is
accessed together
Massive arrays
Massive number of
collections
Unnecessary indexes
Separating data that is
accessed together
Massive arrays
Massive number of
collections
Unnecessary indexes
Separating data that is
accessed together
Massive arrays
Massive number of
collections
Unnecessary indexes
Separating data that is
accessed together
Questions to Ask as You Model Your Data
● What data will you need to store?
● What data is likely to be accessed together?
● What queries will be run most frequently?
● What data is likely to grow at a rapid, unbounded pace?
There is no "right" model
for your data.
community.mongodb.com
mongodbforjustice.mongodb.events

More Related Content

What's hot

Multi-model Databases and Tightly Integrated Polystores
Multi-model Databases and Tightly Integrated PolystoresMulti-model Databases and Tightly Integrated Polystores
Multi-model Databases and Tightly Integrated PolystoresJiaheng Lu
 
No sql present
No sql presentNo sql present
No sql presentThai Phong
 
Towards research data knowledge graphs
Towards research data knowledge graphsTowards research data knowledge graphs
Towards research data knowledge graphsStefan Dietze
 
OrientDB: Unlock the Value of Document Data Relationships
OrientDB: Unlock the Value of Document Data RelationshipsOrientDB: Unlock the Value of Document Data Relationships
OrientDB: Unlock the Value of Document Data RelationshipsFabrizio Fortino
 
NoSQL Graph Databases - Why, When and Where
NoSQL Graph Databases - Why, When and WhereNoSQL Graph Databases - Why, When and Where
NoSQL Graph Databases - Why, When and WhereEugene Hanikblum
 
8th DBpedia meeting / California 2016
8th DBpedia meeting /  California 20168th DBpedia meeting /  California 2016
8th DBpedia meeting / California 2016Dimitris Kontokostas
 
Linked Data Experiences at Springer Nature
Linked Data Experiences at Springer NatureLinked Data Experiences at Springer Nature
Linked Data Experiences at Springer NatureMichele Pasin
 
An Evening with MongoDB - Orlando: Welcome and Keynote
An Evening with MongoDB - Orlando: Welcome and KeynoteAn Evening with MongoDB - Orlando: Welcome and Keynote
An Evening with MongoDB - Orlando: Welcome and KeynoteMongoDB
 
Why Semantics Matter? Adding the semantic edge to your content, right from au...
Why Semantics Matter? Adding the semantic edge to your content,right from au...Why Semantics Matter? Adding the semantic edge to your content,right from au...
Why Semantics Matter? Adding the semantic edge to your content, right from au...Ontotext
 
Enterprise knowledge graphs
Enterprise knowledge graphsEnterprise knowledge graphs
Enterprise knowledge graphsSören Auer
 

What's hot (12)

Multi-model Databases and Tightly Integrated Polystores
Multi-model Databases and Tightly Integrated PolystoresMulti-model Databases and Tightly Integrated Polystores
Multi-model Databases and Tightly Integrated Polystores
 
DBPedia-past-present-future
DBPedia-past-present-futureDBPedia-past-present-future
DBPedia-past-present-future
 
No sql present
No sql presentNo sql present
No sql present
 
Graph based data models
Graph based data modelsGraph based data models
Graph based data models
 
Towards research data knowledge graphs
Towards research data knowledge graphsTowards research data knowledge graphs
Towards research data knowledge graphs
 
OrientDB: Unlock the Value of Document Data Relationships
OrientDB: Unlock the Value of Document Data RelationshipsOrientDB: Unlock the Value of Document Data Relationships
OrientDB: Unlock the Value of Document Data Relationships
 
NoSQL Graph Databases - Why, When and Where
NoSQL Graph Databases - Why, When and WhereNoSQL Graph Databases - Why, When and Where
NoSQL Graph Databases - Why, When and Where
 
8th DBpedia meeting / California 2016
8th DBpedia meeting /  California 20168th DBpedia meeting /  California 2016
8th DBpedia meeting / California 2016
 
Linked Data Experiences at Springer Nature
Linked Data Experiences at Springer NatureLinked Data Experiences at Springer Nature
Linked Data Experiences at Springer Nature
 
An Evening with MongoDB - Orlando: Welcome and Keynote
An Evening with MongoDB - Orlando: Welcome and KeynoteAn Evening with MongoDB - Orlando: Welcome and Keynote
An Evening with MongoDB - Orlando: Welcome and Keynote
 
Why Semantics Matter? Adding the semantic edge to your content, right from au...
Why Semantics Matter? Adding the semantic edge to your content,right from au...Why Semantics Matter? Adding the semantic edge to your content,right from au...
Why Semantics Matter? Adding the semantic edge to your content, right from au...
 
Enterprise knowledge graphs
Enterprise knowledge graphsEnterprise knowledge graphs
Enterprise knowledge graphs
 

Similar to Stop! Don't make these mistakes in your document database!

Making Sense of Schema on Read
Making Sense of Schema on ReadMaking Sense of Schema on Read
Making Sense of Schema on ReadKent Graziano
 
Graph databases and the #panamapapers
Graph databases and the #panamapapersGraph databases and the #panamapapers
Graph databases and the #panamapapersdarthvader42
 
Test Trend Analysis : Towards robust, reliable and timely tests
Test Trend Analysis : Towards robust, reliable and timely testsTest Trend Analysis : Towards robust, reliable and timely tests
Test Trend Analysis : Towards robust, reliable and timely testsHugh McCamphill
 
Data Mining @ BSU Malolos 2019
Data Mining @ BSU Malolos 2019Data Mining @ BSU Malolos 2019
Data Mining @ BSU Malolos 2019Edwin S. Garcia
 
Introduction to MongoDB and Workshop
Introduction to MongoDB and WorkshopIntroduction to MongoDB and Workshop
Introduction to MongoDB and WorkshopAhmedabadJavaMeetup
 
Test trend analysis: Towards robust reliable and timely tests
Test trend analysis: Towards robust reliable and timely testsTest trend analysis: Towards robust reliable and timely tests
Test trend analysis: Towards robust reliable and timely testsHugh McCamphill
 
A Real-World Implementation of Linked Data
A Real-World Implementation of Linked DataA Real-World Implementation of Linked Data
A Real-World Implementation of Linked DataDimitri van Hees
 
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 ConnectorHenrik Ingo
 
Make sense of your big data - Pilato
Make sense of your big data - PilatoMake sense of your big data - Pilato
Make sense of your big data - PilatoCodemotion
 
Vital AI: Big Data Modeling
Vital AI: Big Data ModelingVital AI: Big Data Modeling
Vital AI: Big Data ModelingVital.AI
 
Data infrastructure architecture for medium size organization: tips for colle...
Data infrastructure architecture for medium size organization: tips for colle...Data infrastructure architecture for medium size organization: tips for colle...
Data infrastructure architecture for medium size organization: tips for colle...DataWorks Summit/Hadoop Summit
 
Text Analytics Online Knowledge Base / Database
Text Analytics Online Knowledge Base / DatabaseText Analytics Online Knowledge Base / Database
Text Analytics Online Knowledge Base / DatabaseNaveen Kumar
 
The Graph Database Universe: Neo4j Overview
The Graph Database Universe: Neo4j OverviewThe Graph Database Universe: Neo4j Overview
The Graph Database Universe: Neo4j OverviewNeo4j
 
Enabling Exploratory Analysis of Large Data with Apache Spark and R
Enabling Exploratory Analysis of Large Data with Apache Spark and REnabling Exploratory Analysis of Large Data with Apache Spark and R
Enabling Exploratory Analysis of Large Data with Apache Spark and RDatabricks
 
Introducing Azure DocumentDB - NoSQL, No Problem
Introducing Azure DocumentDB - NoSQL, No ProblemIntroducing Azure DocumentDB - NoSQL, No Problem
Introducing Azure DocumentDB - NoSQL, No ProblemAndrew Liu
 
Enterprise Search Europe 2015: Fishing the big data streams - the future of ...
Enterprise Search Europe 2015:  Fishing the big data streams - the future of ...Enterprise Search Europe 2015:  Fishing the big data streams - the future of ...
Enterprise Search Europe 2015: Fishing the big data streams - the future of ...Charlie Hull
 
Introduction to Graph databases and Neo4j (by Stefan Armbruster)
Introduction to Graph databases and Neo4j (by Stefan Armbruster)Introduction to Graph databases and Neo4j (by Stefan Armbruster)
Introduction to Graph databases and Neo4j (by Stefan Armbruster)barcelonajug
 
Case study of Rujhaan.com (A social news app )
Case study of Rujhaan.com (A social news app )Case study of Rujhaan.com (A social news app )
Case study of Rujhaan.com (A social news app )Rahul Jain
 
Creating an Open Source Genealogical Search Engine with Apache Solr
Creating an Open Source Genealogical Search Engine with Apache SolrCreating an Open Source Genealogical Search Engine with Apache Solr
Creating an Open Source Genealogical Search Engine with Apache SolrBrooke Ganz
 

Similar to Stop! Don't make these mistakes in your document database! (20)

Making Sense of Schema on Read
Making Sense of Schema on ReadMaking Sense of Schema on Read
Making Sense of Schema on Read
 
Graph databases and the #panamapapers
Graph databases and the #panamapapersGraph databases and the #panamapapers
Graph databases and the #panamapapers
 
Test Trend Analysis : Towards robust, reliable and timely tests
Test Trend Analysis : Towards robust, reliable and timely testsTest Trend Analysis : Towards robust, reliable and timely tests
Test Trend Analysis : Towards robust, reliable and timely tests
 
Data Mining @ BSU Malolos 2019
Data Mining @ BSU Malolos 2019Data Mining @ BSU Malolos 2019
Data Mining @ BSU Malolos 2019
 
GraphDB
GraphDBGraphDB
GraphDB
 
Introduction to MongoDB and Workshop
Introduction to MongoDB and WorkshopIntroduction to MongoDB and Workshop
Introduction to MongoDB and Workshop
 
Test trend analysis: Towards robust reliable and timely tests
Test trend analysis: Towards robust reliable and timely testsTest trend analysis: Towards robust reliable and timely tests
Test trend analysis: Towards robust reliable and timely tests
 
A Real-World Implementation of Linked Data
A Real-World Implementation of Linked DataA Real-World Implementation of Linked Data
A Real-World Implementation of Linked Data
 
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
 
Make sense of your big data - Pilato
Make sense of your big data - PilatoMake sense of your big data - Pilato
Make sense of your big data - Pilato
 
Vital AI: Big Data Modeling
Vital AI: Big Data ModelingVital AI: Big Data Modeling
Vital AI: Big Data Modeling
 
Data infrastructure architecture for medium size organization: tips for colle...
Data infrastructure architecture for medium size organization: tips for colle...Data infrastructure architecture for medium size organization: tips for colle...
Data infrastructure architecture for medium size organization: tips for colle...
 
Text Analytics Online Knowledge Base / Database
Text Analytics Online Knowledge Base / DatabaseText Analytics Online Knowledge Base / Database
Text Analytics Online Knowledge Base / Database
 
The Graph Database Universe: Neo4j Overview
The Graph Database Universe: Neo4j OverviewThe Graph Database Universe: Neo4j Overview
The Graph Database Universe: Neo4j Overview
 
Enabling Exploratory Analysis of Large Data with Apache Spark and R
Enabling Exploratory Analysis of Large Data with Apache Spark and REnabling Exploratory Analysis of Large Data with Apache Spark and R
Enabling Exploratory Analysis of Large Data with Apache Spark and R
 
Introducing Azure DocumentDB - NoSQL, No Problem
Introducing Azure DocumentDB - NoSQL, No ProblemIntroducing Azure DocumentDB - NoSQL, No Problem
Introducing Azure DocumentDB - NoSQL, No Problem
 
Enterprise Search Europe 2015: Fishing the big data streams - the future of ...
Enterprise Search Europe 2015:  Fishing the big data streams - the future of ...Enterprise Search Europe 2015:  Fishing the big data streams - the future of ...
Enterprise Search Europe 2015: Fishing the big data streams - the future of ...
 
Introduction to Graph databases and Neo4j (by Stefan Armbruster)
Introduction to Graph databases and Neo4j (by Stefan Armbruster)Introduction to Graph databases and Neo4j (by Stefan Armbruster)
Introduction to Graph databases and Neo4j (by Stefan Armbruster)
 
Case study of Rujhaan.com (A social news app )
Case study of Rujhaan.com (A social news app )Case study of Rujhaan.com (A social news app )
Case study of Rujhaan.com (A social news app )
 
Creating an Open Source Genealogical Search Engine with Apache Solr
Creating an Open Source Genealogical Search Engine with Apache SolrCreating an Open Source Genealogical Search Engine with Apache Solr
Creating an Open Source Genealogical Search Engine with Apache Solr
 

More from Lauren Hayward Schaefer

7 Ways to Build an API that Developers Will Hate
7 Ways to Build an API that Developers Will Hate7 Ways to Build an API that Developers Will Hate
7 Ways to Build an API that Developers Will HateLauren Hayward Schaefer
 
Developer Advocacy: A Career Path for Those With a Passion for Code, Communit...
Developer Advocacy: A Career Path for Those With a Passion for Code, Communit...Developer Advocacy: A Career Path for Those With a Passion for Code, Communit...
Developer Advocacy: A Career Path for Those With a Passion for Code, Communit...Lauren Hayward Schaefer
 
10 Best Practices for Writing Documentation (For Those Who Would Rather Do An...
10 Best Practices for Writing Documentation (For Those Who Would Rather Do An...10 Best Practices for Writing Documentation (For Those Who Would Rather Do An...
10 Best Practices for Writing Documentation (For Those Who Would Rather Do An...Lauren Hayward Schaefer
 
Intro to Technical Writing: Creating Content that Google and Readers will Love
Intro to Technical Writing: Creating Content that Google and Readers will LoveIntro to Technical Writing: Creating Content that Google and Readers will Love
Intro to Technical Writing: Creating Content that Google and Readers will LoveLauren Hayward Schaefer
 
Level Up Your Technical Career by Writing
Level Up Your Technical Career by WritingLevel Up Your Technical Career by Writing
Level Up Your Technical Career by WritingLauren Hayward Schaefer
 
5 Things I Learned While Modeling Data in MongoDB
5 Things I Learned While Modeling Data in MongoDB5 Things I Learned While Modeling Data in MongoDB
5 Things I Learned While Modeling Data in MongoDBLauren Hayward Schaefer
 
How to Raise Your Profile as a Developer (And Why You Should Bother!)
How to Raise Your Profile as a Developer (And Why You Should Bother!)How to Raise Your Profile as a Developer (And Why You Should Bother!)
How to Raise Your Profile as a Developer (And Why You Should Bother!)Lauren Hayward Schaefer
 
Building CI/CD Pipelines for MongoDB Realm Apps
Building CI/CD Pipelines for MongoDB Realm AppsBuilding CI/CD Pipelines for MongoDB Realm Apps
Building CI/CD Pipelines for MongoDB Realm AppsLauren Hayward Schaefer
 
From Tables to Documents—Changing Your Database Mindset
From Tables to Documents—Changing Your Database MindsetFrom Tables to Documents—Changing Your Database Mindset
From Tables to Documents—Changing Your Database MindsetLauren Hayward Schaefer
 
DevOps + MongoDB Realm Serverless Functions = 🤩
DevOps + MongoDB Realm Serverless Functions = 🤩DevOps + MongoDB Realm Serverless Functions = 🤩
DevOps + MongoDB Realm Serverless Functions = 🤩Lauren Hayward Schaefer
 
From Tables to Documents—Changing Your Database Mindset
From Tables to Documents—Changing Your Database MindsetFrom Tables to Documents—Changing Your Database Mindset
From Tables to Documents—Changing Your Database MindsetLauren Hayward Schaefer
 
From Tables to Documents -- Changing Your Database Mindset
From Tables to Documents -- Changing Your Database MindsetFrom Tables to Documents -- Changing Your Database Mindset
From Tables to Documents -- Changing Your Database MindsetLauren Hayward Schaefer
 
Jumpstart! From SQL to NoSQL -- Changing Your Mindset
Jumpstart! From SQL to NoSQL -- Changing Your MindsetJumpstart! From SQL to NoSQL -- Changing Your Mindset
Jumpstart! From SQL to NoSQL -- Changing Your MindsetLauren Hayward Schaefer
 

More from Lauren Hayward Schaefer (20)

7 Ways to Build an API that Developers Will Hate
7 Ways to Build an API that Developers Will Hate7 Ways to Build an API that Developers Will Hate
7 Ways to Build an API that Developers Will Hate
 
Developer Advocacy: A Career Path for Those With a Passion for Code, Communit...
Developer Advocacy: A Career Path for Those With a Passion for Code, Communit...Developer Advocacy: A Career Path for Those With a Passion for Code, Communit...
Developer Advocacy: A Career Path for Those With a Passion for Code, Communit...
 
10 Best Practices for Writing Documentation (For Those Who Would Rather Do An...
10 Best Practices for Writing Documentation (For Those Who Would Rather Do An...10 Best Practices for Writing Documentation (For Those Who Would Rather Do An...
10 Best Practices for Writing Documentation (For Those Who Would Rather Do An...
 
Intro to Technical Writing: Creating Content that Google and Readers will Love
Intro to Technical Writing: Creating Content that Google and Readers will LoveIntro to Technical Writing: Creating Content that Google and Readers will Love
Intro to Technical Writing: Creating Content that Google and Readers will Love
 
Level Up Your Technical Career by Writing
Level Up Your Technical Career by WritingLevel Up Your Technical Career by Writing
Level Up Your Technical Career by Writing
 
How to Raise Your Profile Worksheet
How to Raise Your Profile WorksheetHow to Raise Your Profile Worksheet
How to Raise Your Profile Worksheet
 
5 Things I Learned While Modeling Data in MongoDB
5 Things I Learned While Modeling Data in MongoDB5 Things I Learned While Modeling Data in MongoDB
5 Things I Learned While Modeling Data in MongoDB
 
How to Raise Your Profile as a Developer (And Why You Should Bother!)
How to Raise Your Profile as a Developer (And Why You Should Bother!)How to Raise Your Profile as a Developer (And Why You Should Bother!)
How to Raise Your Profile as a Developer (And Why You Should Bother!)
 
Building CI/CD Pipelines for MongoDB Realm Apps
Building CI/CD Pipelines for MongoDB Realm AppsBuilding CI/CD Pipelines for MongoDB Realm Apps
Building CI/CD Pipelines for MongoDB Realm Apps
 
From Tables to Documents—Changing Your Database Mindset
From Tables to Documents—Changing Your Database MindsetFrom Tables to Documents—Changing Your Database Mindset
From Tables to Documents—Changing Your Database Mindset
 
NoSQL for Startups
NoSQL for StartupsNoSQL for Startups
NoSQL for Startups
 
Back to Basics 2021
Back to Basics 2021Back to Basics 2021
Back to Basics 2021
 
DevOps + MongoDB Realm Serverless Functions = 🤩
DevOps + MongoDB Realm Serverless Functions = 🤩DevOps + MongoDB Realm Serverless Functions = 🤩
DevOps + MongoDB Realm Serverless Functions = 🤩
 
From Tables to Documents—Changing Your Database Mindset
From Tables to Documents—Changing Your Database MindsetFrom Tables to Documents—Changing Your Database Mindset
From Tables to Documents—Changing Your Database Mindset
 
From Tables to Documents -- Changing Your Database Mindset
From Tables to Documents -- Changing Your Database MindsetFrom Tables to Documents -- Changing Your Database Mindset
From Tables to Documents -- Changing Your Database Mindset
 
Making #RemoteWork Actually Work
Making #RemoteWork Actually WorkMaking #RemoteWork Actually Work
Making #RemoteWork Actually Work
 
DevOps + MongoDB Serverless = 
DevOps + MongoDB Serverless = DevOps + MongoDB Serverless = 
DevOps + MongoDB Serverless = 
 
MongoDB: Back to Basics
MongoDB:  Back to BasicsMongoDB:  Back to Basics
MongoDB: Back to Basics
 
Intro to MongoDB Workshop
Intro to MongoDB WorkshopIntro to MongoDB Workshop
Intro to MongoDB Workshop
 
Jumpstart! From SQL to NoSQL -- Changing Your Mindset
Jumpstart! From SQL to NoSQL -- Changing Your MindsetJumpstart! From SQL to NoSQL -- Changing Your Mindset
Jumpstart! From SQL to NoSQL -- Changing Your Mindset
 

Recently uploaded

Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 

Recently uploaded (20)

Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 

Stop! Don't make these mistakes in your document database!

  • 1. Stop! Don't make these mistakes in your document database! @Lauren_Schaefer
  • 2.
  • 3.
  • 4. Learn about and prevent schema design anti-patterns.
  • 5. Massive arrays Massive number of collections Unnecessary indexes Separating data that is accessed together 4Schema Design Anti-Patterns
  • 6. Massive arrays Massive number of collections Unnecessary indexes Separating data that is accessed together 4Schema Design Anti-Patterns
  • 7. Massive arrays Massive number of collections Unnecessary indexes Separating data that is accessed together 4Schema Design Anti-Patterns
  • 8. Massive arrays Massive number of collections Unnecessary indexes Separating data that is accessed together 4Schema Design Anti-Patterns
  • 9. Massive arrays Massive number of collections Unnecessary indexes Separating data that is accessed together 4Schema Design Anti-Patterns
  • 10. Massive arrays Massive number of collections Unnecessary indexes Separating data that is accessed together 4Schema Design Anti-Patterns
  • 14. Collection { first_name: "Lauren", last_name: "Schaefer", tik_tok: "Lauren_Schaefer" } { first_name: "Lauren", last_name: "Schaefer", tik_tok: "Lauren_Schaefer" } { first_name: "Lauren", last_name: "Schaefer", tik_tok: "Lauren_Schaefer" } Users
  • 16. Massive arrays Massive number of collections Unnecessary indexes Separating data that is accessed together 4Schema Design Anti-Patterns
  • 17. Data that is accessed together should be stored together. Massive Arrays
  • 18. Massive Arrays { a: "b", c: "d", e: { f: "g", h: "i" }, j: ["k", "l", "m"] }
  • 19. Massive Arrays { a: "b", c: "d", e: { f: "g", h: "i" }, j: ["k", "l", "m"] }
  • 20. Massive Arrays { a: "b", c: "d", e: { f: "g", h: "i" }, j: ["k", "l", "m"] }
  • 21. The Problem ● May exceed document size limits ● Index performance on arrays decreases as array size increases Massive Arrays
  • 22.
  • 23. Buildings { "_id": "city_hall", "name": "City Hall", "city": "Pawnee", "state": "IN", "employees": [ { "_id": 123456789, "first": "Leslie", "last": "Yepp", "cell": "8125552344", "start-year": "2004" }, { "_id": 234567890, "first": "Ron", "last": "Swandaughter", "cell": "8125559347", "start-year": "2002" } ] } Massive Arrays
  • 24. Buildings { "_id": "city_hall", "name": "City Hall", "city": "Pawnee", "state": "IN", "employees": [ { "_id": 123456789, "first": "Leslie", "last": "Yepp", "cell": "8125552344", "start-year": "2004" }, { "_id": 234567890, "first": "Ron", "last": "Swandaughter", "cell": "8125559347", "start-year": "2002" }, { "_id": 345678901, "first": "Andy", "last": "Fryer", "cell": "8125552341", "start-year": "2002" }, Massive Arrays
  • 25. Employees { "_id": 123456789, "first": "Leslie", "last": "Yepp", "cell": "8125552344", "start-year": "2004", "building": { "_id": "city_hall", "name": "City Hall", "city": "Pawnee", "state": "IN" } } { "_id": 234567890, "first": "Ron", "last": "Swandaughter", "cell": "8125559347", "start-year": "2002", "building": { "_id": "city_hall", "name": "City Hall", "city": "Pawnee", "state": "IN" } } Massive Arrays
  • 26. Buildings { "_id": "city_hall", "name": "City Hall", "city": "Pawnee", "state": "IN" } Employees { "_id": 123456789, "first": "Leslie", "last": "Yepp", "cell": "8125552344", "start-year": "2004", "building_id": "city_hall" } { "_id": 234567890, "first": "Ron", "last": "Swandaughter", "cell": "8125559347", "start-year": "2002", "building_id": "city_hall" } Massive Arrays
  • 29. Buildings { "_id": "city_hall", "name": "City Hall", "city": "Pawnee", "state": "IN" } Employees { "_id": 123456789, "first": "Leslie", "last": "Yepp", "cell": "8125552344", "start-year": "2004", "building": { "name": "City Hall", "state": "IN" } } { "_id": 234567890, "first": "Ron", "last": "Swandaughter", "cell": "8125559347", "start-year": "2002", "building": { "name": "City Hall", "state": "IN" } } Massive Arrays
  • 31. Summary ● Do: Store information together that you'll be frequently querying together Massive Arrays ��
  • 32. Summary ● Do: Store information together that you'll be frequently querying together ● Don't: Store information in massive, unbounded arrays Massive Arrays �� ��
  • 33. Massive arrays Massive number of collections Unnecessary indexes Separating data that is accessed together 4Schema Design Anti-Patterns
  • 34. The Problem ● Empty and unused indexes drain resources Massive Number of Collections
  • 35. Massive Number of Collections
  • 36. Massive Number of Collections
  • 37. Massive Number of Collections
  • 38. Massive Number of Collections
  • 39. Collections To Drop ● Empty collections ● Collections whose size is mostly indexes Massive Number of Collections
  • 41. Summary ● Don't: create a massive number of collections �� Massive Number of Collections
  • 42. Massive arrays Massive number of collections Unnecessary indexes Separating data that is accessed together 4Schema Design Anti-Patterns
  • 45. Unnecessary Indexes Should I create an index on every field?
  • 47. The Problem ● Indexes take up space ● Indexes can negatively impact write performance Unnecessary Indexes
  • 48. Indexes to Drop ● Rarely used indexes ● Redundant indexes Unnecessary Indexes
  • 50.
  • 51.
  • 53. Summary ● Do: Create indexes that support frequent queries Unnecessary Indexes ��
  • 54. Summary ● Do: Create indexes that support frequent queries ● Don't: Create unnecessary indexes Unnecessary Indexes �� ��
  • 55. Massive arrays Massive number of collections Unnecessary indexes Separating data that is accessed together 4Schema Design Anti-Patterns
  • 56. The Problem ● Not all document databases support joins ● Joins can be slow and resource-intensive Separating Data That is Accessed Together
  • 57. Data that is accessed together should be stored together. Separating Data That is Accessed Together
  • 58. Separating Data That is Accessed Together
  • 59. Separating Data That is Accessed Together
  • 60. Data to store ● Basic stats about each country ● List of resources that each country has available to trade ● List of delegates for each country ● Policy statements for each country { … } { … } { … } Countries { … } { … } { … } Resources { … } { … } { … } Delegates { … } { … } { … } Policies Separating Data That is Accessed Together
  • 61. Country Report ● Basic stats ● Resources available to trade ● Delegates ● Names and dates of last five policy documents Separating Data That is Accessed Together
  • 62. Separating Data That is Accessed Together
  • 63. Separating Data That is Accessed Together
  • 64. Separating Data That is Accessed Together
  • 65. Countries { "_id": "finland", "official_name": "Republic of Finland", "capital": "Helsinki", "languages": [ "Finnish", "Swedish", "Sámi" ], "population": 5528737 } Resources { "_id": ObjectId("5ef0feeb0d9314ac117d2034"), "country_id": "finland", "lions": 32563, "military_personnel": 0, "pulp": 0, "paper": 0 } Delegates { "_id": ObjectId("5ef0ff480d9314ac117d2035"), "country_id": "finland", "first_name": "Andy", "last_name": "Fryer" } { "_id": ObjectId("5ef0ff710d9314ac117d2036"), "country_id": "finland", "first_name": "Donna", "last_name": "Beagle" } Policies { "_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"), "date-created": ISODate("2011-11-09T04:00:00.000+00:00"), "status": "draft", "title": "Country Defense Policy", "country_id": "finland", "policy": "Finland has formally decided to use lions in lieu of military for all self defense..." } Separating Data That is Accessed Together
  • 66. Country Report ● Basic stats ● Resources available to trade ● Delegates ● Names and dates of last five policy documents Separating Data That is Accessed Together
  • 67. Countries { "_id": "finland", "official_name": "Republic of Finland", "capital": "Helsinki", "languages": [ "Finnish", "Swedish", "Sámi" ], "population": 5528737 } Resources { "_id": ObjectId("5ef0feeb0d9314ac117d2034"), "country_id": "finland", "lions": 32563, "military_personnel": 0, "pulp": 0, "paper": 0 } Delegates { "_id": ObjectId("5ef0ff480d9314ac117d2035"), "country_id": "finland", "first_name": "Andy", "last_name": "Fryer" } { "_id": ObjectId("5ef0ff710d9314ac117d2036"), "country_id": "finland", "first_name": "Donna", "last_name": "Beagle" } Policies { "_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"), "date-created": ISODate("2011-11-09T04:00:00.000+00:00"), "status": "draft", "title": "Country Defense Policy", "country_id": "finland", "policy": "Finland has formally decided to use lions in lieu of military for all self defense..." } Separating Data That is Accessed Together
  • 68. Resources { "_id": ObjectId("5ef0feeb0d9314ac117d2034"), "country_id": "finland", "lions": 32563, "military_personnel": 0, "pulp": 0, "paper": 0 } Countries { "_id": "finland", "official_name": "Republic of Finland", "capital": "Helsinki", "languages": [ "Finnish", "Swedish", "Sámi" ], "population": 5528737, "resources": { "lions": 32563, "military_personnel": 0, "pulp": 0, "paper": 0 } } Delegates { "_id": ObjectId("5ef0ff480d9314ac117d2035"), "country_id": "finland", "first_name": "Andy", "last_name": "Fryer" } { "_id": ObjectId("5ef0ff710d9314ac117d2036"), "country_id": "finland", "first_name": "Donna", "last_name": "Beagle" } Policies { "_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"), "date-created": ISODate("2011-11-09T04:00:00.000+00:00"), "status": "draft", "title": "Country Defense Policy", "country_id": "finland", "policy": "Finland has formally decided to use lions in lieu of military for all self defense..." } Separating Data That is Accessed Together
  • 69. Countries { "_id": "finland", "official_name": "Republic of Finland", "capital": "Helsinki", "languages": [ "Finnish", "Swedish", "Sámi" ], "population": 5528737, "resources": { "lions": 32563, "military_personnel": 0, "pulp": 0, "paper": 0 } } Delegates { "_id": ObjectId("5ef0ff480d9314ac117d2035"), "country_id": "finland", "first_name": "Andy", "last_name": "Fryer" } { "_id": ObjectId("5ef0ff710d9314ac117d2036"), "country_id": "finland", "first_name": "Donna", "last_name": "Beagle" } Policies { "_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"), "date-created": ISODate("2011-11-09T04:00:00.000+00:00"), "status": "draft", "title": "Country Defense Policy", "country_id": "finland", "policy": "Finland has formally decided to use lions in lieu of military for all self defense..." } Separating Data That is Accessed Together
  • 70. Countries { "_id": "finland", "official_name": "Republic of Finland", "capital": "Helsinki", "languages": [ "Finnish", "Swedish", "Sámi" ], "population": 5528737, "resources": { "lions": 32563, "military_personnel": 0, "pulp": 0, "paper": 0 } } Delegates { "_id": ObjectId("5ef0ff480d9314ac117d2035"), "country_id": "finland", "first_name": "Andy", "last_name": "Fryer" } { "_id": ObjectId("5ef0ff710d9314ac117d2036"), "country_id": "finland", "first_name": "Donna", "last_name": "Beagle" } Policies { "_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"), "date-created": ISODate("2011-11-09T04:00:00.000+00:00"), "status": "draft", "title": "Country Defense Policy", "country_id": "finland", "policy": "Finland has formally decided to use lions in lieu of military for all self defense..." } Separating Data That is Accessed Together
  • 71. Countries { "_id": "finland", "official_name": "Republic of Finland", "capital": "Helsinki", "languages": [ "Finnish", "Swedish", "Sámi" ], "population": 5528737, "resources": { "lions": 32563, "military_personnel": 0, "pulp": 0, "paper": 0 }, "delegates": [ { "first_name": "Andy", "last_name": "Fryer" }, { "first_name": "Donna", "last_name": "Beagle" } ] } Policies { "_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"), "date-created": ISODate("2011-11-09T04:00:00.000+00:00"), "status": "draft", "title": "Country Defense Policy", "country_id": "finland", "policy": "Finland has formally decided to use lions in lieu of military for all self defense..." } Delegates { "_id": ObjectId("5ef0ff480d9314ac117d2035"), "country_id": "finland", "first_name": "Andy", "last_name": "Fryer" } { "_id": ObjectId("5ef0ff710d9314ac117d2036"), "country_id": "finland", "first_name": "Donna", "last_name": "Beagle" } Separating Data That is Accessed Together
  • 72. Countries { "_id": "finland", "official_name": "Republic of Finland", "capital": "Helsinki", "languages": [ "Finnish", "Swedish", "Sámi" ], "population": 5528737, "resources": { "lions": 32563, "military_personnel": 0, "pulp": 0, "paper": 0 }, "delegates": [ { "first_name": "Andy", "last_name": "Fryer" }, { "first_name": "Donna", "last_name": "Beagle" } ] } Policies { "_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"), "date-created": ISODate("2011-11-09T04:00:00.000+00:00"), "status": "draft", "title": "Country Defense Policy", "country_id": "finland", "policy": "Finland has formally decided to use lions in lieu of military for all self defense..." } Separating Data That is Accessed Together
  • 73. Countries { "_id": "finland", "official_name": "Republic of Finland", "capital": "Helsinki", "languages": [ "Finnish", "Swedish", "Sámi" ], "population": 5528737, "resources": { "lions": 32563, "military_personnel": 0, "pulp": 0, "paper": 0 }, "delegates": [ { "first_name": "Andy", "last_name": "Fryer" }, { "first_name": "Donna", "last_name": "Beagle" } ] } Policies { "_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"), "date-created": ISODate("2011-11-09T04:00:00.000+00:00"), "status": "draft", "title": "Country Defense Policy", "country_id": "finland", "policy": "Finland has formally decided to use lions in lieu of military for all self defense..." } Separating Data That is Accessed Together
  • 74. Countries { "_id": "finland", "official_name": "Republic of Finland", "capital": "Helsinki", "languages": [ "Finnish", "Swedish", "Sámi" ], "population": 5528737, "resources": { "lions": 32563, "military_personnel": 0, "pulp": 0, "paper": 0 }, "delegates": [ ... ], "recent-policies": [ { "_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"), "date-created": ISODate("2011-11-09T04:00:00.000+00:00"), "title": "Country Defense Policy" }, { "_id": ObjectId("5ef357bb3e5f7febbd3ed7fd"), "date-created": ISODate("2011-11-10T04:00:00.000+00:00"), "title": "Humanitarian Food Policy" } ] } Policies { "_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"), "date-created": ISODate("2011-11-09T04:00:00.000+00:00"), "status": "draft", "title": "Country Defense Policy", "country_id": "finland", "policy": "Finland has formally decided to use lions in lieu of military for all self defense..." } Separating Data That is Accessed Together
  • 75. Countries { "_id": "finland", "official_name": "Republic of Finland", "capital": "Helsinki", "languages": [ "Finnish", "Swedish", "Sámi" ], "population": 5528737, "resources": { "lions": 32563, "military_personnel": 0, "pulp": 0, "paper": 0 }, "delegates": [ ... ], "recent-policies": [ { "_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"), "date-created": ISODate("2011-11-09T04:00:00.000+00:00"), "title": "Country Defense Policy" }, { "_id": ObjectId("5ef357bb3e5f7febbd3ed7fd"), "date-created": ISODate("2011-11-10T04:00:00.000+00:00"), "title": "Humanitarian Food Policy" } ] } Policies { "_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"), "date-created": ISODate("2011-11-09T04:00:00.000+00:00"), "status": "draft", "title": "Country Defense Policy", "country_id": "finland", "policy": "Finland has formally decided to use lions in lieu of military for all self defense..." } Separating Data That is Accessed Together
  • 76. Countries { "_id": "finland", "official_name": "Republic of Finland", "capital": "Helsinki", "languages": [ ... ], "population": 5528737, "resources": { ... }, "delegates": [ ... ], "recent-policies": [ ... ], "events": [ { "event-id": ObjectId("5ef34faa3e5f7febbd3ed7fc"), "event-date": ISODate("2011-11-10T05:00:00.000+00:00"), "topic": "Global Food Crisis" }, { "event-id": ObjectId("5ef35ac93e5f7febbd3ed7fe"), "event-date": ISODate("2012-02-18T05:00:00.000+00:00"), "topic": "Pandemic" } ] } Policies { "_id": ObjectId("5ef34ec43e5f7febbd3ed7fb"), "date-created": ISODate("2011-11-09T04:00:00.000+00:00"), "status": "draft", "title": "Country Defense Policy", "country_id": "finland", "policy": "Finland has formally decided to use lions in lieu of military for all self defense..." } Separating Data That is Accessed Together
  • 77. Summary Separating Data That is Accessed Together
  • 78. Summary ● Do: Carefully consider your use case as you design your schema Separating Data That is Accessed Together ��
  • 79. Summary ● Do: Carefully consider your use case as you design your schema ● Don't: Separate data that is accessed together Separating Data That is Accessed Together �� ��
  • 80. Massive arrays Massive number of collections Unnecessary indexes Separating data that is accessed together 4Schema Design Anti-Patterns
  • 81. Massive arrays Massive number of collections Unnecessary indexes Separating data that is accessed together
  • 82. Massive arrays Massive number of collections Unnecessary indexes Separating data that is accessed together
  • 83. Massive arrays Massive number of collections Unnecessary indexes Separating data that is accessed together
  • 84. Massive arrays Massive number of collections Unnecessary indexes Separating data that is accessed together
  • 85.
  • 86.
  • 87.
  • 88. Questions to Ask as You Model Your Data ● What data will you need to store? ● What data is likely to be accessed together? ● What queries will be run most frequently? ● What data is likely to grow at a rapid, unbounded pace?
  • 89. There is no "right" model for your data.
  • 90.