SlideShare ist ein Scribd-Unternehmen logo
1 von 28
codecentric AG 1
MongoDB Einführung
Tobias.Trelle@codecentric.de
@tobiastrelle
codecentric AG 2
 Senior IT Consultant @ codecentric AG
 Java / JEE / EAI / RDBMS background
 Committer @ Spring Data MongoDB
 Organizer of MongoDB User Group Düsseldorf
ttrelle @tobiastrelle
codecentric AG 3
MongoDB
humongous, engl. = gigantisch, riesig
codecentric AG 4
„It‘s not my fault the chapters are
short, MongoDB is just easy to learn“
aus „The Little MongoDB book“
codecentric AG 5
MongoDB?
 NoSQL-Datenbank / Open Source
 Dokumentenorientiert
 Hochperformant, horizontal skalierbar (scale-out)
 Replication & Sharding out-of-the-box
 Map/Reduce
 Geospatial Indexes / Queries
codecentric AG 6
Grundkonzept MongoDB-Server
Server
Database
Collection
Document
Field
Tabelle
Zeile
Spalte
Relationales
Pendant Aber …
Flexibles
Schema
- Arrays
- Rekursiv
codecentric AG 7
MongoDB-Server Struktur
codecentric AG 8
MongoDB-Server: Storage
codecentric AG 9
Document
{ "_id" : ObjectId("53e3663ccb3bd259f9252f67"),
"typ" : ["gastro", "kultur"],
"name" : "Unperfekthaus",
"tags" : "uph unperfekt perfekt haus essen",
"desc" : "Im Unperfekthaus bekommen Künstler & Gründer ... ",
"adresse" : { "str" : "Friedrich-Ebert-Straße 18",
"plz" : 45127,
"ort" : "Essen"
},
"location" : { "type" : "Point",
"coordinates" : [ 7.0075, 51.45902 ]
}
}
codecentric AG 10
Document
 Document = Geordnete Menge von Key/Value-Paaren
 Key = UTF-8-String
 Value = Einfacher Datentyp | Array[Value] | Document
 Einfacher Datentyp = String
| Integer32
| Integer64
| Double
| Timestamp
…
codecentric AG 11
BSON-Format
 Dokumente werden im BSON-Format verwaltet und gespeichert
http://bsonspec.org/#/specification
 BSON = Binary JSON (!= JSON)
 Teilweise größer als JSON, aber besser traversierbar
 Keys stehen in jedem Dokument --> kurz fassen!
codecentric AG 12
BSON Beispiel
{ hello: "MongoDB" }
x18x00x00x00
x02
hellox00
x08x00x00x00MongoDBx00
x00
codecentric AG 13
CRUD = IFUR
insert(…)
find(…), findOne(…)
update(…)
remove()
codecentric AG 14
Indexe
 Primary Key auf Feld _id: 12 Byte lange ObjectId
 Bis zu 63 zusätzliche Sekundär-Indexe
 Sekundär-Index einfach oder auf bis zu 31 Feldern
 Spezielle Indexe für
 Geodaten-Suche
 Volltextsuche
codecentric AG 15
Queries
 Operieren auf Daten genau einer Collection
 Query bei Example
 db.pois.find( {"adresse.stadt": "Bochum"} )
 Aggregation
 Map/Reduce
codecentric AG 16
Geospatial Queries
 Index auf 2-dimensionalen
Koordinaten
 _id: "A", position: [0.001, -0.002]
_id: "B", position: [0.75, 0.75]
_id: "C", position: [0.5, 0.5]
_id: "D", position: [-0.5, -0.5]
 Queries basieren auf Abständen
und Shapes
 Details:
http://blog.codecentric.de/en/2012/02/spring-data-mongodb-geospatial-queries/
codecentric AG 22
MongoDB Replikation: Replica Sets
Grundprinzip
 Dynamisches Master/Slave + Auto Election
(Master = Primary, Slave = Secondary)
 Secondaries wählen automatisch neuen Primary bei Ausfall
 Writes nur auf Primary
 Reads ggfs. auch von Secondaries (Eventual Consistency)
Ziel: Ausfallsicherheit
codecentric AG 23
MongoDB Replikation: Replica Sets
codecentric AG 24
MongoDB Replikation: Replica Sets
codecentric AG 25
MongoDB Replikation: Replica Sets
WriteConcern
Gewünschte Grad an Durabilität bei Schreiboperationen
 Anzahl an Replica Set Members (n oder „majority“)
 Timeout
 Warten auf Journaling (true/false)

codecentric AG 26
MongoDB Replikation: Sharding
Grundprinzip
 Verteilung der Datenmenge auf n Knoten (Partitionierung)
 Jedes Dokument landet auf genau einem Knoten
 Zugriff über sog. ShardKey
(identifiziert Knoten für Lese- und Schreibzugriff)
Ziel: Horizontale Skalierbarkeit

codecentric AG 27
MongoDB Replikation: Sharding
Shard Key

codecentric AG 28
MongoDB Replikation: Sharding
Server-Prozesse
 Konfig-Server:
Buchhaltung von Shards
und Chunks
 Router:
Scatter/Gather bei Queries
Ziel Shard für Inserts
 Shard:
Eigentliche Datenhaltung

codecentric AG 29
MongoDB Replikation: Sharding
Produktives System

codecentric AG 30
MongoDB Replikation: Sharding
Horizontale Skalierung von Writes und Reads
 Writes treffen genau einen Shard
 Reads mit Shard Key  Subset an Shards
 Reads ohne Shard Key  Scatter/Gather auf allen Shards

codecentric AG 32
MongoDB Sharding Beispiel: Initialer Zustand
mongos> sh.status()
--- Sharding Status ---
sharding version: { "_id" : 1, "version" : 3 }
shards:
{ "_id" : "shard0000", "host" : "tmp-pc:9000" }
{ "_id" : "shard0001", "host" : "tmp-pc:9001" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "data", "partitioned" : true, "primary" : "shard0000" }
data.foo chunks:
shard0000 1
{ "age" : { $minKey : 1 } } -->> { "age" : { $maxKey : 1 } } on : shard0000 { "t" : 1000,
"i" : 0 }
2 Shards
codecentric AG 33
MongoDB Sharding Beispiel: Chunks verteilen sich
mongos> sh.status()
--- Sharding Status ---
sharding version: { "_id" : 1, "version" : 3 }
shards:
{ "_id" : "shard0000", "host" : "tmp-pc:9000" }
{ "_id" : "shard0001", "host" : "tmp-pc:9001" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "data", "partitioned" : true, "primary" : "shard0000" }
data.foo chunks:
shard0001 4
shard0000 5
{ "age" : { $minKey : 1 } } -->> { "age" : 50 } on : shard0001 { "t" : 2000, "i" : 0 }
{ "age" : 50 } -->> { "age" : 53 } on : shard0001 { "t" : 3000, "i" : 0 }
{ "age" : 53 } -->> { "age" : 54 } on : shard0001 { "t" : 4000, "i" : 0 }
{ "age" : 54 } -->> { "age" : 58 } on : shard0001 { "t" : 5000, "i" : 0 }
{ "age" : 58 } -->> { "age" : 60 } on : shard0000 { "t" : 5000, "i" : 1 }
{ "age" : 60 } -->> { "age" : 63 } on : shard0000 { "t" : 1000, "i" : 14 }
{ "age" : 63 } -->> { "age" : 65 } on : shard0000 { "t" : 1000, "i" : 11 }
{ "age" : 65 } -->> { "age" : 69 } on : shard0000 { "t" : 1000, "i" : 12 }
{ "age" : 69 } -->> { "age" : { $maxKey : 1 } } on : shard0000 { "t" : 1000, "i" : 4 }
2 Shards
Chunks
are equally
distributed
codecentric AG 34
QUESTIONS?
Tobias Trelle
codecentric AG
Merscheider Str. 1
42699 Solingen
tel +49 (0) 212.233628.47
fax +49 (0) 212.233628.79
mail Tobias.Trelle@codecentric.de
twitter @tobiastrelle
www.codecentric.de
blog.codecentric.de/en/author/tobias-trelle
www.xing.com/net/mongodb-dus

Weitere ähnliche Inhalte

Was ist angesagt?

Scalable and Available, Patterns for Success
Scalable and Available, Patterns for SuccessScalable and Available, Patterns for Success
Scalable and Available, Patterns for Success
Derek Collison
 

Was ist angesagt? (20)

Scalable and Available, Patterns for Success
Scalable and Available, Patterns for SuccessScalable and Available, Patterns for Success
Scalable and Available, Patterns for Success
 
Building large scale transactional data lake using apache hudi
Building large scale transactional data lake using apache hudiBuilding large scale transactional data lake using apache hudi
Building large scale transactional data lake using apache hudi
 
Techical Workflow for a Startup
Techical Workflow for a StartupTechical Workflow for a Startup
Techical Workflow for a Startup
 
A Technical Introduction to WiredTiger
A Technical Introduction to WiredTigerA Technical Introduction to WiredTiger
A Technical Introduction to WiredTiger
 
RxSwift to Combine
RxSwift to CombineRxSwift to Combine
RxSwift to Combine
 
Building a Real-Time Analytics Application with Apache Pulsar and Apache Pinot
Building a Real-Time Analytics Application with  Apache Pulsar and Apache PinotBuilding a Real-Time Analytics Application with  Apache Pulsar and Apache Pinot
Building a Real-Time Analytics Application with Apache Pulsar and Apache Pinot
 
Pinot: Near Realtime Analytics @ Uber
Pinot: Near Realtime Analytics @ UberPinot: Near Realtime Analytics @ Uber
Pinot: Near Realtime Analytics @ Uber
 
MongoDB Schema Design
MongoDB Schema DesignMongoDB Schema Design
MongoDB Schema Design
 
Stream Processing 과 Confluent Cloud 시작하기
Stream Processing 과 Confluent Cloud 시작하기Stream Processing 과 Confluent Cloud 시작하기
Stream Processing 과 Confluent Cloud 시작하기
 
2017 jenkins world
2017 jenkins world2017 jenkins world
2017 jenkins world
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
 
Hudi: Large-Scale, Near Real-Time Pipelines at Uber with Nishith Agarwal and ...
Hudi: Large-Scale, Near Real-Time Pipelines at Uber with Nishith Agarwal and ...Hudi: Large-Scale, Near Real-Time Pipelines at Uber with Nishith Agarwal and ...
Hudi: Large-Scale, Near Real-Time Pipelines at Uber with Nishith Agarwal and ...
 
Overview of the Eventuate Tram Customers and Orders application
Overview of the Eventuate Tram Customers and Orders applicationOverview of the Eventuate Tram Customers and Orders application
Overview of the Eventuate Tram Customers and Orders application
 
MongoDB Replica Sets
MongoDB Replica SetsMongoDB Replica Sets
MongoDB Replica Sets
 
NodeJS - Server Side JS
NodeJS - Server Side JS NodeJS - Server Side JS
NodeJS - Server Side JS
 
Angular 4 - Introdução
Angular 4 - IntroduçãoAngular 4 - Introdução
Angular 4 - Introdução
 
GitHub - Présentation
GitHub - PrésentationGitHub - Présentation
GitHub - Présentation
 
Reactive Design Patterns
Reactive Design PatternsReactive Design Patterns
Reactive Design Patterns
 
MERN PPT
MERN PPTMERN PPT
MERN PPT
 

Andere mochten auch

MongoDB - Riesige Datenmengen schemafrei verwalten
MongoDB - Riesige Datenmengen schemafrei verwaltenMongoDB - Riesige Datenmengen schemafrei verwalten
MongoDB - Riesige Datenmengen schemafrei verwalten
Tobias Trelle
 
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
MongoDB
 
Ewert: Der Titelschutz – Ein unterschätztes Recht
Ewert: Der Titelschutz – Ein unterschätztes RechtEwert: Der Titelschutz – Ein unterschätztes Recht
Ewert: Der Titelschutz – Ein unterschätztes Recht
Raabe Verlag
 
Brox, Lenke: Die Gesellschaft bürgerlichen Rechts – Teil 1. Gesetzlicher Rahm...
Brox, Lenke: Die Gesellschaft bürgerlichen Rechts – Teil 1. Gesetzlicher Rahm...Brox, Lenke: Die Gesellschaft bürgerlichen Rechts – Teil 1. Gesetzlicher Rahm...
Brox, Lenke: Die Gesellschaft bürgerlichen Rechts – Teil 1. Gesetzlicher Rahm...
Raabe Verlag
 
Dr. Stephan Frucht: Kooperative Kulturförderung
Dr. Stephan Frucht: Kooperative KulturförderungDr. Stephan Frucht: Kooperative Kulturförderung
Dr. Stephan Frucht: Kooperative Kulturförderung
Raabe Verlag
 
Pengumuman tes tulis rsu kumala siwi kudus3
Pengumuman tes tulis rsu kumala siwi kudus3Pengumuman tes tulis rsu kumala siwi kudus3
Pengumuman tes tulis rsu kumala siwi kudus3
Rahmat Kafidzin
 
Praxisbeispiel: Kampagnentracking mit Brandwatch
Praxisbeispiel: Kampagnentracking mit BrandwatchPraxisbeispiel: Kampagnentracking mit Brandwatch
Praxisbeispiel: Kampagnentracking mit Brandwatch
Brandwatch GmbH
 
01 klageschrift br_vs_eu-kommission_2012-04-27
01 klageschrift br_vs_eu-kommission_2012-04-2701 klageschrift br_vs_eu-kommission_2012-04-27
01 klageschrift br_vs_eu-kommission_2012-04-27
barbrasworld
 
Darren Grundorf: Was tut der Bund für die Kulturwirtschaft?
Darren Grundorf: Was tut der Bund für die Kulturwirtschaft?Darren Grundorf: Was tut der Bund für die Kulturwirtschaft?
Darren Grundorf: Was tut der Bund für die Kulturwirtschaft?
Raabe Verlag
 
Agile Happiness - Macht agiles Vorgehen glücklich?
Agile Happiness - Macht agiles Vorgehen glücklich?Agile Happiness - Macht agiles Vorgehen glücklich?
Agile Happiness - Macht agiles Vorgehen glücklich?
Rolf Dräther
 
Dr. Tilo Gerlach: Leistungsschutzrechte der ausübenden Künstler und Tonträger...
Dr. Tilo Gerlach: Leistungsschutzrechte der ausübenden Künstler und Tonträger...Dr. Tilo Gerlach: Leistungsschutzrechte der ausübenden Künstler und Tonträger...
Dr. Tilo Gerlach: Leistungsschutzrechte der ausübenden Künstler und Tonträger...
Raabe Verlag
 
Presentatie Van Alle Werken Klein3
Presentatie Van Alle Werken Klein3Presentatie Van Alle Werken Klein3
Presentatie Van Alle Werken Klein3
ontworpenbv
 

Andere mochten auch (20)

MongoDB - Riesige Datenmengen schemafrei verwalten
MongoDB - Riesige Datenmengen schemafrei verwaltenMongoDB - Riesige Datenmengen schemafrei verwalten
MongoDB - Riesige Datenmengen schemafrei verwalten
 
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
 
MongoDB für Java-Programmierer
MongoDB für Java-ProgrammiererMongoDB für Java-Programmierer
MongoDB für Java-Programmierer
 
Ewert: Der Titelschutz – Ein unterschätztes Recht
Ewert: Der Titelschutz – Ein unterschätztes RechtEwert: Der Titelschutz – Ein unterschätztes Recht
Ewert: Der Titelschutz – Ein unterschätztes Recht
 
Brox, Lenke: Die Gesellschaft bürgerlichen Rechts – Teil 1. Gesetzlicher Rahm...
Brox, Lenke: Die Gesellschaft bürgerlichen Rechts – Teil 1. Gesetzlicher Rahm...Brox, Lenke: Die Gesellschaft bürgerlichen Rechts – Teil 1. Gesetzlicher Rahm...
Brox, Lenke: Die Gesellschaft bürgerlichen Rechts – Teil 1. Gesetzlicher Rahm...
 
Binder6
Binder6Binder6
Binder6
 
Dr. Stephan Frucht: Kooperative Kulturförderung
Dr. Stephan Frucht: Kooperative KulturförderungDr. Stephan Frucht: Kooperative Kulturförderung
Dr. Stephan Frucht: Kooperative Kulturförderung
 
Googleitis 311209
Googleitis 311209Googleitis 311209
Googleitis 311209
 
Weltreise silvester2011
Weltreise silvester2011Weltreise silvester2011
Weltreise silvester2011
 
Schuck 2011
Schuck 2011Schuck 2011
Schuck 2011
 
Pengumuman tes tulis rsu kumala siwi kudus3
Pengumuman tes tulis rsu kumala siwi kudus3Pengumuman tes tulis rsu kumala siwi kudus3
Pengumuman tes tulis rsu kumala siwi kudus3
 
Praxisbeispiel: Kampagnentracking mit Brandwatch
Praxisbeispiel: Kampagnentracking mit BrandwatchPraxisbeispiel: Kampagnentracking mit Brandwatch
Praxisbeispiel: Kampagnentracking mit Brandwatch
 
01 klageschrift br_vs_eu-kommission_2012-04-27
01 klageschrift br_vs_eu-kommission_2012-04-2701 klageschrift br_vs_eu-kommission_2012-04-27
01 klageschrift br_vs_eu-kommission_2012-04-27
 
Darren Grundorf: Was tut der Bund für die Kulturwirtschaft?
Darren Grundorf: Was tut der Bund für die Kulturwirtschaft?Darren Grundorf: Was tut der Bund für die Kulturwirtschaft?
Darren Grundorf: Was tut der Bund für die Kulturwirtschaft?
 
David Scherer: Crowdfunding im Social Web
David Scherer: Crowdfunding im Social WebDavid Scherer: Crowdfunding im Social Web
David Scherer: Crowdfunding im Social Web
 
Agile Happiness - Macht agiles Vorgehen glücklich?
Agile Happiness - Macht agiles Vorgehen glücklich?Agile Happiness - Macht agiles Vorgehen glücklich?
Agile Happiness - Macht agiles Vorgehen glücklich?
 
Dr. Tilo Gerlach: Leistungsschutzrechte der ausübenden Künstler und Tonträger...
Dr. Tilo Gerlach: Leistungsschutzrechte der ausübenden Künstler und Tonträger...Dr. Tilo Gerlach: Leistungsschutzrechte der ausübenden Künstler und Tonträger...
Dr. Tilo Gerlach: Leistungsschutzrechte der ausübenden Künstler und Tonträger...
 
2013 v passau_neuberger
2013 v passau_neuberger2013 v passau_neuberger
2013 v passau_neuberger
 
Online-Journalismus ?
Online-Journalismus ?Online-Journalismus ?
Online-Journalismus ?
 
Presentatie Van Alle Werken Klein3
Presentatie Van Alle Werken Klein3Presentatie Van Alle Werken Klein3
Presentatie Van Alle Werken Klein3
 

Ähnlich wie MongoDB Einführung

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
Johannes Hoppe
 
Elasticsearch und Big Data - Webinar vom 23.07.2014
Elasticsearch und Big Data - Webinar vom 23.07.2014Elasticsearch und Big Data - Webinar vom 23.07.2014
Elasticsearch und Big Data - Webinar vom 23.07.2014
inovex GmbH
 

Ähnlich wie MongoDB Einführung (20)

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
 
Back to Basics – Webinar 4: Fortschrittliche Indizierung, Text- und Geoindizes
Back to Basics – Webinar 4: Fortschrittliche Indizierung, Text- und GeoindizesBack to Basics – Webinar 4: Fortschrittliche Indizierung, Text- und Geoindizes
Back to Basics – Webinar 4: Fortschrittliche Indizierung, Text- und Geoindizes
 
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 German 2: Erstellen Sie Ihre erste Anwendung in MongoDB
Back to Basics German 2: Erstellen Sie Ihre erste Anwendung in MongoDBBack to Basics German 2: Erstellen Sie Ihre erste Anwendung in MongoDB
Back to Basics German 2: Erstellen Sie Ihre erste Anwendung in MongoDB
 
Back to Basics-Webinar 5: Einführung in das Aggregation-Framework
Back to Basics-Webinar 5: Einführung in das Aggregation-FrameworkBack to Basics-Webinar 5: Einführung in das Aggregation-Framework
Back to Basics-Webinar 5: Einführung in das Aggregation-Framework
 
Back to Basics – Webinar 2: Ihre erste MongoDB-Anwendung
Back to Basics – Webinar 2: Ihre erste MongoDB-AnwendungBack to Basics – Webinar 2: Ihre erste MongoDB-Anwendung
Back to Basics – Webinar 2: Ihre erste MongoDB-Anwendung
 
Einführung in Elasticsearch
Einführung in ElasticsearchEinführung in Elasticsearch
Einführung in Elasticsearch
 
OSMC 2021 | SNMP Monitoring mit Prometheus / OIDs dynamisch auswählen und im ...
OSMC 2021 | SNMP Monitoring mit Prometheus / OIDs dynamisch auswählen und im ...OSMC 2021 | SNMP Monitoring mit Prometheus / OIDs dynamisch auswählen und im ...
OSMC 2021 | SNMP Monitoring mit Prometheus / OIDs dynamisch auswählen und im ...
 
SysDig Metriken zentralisieren
SysDig Metriken zentralisierenSysDig Metriken zentralisieren
SysDig Metriken zentralisieren
 
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
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDB
 
Service Mesh mit Istio und MicroProfile - eine harmonische Kombination?
Service Mesh mit Istio und MicroProfile - eine harmonische Kombination?Service Mesh mit Istio und MicroProfile - eine harmonische Kombination?
Service Mesh mit Istio und MicroProfile - eine harmonische Kombination?
 
Elasticsearch und Big Data - Webinar vom 23.07.2014
Elasticsearch und Big Data - Webinar vom 23.07.2014Elasticsearch und Big Data - Webinar vom 23.07.2014
Elasticsearch und Big Data - Webinar vom 23.07.2014
 
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin GrauelOSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
 
Java Streams und Lambdas
Java Streams und LambdasJava Streams und Lambdas
Java Streams und Lambdas
 
Einfuehrung in Elasticsearch
Einfuehrung in ElasticsearchEinfuehrung in Elasticsearch
Einfuehrung in Elasticsearch
 
Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...
Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...
Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...
 
Einführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenEinführung in NoSQL-Datenbanken
Einführung in NoSQL-Datenbanken
 
Übersetzen alter Arcade-Spiele in JavaScript
Übersetzen alter Arcade-Spiele in JavaScriptÜbersetzen alter Arcade-Spiele in JavaScript
Übersetzen alter Arcade-Spiele in JavaScript
 

Mehr von Tobias Trelle

Morphia, Spring Data & Co
Morphia, Spring Data & CoMorphia, Spring Data & Co
Morphia, Spring Data & Co
Tobias Trelle
 
BedCon 2013 - Java Persistenz-Frameworks für MongoDB
BedCon 2013 - Java Persistenz-Frameworks für MongoDBBedCon 2013 - Java Persistenz-Frameworks für MongoDB
BedCon 2013 - Java Persistenz-Frameworks für MongoDB
Tobias Trelle
 

Mehr von Tobias Trelle (10)

TDD mit JUnit und Mockito
TDD mit JUnit und MockitoTDD mit JUnit und Mockito
TDD mit JUnit und Mockito
 
NoSQL - Einführung in Graphen-Datenbanken mit Neo4j
NoSQL - Einführung in Graphen-Datenbanken mit Neo4jNoSQL - Einführung in Graphen-Datenbanken mit Neo4j
NoSQL - Einführung in Graphen-Datenbanken mit Neo4j
 
Test Automation for NoSQL Databases
Test Automation for NoSQL DatabasesTest Automation for NoSQL Databases
Test Automation for NoSQL Databases
 
Morphia, Spring Data & Co
Morphia, Spring Data & CoMorphia, Spring Data & Co
Morphia, Spring Data & Co
 
Spring Data, Jongo & Co.
Spring Data, Jongo & Co.Spring Data, Jongo & Co.
Spring Data, Jongo & Co.
 
Morphia, Spring Data & Co.
Morphia, Spring Data & Co.Morphia, Spring Data & Co.
Morphia, Spring Data & Co.
 
An introduction to MongoDB and Ruby
An introduction to MongoDB and RubyAn introduction to MongoDB and Ruby
An introduction to MongoDB and Ruby
 
BedCon 2013 - Java Persistenz-Frameworks für MongoDB
BedCon 2013 - Java Persistenz-Frameworks für MongoDBBedCon 2013 - Java Persistenz-Frameworks für MongoDB
BedCon 2013 - Java Persistenz-Frameworks für MongoDB
 
Java Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDBJava Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDB
 
MongoDB Live Hacking
MongoDB Live HackingMongoDB Live Hacking
MongoDB Live Hacking
 

MongoDB Einführung

  • 1. codecentric AG 1 MongoDB Einführung Tobias.Trelle@codecentric.de @tobiastrelle
  • 2. codecentric AG 2  Senior IT Consultant @ codecentric AG  Java / JEE / EAI / RDBMS background  Committer @ Spring Data MongoDB  Organizer of MongoDB User Group Düsseldorf ttrelle @tobiastrelle
  • 3. codecentric AG 3 MongoDB humongous, engl. = gigantisch, riesig
  • 4. codecentric AG 4 „It‘s not my fault the chapters are short, MongoDB is just easy to learn“ aus „The Little MongoDB book“
  • 5. codecentric AG 5 MongoDB?  NoSQL-Datenbank / Open Source  Dokumentenorientiert  Hochperformant, horizontal skalierbar (scale-out)  Replication & Sharding out-of-the-box  Map/Reduce  Geospatial Indexes / Queries
  • 6. codecentric AG 6 Grundkonzept MongoDB-Server Server Database Collection Document Field Tabelle Zeile Spalte Relationales Pendant Aber … Flexibles Schema - Arrays - Rekursiv
  • 9. codecentric AG 9 Document { "_id" : ObjectId("53e3663ccb3bd259f9252f67"), "typ" : ["gastro", "kultur"], "name" : "Unperfekthaus", "tags" : "uph unperfekt perfekt haus essen", "desc" : "Im Unperfekthaus bekommen Künstler & Gründer ... ", "adresse" : { "str" : "Friedrich-Ebert-Straße 18", "plz" : 45127, "ort" : "Essen" }, "location" : { "type" : "Point", "coordinates" : [ 7.0075, 51.45902 ] } }
  • 10. codecentric AG 10 Document  Document = Geordnete Menge von Key/Value-Paaren  Key = UTF-8-String  Value = Einfacher Datentyp | Array[Value] | Document  Einfacher Datentyp = String | Integer32 | Integer64 | Double | Timestamp …
  • 11. codecentric AG 11 BSON-Format  Dokumente werden im BSON-Format verwaltet und gespeichert http://bsonspec.org/#/specification  BSON = Binary JSON (!= JSON)  Teilweise größer als JSON, aber besser traversierbar  Keys stehen in jedem Dokument --> kurz fassen!
  • 12. codecentric AG 12 BSON Beispiel { hello: "MongoDB" } x18x00x00x00 x02 hellox00 x08x00x00x00MongoDBx00 x00
  • 13. codecentric AG 13 CRUD = IFUR insert(…) find(…), findOne(…) update(…) remove()
  • 14. codecentric AG 14 Indexe  Primary Key auf Feld _id: 12 Byte lange ObjectId  Bis zu 63 zusätzliche Sekundär-Indexe  Sekundär-Index einfach oder auf bis zu 31 Feldern  Spezielle Indexe für  Geodaten-Suche  Volltextsuche
  • 15. codecentric AG 15 Queries  Operieren auf Daten genau einer Collection  Query bei Example  db.pois.find( {"adresse.stadt": "Bochum"} )  Aggregation  Map/Reduce
  • 16. codecentric AG 16 Geospatial Queries  Index auf 2-dimensionalen Koordinaten  _id: "A", position: [0.001, -0.002] _id: "B", position: [0.75, 0.75] _id: "C", position: [0.5, 0.5] _id: "D", position: [-0.5, -0.5]  Queries basieren auf Abständen und Shapes  Details: http://blog.codecentric.de/en/2012/02/spring-data-mongodb-geospatial-queries/
  • 17. codecentric AG 22 MongoDB Replikation: Replica Sets Grundprinzip  Dynamisches Master/Slave + Auto Election (Master = Primary, Slave = Secondary)  Secondaries wählen automatisch neuen Primary bei Ausfall  Writes nur auf Primary  Reads ggfs. auch von Secondaries (Eventual Consistency) Ziel: Ausfallsicherheit
  • 18. codecentric AG 23 MongoDB Replikation: Replica Sets
  • 19. codecentric AG 24 MongoDB Replikation: Replica Sets
  • 20. codecentric AG 25 MongoDB Replikation: Replica Sets WriteConcern Gewünschte Grad an Durabilität bei Schreiboperationen  Anzahl an Replica Set Members (n oder „majority“)  Timeout  Warten auf Journaling (true/false) 
  • 21. codecentric AG 26 MongoDB Replikation: Sharding Grundprinzip  Verteilung der Datenmenge auf n Knoten (Partitionierung)  Jedes Dokument landet auf genau einem Knoten  Zugriff über sog. ShardKey (identifiziert Knoten für Lese- und Schreibzugriff) Ziel: Horizontale Skalierbarkeit 
  • 22. codecentric AG 27 MongoDB Replikation: Sharding Shard Key 
  • 23. codecentric AG 28 MongoDB Replikation: Sharding Server-Prozesse  Konfig-Server: Buchhaltung von Shards und Chunks  Router: Scatter/Gather bei Queries Ziel Shard für Inserts  Shard: Eigentliche Datenhaltung 
  • 24. codecentric AG 29 MongoDB Replikation: Sharding Produktives System 
  • 25. codecentric AG 30 MongoDB Replikation: Sharding Horizontale Skalierung von Writes und Reads  Writes treffen genau einen Shard  Reads mit Shard Key  Subset an Shards  Reads ohne Shard Key  Scatter/Gather auf allen Shards 
  • 26. codecentric AG 32 MongoDB Sharding Beispiel: Initialer Zustand mongos> sh.status() --- Sharding Status --- sharding version: { "_id" : 1, "version" : 3 } shards: { "_id" : "shard0000", "host" : "tmp-pc:9000" } { "_id" : "shard0001", "host" : "tmp-pc:9001" } databases: { "_id" : "admin", "partitioned" : false, "primary" : "config" } { "_id" : "data", "partitioned" : true, "primary" : "shard0000" } data.foo chunks: shard0000 1 { "age" : { $minKey : 1 } } -->> { "age" : { $maxKey : 1 } } on : shard0000 { "t" : 1000, "i" : 0 } 2 Shards
  • 27. codecentric AG 33 MongoDB Sharding Beispiel: Chunks verteilen sich mongos> sh.status() --- Sharding Status --- sharding version: { "_id" : 1, "version" : 3 } shards: { "_id" : "shard0000", "host" : "tmp-pc:9000" } { "_id" : "shard0001", "host" : "tmp-pc:9001" } databases: { "_id" : "admin", "partitioned" : false, "primary" : "config" } { "_id" : "data", "partitioned" : true, "primary" : "shard0000" } data.foo chunks: shard0001 4 shard0000 5 { "age" : { $minKey : 1 } } -->> { "age" : 50 } on : shard0001 { "t" : 2000, "i" : 0 } { "age" : 50 } -->> { "age" : 53 } on : shard0001 { "t" : 3000, "i" : 0 } { "age" : 53 } -->> { "age" : 54 } on : shard0001 { "t" : 4000, "i" : 0 } { "age" : 54 } -->> { "age" : 58 } on : shard0001 { "t" : 5000, "i" : 0 } { "age" : 58 } -->> { "age" : 60 } on : shard0000 { "t" : 5000, "i" : 1 } { "age" : 60 } -->> { "age" : 63 } on : shard0000 { "t" : 1000, "i" : 14 } { "age" : 63 } -->> { "age" : 65 } on : shard0000 { "t" : 1000, "i" : 11 } { "age" : 65 } -->> { "age" : 69 } on : shard0000 { "t" : 1000, "i" : 12 } { "age" : 69 } -->> { "age" : { $maxKey : 1 } } on : shard0000 { "t" : 1000, "i" : 4 } 2 Shards Chunks are equally distributed
  • 28. codecentric AG 34 QUESTIONS? Tobias Trelle codecentric AG Merscheider Str. 1 42699 Solingen tel +49 (0) 212.233628.47 fax +49 (0) 212.233628.79 mail Tobias.Trelle@codecentric.de twitter @tobiastrelle www.codecentric.de blog.codecentric.de/en/author/tobias-trelle www.xing.com/net/mongodb-dus

Hinweis der Redaktion

  1. 3
  2. Was ist „Soft State“?
  3. Was ist „Soft State“?
  4. Was ist „Soft State“?
  5. Was ist „Soft State“?
  6. Was ist „Soft State“?
  7. Was ist „Soft State“?
  8. Was ist „Soft State“?
  9. Was ist „Soft State“?
  10. Was ist „Soft State“?
  11. Was ist „Soft State“?
  12. Was ist „Soft State“?
  13. Was ist „Soft State“?
  14. Was ist „Soft State“?
  15. Was ist „Soft State“?
  16. Was ist „Soft State“?
  17. Was ist „Soft State“?
  18. Was ist „Soft State“?
  19. Was ist „Soft State“?
  20. Was ist „Soft State“?
  21. Was ist „Soft State“?
  22. Was ist „Soft State“?
  23. Was ist „Soft State“?
  24. Was ist „Soft State“?
  25. Was ist „Soft State“?