SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Back to Basics 2016 : Webinar 3
Denken in Dokumenten
Benjamin Lorenz
Senior Solutions Architect, MongoDB Frankfurt
@benjaminlorenz
V1.3
3
Kursplan
Datum Uhrzeit Webinar
31. Mai 2016 14:00 Uhr MESZ Einführung in NoSQL
16. Juni 2016 14.00 Uhr MESZ Ihre erste MongoDB-Anwendung
1. Juli 2016 14:00 Uhr MESZ Schema-Design: Denken in Dokumenten
12. Juli 2016 14:00 Uhr MESZ Indizierung für Fortgeschrittene: Text- und Geoindizes
26. Juli 2016 14:00 Uhr MESZ Einführung in das Aggregation Framework
30. August 2016 14:00 Uhr MESZ Produktivsetzung einer Anwendung
4
Rückblick
• Webinar 1: Einführung in NoSQL
– Verschiedene Typen von NoSQL-Datenbanken
– MongoDB ist eine Dokumentendatenbank
– Replica Sets und Shards
• Webinar 2: Ihre erste MongoDB-Anwendung
– Erstellen einer einfachen Anwendung
– Hinzufügen von Indizes
– Messung der Performance mit explain()
5
Denken in Dokumenten
• MongoDB-Dokumente sind Javascript-Objekte (JSON)
• Sie sind in BSON codiert
• BSON („Binary JSON“) unterstützt das effiziente Codieren
und Decodieren von JSON
• Dies ist für die effiziente Datenübertragung und
Festplattenspeicherung erforderlich
• Es macht das vollständige Parsen aller Unterobjekte
überflüssig
• Dokumentation: http://bsonspec.org/
6
Ein Beispieldokument
{
first_name: ‘Benjamin’,
surname: ‘Lorenz’,
cell: 49691234567,
city: ‘Frankfurt’,
location: [53.34,-6.26],
profession: [‘Banking’, ‘Finanzen’, ‘Trader’],
cars: [
{ model: ‘Audi’,
year: 1973,
value: 100000, … },
{ model: ‘Mercedes’,
year: 1965,
value: 330000, … }
]
}
Array aus Unterdokumenten
Felder
Jedes Feld verlangt einen
bestimmten Datentyp.
Felder können
Arrays enthalten.
7
Datenspeicherung: Key/Value-Speicher
Schlüssel 1 Wert 1
Schlüssel 1 Wert 2
Schlüssel 1 Wert 3
8
Datenspeicherung: relational
Schlüssel 1
Wert
Wert
Wert
Wert
Schlüssel 2
Wert
Wert
Wert
Wert
Schlüssel 3
Wert
Wert
Wert
Wert
Schlüssel 4
Wert
Wert
Wert
Wert
9
Datenspeicherung: dokumentenbasiert
Schlüssel 3
Schlüssel 4
Schlüssel 5
Wert 3
Wert 4
Wert 5Schlüssel 6
Wert 6Schlüssel 7
Wert 2
Wert 1Schlüssel 1
Schlüssel 1
Schlüssel 1
Schlüssel 2
10
Wie sieht das JSON-Dokument aus?
{ “key1” : “value 1” }
{ “key1” : { “key2” : “value 2”,
“key3” : { “key4” : “value 3”,
“key5” : “value 4” }
}
{ “key1” : { “key6” : “value 5”,
“key7” : “value 6” }
}
11
Beispiele für Datenbankabfragen
# Findet das erste Dokument
db.demo.find( { "key1" : "value 1" } )
# Findet das 2. Dokument
db.demo.find( { "key1.key3.key4" : "value 3" } )
# Findet das 3. Dokument
db.demo.find( { "key1.key6" : "value 5" } )
12
Modellierung und Kardinalität
• 1:1
– Ein Blogtitel / Autor pro Blogbeitrag
• 1:n
– Ein Blogbeitrag mit vielen Kommentaren
• 1:Millionen
– Ein Blogbeitrag mit sehr vielen Aufrufen
(z. B. bei blogs.faz.net)
13
1:1
{
“title” : “Dies ist ein Blogbeitrag”,
“author”:{ “nick”: “ben”, “email”: “ben@blog.net”},
“body” : “Dies ist der gesamte Text eines sehr kurzen Blogbeitrags”,
…
}
Wir können Indizes für “title”, “author.nick” und/oder “body” hinzufügen.
14
1:n
{
“title” : “Dies ist ein Blogbeitrag”,
“body” : “Dies ist der Text des Blogbeitrags”,
“comments” : [ { “name” : “Benjamin Lorenz”,
“email” : “benjamin.lorenz@mongodb.com”,
“comment” : “Sie schreiben mit Stil!” },
{ “name” : “Jan Schmidt”,
“email” : “Jan.Schmidt@beispiel.de”,
“comment” : “Ihr Schreibstil ist unterirdisch.” }]
}
Wenn nur wenige Kommentare zu erwarten sind, können diese in
das Dokument eingebettet werden.
15
Zu beachten
• Typische Schreibmuster
–Neue Kommentare werden häufiger hinzugefügt als
neue Blogbeiträge
–Kommentare können Bilder, Tags oder sehr viel Text
enthalten
• Typische Lesemuster
–Kommentare werden nicht immer angezeigt
–Sie können in einem separaten Fenster erscheinen
–Sehr wenige Leser sehen sich alle Kommentare an
16
Alternativer Ansatz: getrennte Collections
• Alle Kommentare werden in einer eigenen Collection gespeichert
• Jedem Blogbeitrag wird ein Array mit den entsprechenden Kommentar-IDs hinzugefügt
• Zwei Abfragen nötig, um einen Blogbeitrag und die dazugehörigen Kommentare anzuzeigen
• Jeder neue Kommentar erfordert zwei Schreiboperationen
Comments Collection
{
“_id” : ObjectID( “AAAA” ),
“name” : “Benjamin Lorenz”,
“email” : “benjamin.lorenz@mongodb.com”,
“comment” : “Sie schreiben mit Stil!”,
}
{
“_id” : ObjectID( “AAAB” ),
“name” : “Jan Schmidt”,
“email” : “Jan.Schmidt@beispiel.de”,
“comment” : “Ihr Schreibstil ist unterirdisch”,
}
Blogs Collection
{
“_id” : ObjectID( “ZZZZ” ),
“title” : “Ein Blogtitel”,
“body” : “Ein Blogbeitrag”,
“comments” : [ ObjectID( “AAAA” ),
ObjectID( “AAAB” )]
}
{
“_id” : ObjectID( “ZZZY” ),
“title” : “Ein Blogtitel”,
“body” : “Ein Blogbeitrag”,
“comments” : []
}
17
Dritte Variante: ein Hybridansatz
{
“_id” : ObjectID( “ZZZZ” ),
“title” : “Ein Blogtitel”,
“body” : “Ein Blogbeitrag”,
“comments” : [{
“_id” : ObjectID( “AAAA” )
“name” : “Benjamin Lorenz”,
“email” : “benjamin.lorenz@mongodb.com”,
“comment” : “Sie schreiben mit Stil!”,
}
{
_id : ObjectID( “AAAB” ),
name : “Jan Schmidt”,
email : “Jan.Schmidt@beispiel.de”,
comment : “Ihr Schreibstil ist
unterirdisch”,
}]
}
{
“_id” : ObjectID( “CCCC” ),
“_post_id” : ObjectID( “ZZZZ” ),
“comments” : [{
“_id” : ObjectID( “AAAA” )
“name” : “Benjamin Lorenz”,
“email” : “benjamin@mongodb.com”,
“comment” : “Sie schreiben mit Stil!”,
},
{...},{...},{...},{...},{...},{...},{..}
,{...},{...},{...} ]
}
{
“_id” : ObjectID( “CCCD” ),
“_post_id” : ObjectID( “ZZZZ” ),
“comments” : [...]
}
18
1:n – Wenn n in die Millionen geht
• Beispiel: Wir erfassen Mauspositionen zur Erstellung einer Heatmap
– Jeder Besucher erzeugt bei jedem Besuch Hunderte von Datensätzen
– Für jeden Blogbeitrag gibt es Tausende von Mauspositionen – Millionen
für die ganze Blog-Webseite
• Die naheliegende Option: den Ansatz umkehren
– Jede Mausposition kommt in ein separates Dokument mit Blog-ID
{
“post_id” : ObjectID(“ZZZZ”),
“timestamp” : ISODate("2016-07-01T14:38:09Z”),
“location” : [24, 34],
“click” : False
}
19
Zusammenfassen von Ereignissen pro Minute
{
post_id : ObjectID ( “ZZZZ” ),
timeStamp: ISODate("2016-07-01T14:38:00Z”),
events : [{ “location” : [24, 34], “click” : False },
{ “location” : [12, 88], “click” : True },
{...},{...},...]
}
20
Richtlinien
• Bilden Sie 1:1-Beziehungen durch eingebettete Objekte
• Berücksichtigen Sie Lese- und Schreibmuster, wenn Sie entscheiden, wie
viele Collections und Indizes Sie benötigen
• Lösen Sie sich von der Denkweise „ein Datensatz pro Objekt“
• Nutzen Sie Hierarchien
• Berücksichtigen Sie die Kardinalität
• Behalten Sie Ihre Indizes im Auge
• Aktualisierungen von Dokumenten sind Transaktionen
21
Im nächsten Webinar:
Indizierung für Fortgeschrittene: Text- und Geoindizes
• MongoDB unterstützt die Volltextindexierung und ermöglicht damit
die „Google-ähnliche“ Durchsuchung Ihrer gesamten Datenbank
• Mit Geoindizes können Sie nicht nur Geodaten speichern,
sondern auch die Entfernung zwischen zwei Punkten in Ihre
Suchvorgänge einbeziehen
12. Juli 2016, 14:00 Uhr MESZ
Back to Basics – Webinar 3: Schema-Design: Denken in Dokumenten

Weitere ähnliche Inhalte

Was ist angesagt?

Fachmodell-First: Einstieg in das NoSQL-Schema-Design
Fachmodell-First: Einstieg in das NoSQL-Schema-DesignFachmodell-First: Einstieg in das NoSQL-Schema-Design
Fachmodell-First: Einstieg in das NoSQL-Schema-DesignGregor Biswanger
 
Morphia, Spring Data & Co
Morphia, Spring Data & CoMorphia, Spring Data & Co
Morphia, Spring Data & CoTobias Trelle
 
MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-DesignMongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-DesignGregor Biswanger
 
2012-05-14 NoSQL in .NET - mit Redis und MongoDB
2012-05-14 NoSQL in .NET - mit Redis und MongoDB2012-05-14 NoSQL in .NET - mit Redis und MongoDB
2012-05-14 NoSQL in .NET - mit Redis und MongoDBJohannes Hoppe
 
2012-05-10 - UG Karlsruhe: NoSQL in .NET - mit Redis und MongoDB
2012-05-10 - UG Karlsruhe: NoSQL in .NET - mit Redis und MongoDB2012-05-10 - UG Karlsruhe: NoSQL in .NET - mit Redis und MongoDB
2012-05-10 - UG Karlsruhe: NoSQL in .NET - mit Redis und MongoDBJohannes Hoppe
 
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDBMacit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDBgedoplan
 
Einfuehrung in Elasticsearch
Einfuehrung in ElasticsearchEinfuehrung in Elasticsearch
Einfuehrung in ElasticsearchFlorian Hopf
 
Einführung in Elasticsearch
Einführung in ElasticsearchEinführung in Elasticsearch
Einführung in ElasticsearchFlorian Hopf
 
Sitzung 3
Sitzung 3Sitzung 3
Sitzung 3scuy
 
OOP 2013: Praktische Einführung in MongoDB
OOP 2013: Praktische Einführung in MongoDBOOP 2013: Praktische Einführung in MongoDB
OOP 2013: Praktische Einführung in MongoDBTobias Trelle
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBTobias Trelle
 

Was ist angesagt? (12)

Fachmodell-First: Einstieg in das NoSQL-Schema-Design
Fachmodell-First: Einstieg in das NoSQL-Schema-DesignFachmodell-First: Einstieg in das NoSQL-Schema-Design
Fachmodell-First: Einstieg in das NoSQL-Schema-Design
 
Morphia, Spring Data & Co
Morphia, Spring Data & CoMorphia, Spring Data & Co
Morphia, Spring Data & Co
 
Einführung CouchDB
Einführung CouchDBEinführung CouchDB
Einführung CouchDB
 
MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-DesignMongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
 
2012-05-14 NoSQL in .NET - mit Redis und MongoDB
2012-05-14 NoSQL in .NET - mit Redis und MongoDB2012-05-14 NoSQL in .NET - mit Redis und MongoDB
2012-05-14 NoSQL in .NET - mit Redis und MongoDB
 
2012-05-10 - UG Karlsruhe: NoSQL in .NET - mit Redis und MongoDB
2012-05-10 - UG Karlsruhe: NoSQL in .NET - mit Redis und MongoDB2012-05-10 - UG Karlsruhe: NoSQL in .NET - mit Redis und MongoDB
2012-05-10 - UG Karlsruhe: NoSQL in .NET - mit Redis und MongoDB
 
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDBMacit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
 
Einfuehrung in Elasticsearch
Einfuehrung in ElasticsearchEinfuehrung in Elasticsearch
Einfuehrung in Elasticsearch
 
Einführung in Elasticsearch
Einführung in ElasticsearchEinführung in Elasticsearch
Einführung in Elasticsearch
 
Sitzung 3
Sitzung 3Sitzung 3
Sitzung 3
 
OOP 2013: Praktische Einführung in MongoDB
OOP 2013: Praktische Einführung in MongoDBOOP 2013: Praktische Einführung in MongoDB
OOP 2013: Praktische Einführung in MongoDB
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDB
 

Ähnlich wie Back to Basics – Webinar 3: Schema-Design: Denken in Dokumenten

MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)Uwe Printz
 
Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017
Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017
Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017MongoDB
 
Jakarta EE 10: Ein erster Blick auf Eclipse JNoSQL
Jakarta EE 10: Ein erster Blick auf Eclipse JNoSQLJakarta EE 10: Ein erster Blick auf Eclipse JNoSQL
Jakarta EE 10: Ein erster Blick auf Eclipse JNoSQLgedoplan
 
"SEO Texte": So schreibst du Texte für User, die auch gefunden werden.
"SEO Texte": So schreibst du Texte für User, die auch gefunden werden. "SEO Texte": So schreibst du Texte für User, die auch gefunden werden.
"SEO Texte": So schreibst du Texte für User, die auch gefunden werden. Daniel Marx
 
5 google-doc-wiki-wissensmanagement
5 google-doc-wiki-wissensmanagement5 google-doc-wiki-wissensmanagement
5 google-doc-wiki-wissensmanagementMartin Schön
 
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerYes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerGregor Biswanger
 
Schau, Mutti, keine Programmierzeile
Schau, Mutti, keine ProgrammierzeileSchau, Mutti, keine Programmierzeile
Schau, Mutti, keine Programmierzeilerokr
 
2012-01-31 NoSQL in .NET
2012-01-31 NoSQL in .NET2012-01-31 NoSQL in .NET
2012-01-31 NoSQL in .NETJohannes Hoppe
 

Ähnlich wie Back to Basics – Webinar 3: Schema-Design: Denken in Dokumenten (10)

MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)
 
Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017
Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017
Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017
 
Einfuehrung in mongo_db_iks
Einfuehrung in mongo_db_iksEinfuehrung in mongo_db_iks
Einfuehrung in mongo_db_iks
 
Jakarta EE 10: Ein erster Blick auf Eclipse JNoSQL
Jakarta EE 10: Ein erster Blick auf Eclipse JNoSQLJakarta EE 10: Ein erster Blick auf Eclipse JNoSQL
Jakarta EE 10: Ein erster Blick auf Eclipse JNoSQL
 
"SEO Texte": So schreibst du Texte für User, die auch gefunden werden.
"SEO Texte": So schreibst du Texte für User, die auch gefunden werden. "SEO Texte": So schreibst du Texte für User, die auch gefunden werden.
"SEO Texte": So schreibst du Texte für User, die auch gefunden werden.
 
5 google-doc-wiki-wissensmanagement
5 google-doc-wiki-wissensmanagement5 google-doc-wiki-wissensmanagement
5 google-doc-wiki-wissensmanagement
 
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerYes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
 
Schau, Mutti, keine Programmierzeile
Schau, Mutti, keine ProgrammierzeileSchau, Mutti, keine Programmierzeile
Schau, Mutti, keine Programmierzeile
 
NoSQL und CouchDB
NoSQL und CouchDBNoSQL und CouchDB
NoSQL und CouchDB
 
2012-01-31 NoSQL in .NET
2012-01-31 NoSQL in .NET2012-01-31 NoSQL in .NET
2012-01-31 NoSQL in .NET
 

Mehr von MongoDB

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 AtlasMongoDB
 
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
 
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
 
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 MongoDBMongoDB
 
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
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB
 
MongoDB 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 StartMongoDB
 
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
 
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.2MongoDB
 
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
 
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
 
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 MindsetMongoDB
 
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 JumpstartMongoDB
 
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
 
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
 
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
 
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 DiveMongoDB
 
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 & GolangMongoDB
 
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
 
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
 

Mehr von MongoDB (20)

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

Back to Basics – Webinar 3: Schema-Design: Denken in Dokumenten

  • 1.
  • 2. Back to Basics 2016 : Webinar 3 Denken in Dokumenten Benjamin Lorenz Senior Solutions Architect, MongoDB Frankfurt @benjaminlorenz V1.3
  • 3. 3 Kursplan Datum Uhrzeit Webinar 31. Mai 2016 14:00 Uhr MESZ Einführung in NoSQL 16. Juni 2016 14.00 Uhr MESZ Ihre erste MongoDB-Anwendung 1. Juli 2016 14:00 Uhr MESZ Schema-Design: Denken in Dokumenten 12. Juli 2016 14:00 Uhr MESZ Indizierung für Fortgeschrittene: Text- und Geoindizes 26. Juli 2016 14:00 Uhr MESZ Einführung in das Aggregation Framework 30. August 2016 14:00 Uhr MESZ Produktivsetzung einer Anwendung
  • 4. 4 Rückblick • Webinar 1: Einführung in NoSQL – Verschiedene Typen von NoSQL-Datenbanken – MongoDB ist eine Dokumentendatenbank – Replica Sets und Shards • Webinar 2: Ihre erste MongoDB-Anwendung – Erstellen einer einfachen Anwendung – Hinzufügen von Indizes – Messung der Performance mit explain()
  • 5. 5 Denken in Dokumenten • MongoDB-Dokumente sind Javascript-Objekte (JSON) • Sie sind in BSON codiert • BSON („Binary JSON“) unterstützt das effiziente Codieren und Decodieren von JSON • Dies ist für die effiziente Datenübertragung und Festplattenspeicherung erforderlich • Es macht das vollständige Parsen aller Unterobjekte überflüssig • Dokumentation: http://bsonspec.org/
  • 6. 6 Ein Beispieldokument { first_name: ‘Benjamin’, surname: ‘Lorenz’, cell: 49691234567, city: ‘Frankfurt’, location: [53.34,-6.26], profession: [‘Banking’, ‘Finanzen’, ‘Trader’], cars: [ { model: ‘Audi’, year: 1973, value: 100000, … }, { model: ‘Mercedes’, year: 1965, value: 330000, … } ] } Array aus Unterdokumenten Felder Jedes Feld verlangt einen bestimmten Datentyp. Felder können Arrays enthalten.
  • 7. 7 Datenspeicherung: Key/Value-Speicher Schlüssel 1 Wert 1 Schlüssel 1 Wert 2 Schlüssel 1 Wert 3
  • 8. 8 Datenspeicherung: relational Schlüssel 1 Wert Wert Wert Wert Schlüssel 2 Wert Wert Wert Wert Schlüssel 3 Wert Wert Wert Wert Schlüssel 4 Wert Wert Wert Wert
  • 9. 9 Datenspeicherung: dokumentenbasiert Schlüssel 3 Schlüssel 4 Schlüssel 5 Wert 3 Wert 4 Wert 5Schlüssel 6 Wert 6Schlüssel 7 Wert 2 Wert 1Schlüssel 1 Schlüssel 1 Schlüssel 1 Schlüssel 2
  • 10. 10 Wie sieht das JSON-Dokument aus? { “key1” : “value 1” } { “key1” : { “key2” : “value 2”, “key3” : { “key4” : “value 3”, “key5” : “value 4” } } { “key1” : { “key6” : “value 5”, “key7” : “value 6” } }
  • 11. 11 Beispiele für Datenbankabfragen # Findet das erste Dokument db.demo.find( { "key1" : "value 1" } ) # Findet das 2. Dokument db.demo.find( { "key1.key3.key4" : "value 3" } ) # Findet das 3. Dokument db.demo.find( { "key1.key6" : "value 5" } )
  • 12. 12 Modellierung und Kardinalität • 1:1 – Ein Blogtitel / Autor pro Blogbeitrag • 1:n – Ein Blogbeitrag mit vielen Kommentaren • 1:Millionen – Ein Blogbeitrag mit sehr vielen Aufrufen (z. B. bei blogs.faz.net)
  • 13. 13 1:1 { “title” : “Dies ist ein Blogbeitrag”, “author”:{ “nick”: “ben”, “email”: “ben@blog.net”}, “body” : “Dies ist der gesamte Text eines sehr kurzen Blogbeitrags”, … } Wir können Indizes für “title”, “author.nick” und/oder “body” hinzufügen.
  • 14. 14 1:n { “title” : “Dies ist ein Blogbeitrag”, “body” : “Dies ist der Text des Blogbeitrags”, “comments” : [ { “name” : “Benjamin Lorenz”, “email” : “benjamin.lorenz@mongodb.com”, “comment” : “Sie schreiben mit Stil!” }, { “name” : “Jan Schmidt”, “email” : “Jan.Schmidt@beispiel.de”, “comment” : “Ihr Schreibstil ist unterirdisch.” }] } Wenn nur wenige Kommentare zu erwarten sind, können diese in das Dokument eingebettet werden.
  • 15. 15 Zu beachten • Typische Schreibmuster –Neue Kommentare werden häufiger hinzugefügt als neue Blogbeiträge –Kommentare können Bilder, Tags oder sehr viel Text enthalten • Typische Lesemuster –Kommentare werden nicht immer angezeigt –Sie können in einem separaten Fenster erscheinen –Sehr wenige Leser sehen sich alle Kommentare an
  • 16. 16 Alternativer Ansatz: getrennte Collections • Alle Kommentare werden in einer eigenen Collection gespeichert • Jedem Blogbeitrag wird ein Array mit den entsprechenden Kommentar-IDs hinzugefügt • Zwei Abfragen nötig, um einen Blogbeitrag und die dazugehörigen Kommentare anzuzeigen • Jeder neue Kommentar erfordert zwei Schreiboperationen Comments Collection { “_id” : ObjectID( “AAAA” ), “name” : “Benjamin Lorenz”, “email” : “benjamin.lorenz@mongodb.com”, “comment” : “Sie schreiben mit Stil!”, } { “_id” : ObjectID( “AAAB” ), “name” : “Jan Schmidt”, “email” : “Jan.Schmidt@beispiel.de”, “comment” : “Ihr Schreibstil ist unterirdisch”, } Blogs Collection { “_id” : ObjectID( “ZZZZ” ), “title” : “Ein Blogtitel”, “body” : “Ein Blogbeitrag”, “comments” : [ ObjectID( “AAAA” ), ObjectID( “AAAB” )] } { “_id” : ObjectID( “ZZZY” ), “title” : “Ein Blogtitel”, “body” : “Ein Blogbeitrag”, “comments” : [] }
  • 17. 17 Dritte Variante: ein Hybridansatz { “_id” : ObjectID( “ZZZZ” ), “title” : “Ein Blogtitel”, “body” : “Ein Blogbeitrag”, “comments” : [{ “_id” : ObjectID( “AAAA” ) “name” : “Benjamin Lorenz”, “email” : “benjamin.lorenz@mongodb.com”, “comment” : “Sie schreiben mit Stil!”, } { _id : ObjectID( “AAAB” ), name : “Jan Schmidt”, email : “Jan.Schmidt@beispiel.de”, comment : “Ihr Schreibstil ist unterirdisch”, }] } { “_id” : ObjectID( “CCCC” ), “_post_id” : ObjectID( “ZZZZ” ), “comments” : [{ “_id” : ObjectID( “AAAA” ) “name” : “Benjamin Lorenz”, “email” : “benjamin@mongodb.com”, “comment” : “Sie schreiben mit Stil!”, }, {...},{...},{...},{...},{...},{...},{..} ,{...},{...},{...} ] } { “_id” : ObjectID( “CCCD” ), “_post_id” : ObjectID( “ZZZZ” ), “comments” : [...] }
  • 18. 18 1:n – Wenn n in die Millionen geht • Beispiel: Wir erfassen Mauspositionen zur Erstellung einer Heatmap – Jeder Besucher erzeugt bei jedem Besuch Hunderte von Datensätzen – Für jeden Blogbeitrag gibt es Tausende von Mauspositionen – Millionen für die ganze Blog-Webseite • Die naheliegende Option: den Ansatz umkehren – Jede Mausposition kommt in ein separates Dokument mit Blog-ID { “post_id” : ObjectID(“ZZZZ”), “timestamp” : ISODate("2016-07-01T14:38:09Z”), “location” : [24, 34], “click” : False }
  • 19. 19 Zusammenfassen von Ereignissen pro Minute { post_id : ObjectID ( “ZZZZ” ), timeStamp: ISODate("2016-07-01T14:38:00Z”), events : [{ “location” : [24, 34], “click” : False }, { “location” : [12, 88], “click” : True }, {...},{...},...] }
  • 20. 20 Richtlinien • Bilden Sie 1:1-Beziehungen durch eingebettete Objekte • Berücksichtigen Sie Lese- und Schreibmuster, wenn Sie entscheiden, wie viele Collections und Indizes Sie benötigen • Lösen Sie sich von der Denkweise „ein Datensatz pro Objekt“ • Nutzen Sie Hierarchien • Berücksichtigen Sie die Kardinalität • Behalten Sie Ihre Indizes im Auge • Aktualisierungen von Dokumenten sind Transaktionen
  • 21. 21 Im nächsten Webinar: Indizierung für Fortgeschrittene: Text- und Geoindizes • MongoDB unterstützt die Volltextindexierung und ermöglicht damit die „Google-ähnliche“ Durchsuchung Ihrer gesamten Datenbank • Mit Geoindizes können Sie nicht nur Geodaten speichern, sondern auch die Entfernung zwischen zwei Punkten in Ihre Suchvorgänge einbeziehen 12. Juli 2016, 14:00 Uhr MESZ

Hinweis der Redaktion

  1. Wer bin ich, seit wann arbeite ich bei MongoDB
  2. Einfacher Index: n:m = 1:1
  3. Schlüsselkandidaten