OOP 2013:Praktische Einführung in MongoDBtobias.trelle@codecentric.de@tobiastrelle codecentric AG                1
Tobias Trelle                 -   Senior IT Consultant codecentric AG                 -   MongoDB User-Gruppe Düsseldorf  ...
„It‘s not my fault the chapters areshort, MongoDB is just easy to learn“      aus „The Little MongoDB book“codecentric AG ...
MongoDB?                 „humongous“ = gigantisch,                      wahnsinnig groß                  http://www.mongod...
MongoDB?      NoSQL-Datenbank      Dokumenten-orientiert      Hochperformant, horizontal skalierbar (scale-out)      Repli...
Grundkonzept MongoDB-Server                               ServerRelationales                              DatabasePendant ...
Document{      title: „Praxisbuch Mongo“,      version: 0.1,      copies_sold: 0,      authors: [         { name: „Uwe Sei...
Document      Document = Geordnete Menge von Key/Value-Paaren      Key = UTF-8-String      Value = Einfacher Datentyp | Ar...
BSON-Format      Dokumente werden im BSON-Format verwaltet und gespeichert      http://bsonspec.org/#/specification      B...
BSON Beispiel{ hello: "MongoDB" }x18x00x00x00   x02       hellox00       x08x00x00x00MongoDBx00x00codecentric AG   10
Live Session      CRUD Operations           Replication      Queries                   Sharding      Geospatial Queries   ...
CRUD = IFUR                 insert(…)                 find(…), findOne(…)                 update(…)                 remove...
Geospatial Queries      Index auf 2-dimensionalen      Koordinaten      _id: "A", position: [0.001, -0.002]      _id: "B",...
Map/Reduce      Algorithmus/Framework für Berechnungen auf      Datenmengen basierend auf zwei Phasen:      Map & Reduce  ...
Map/Reduce mit MongoDB      Wird auf einer Untermenge / allen Dokumenten einer      Collection ausgeführt      Map / Reduc...
Map/Reduce Beispiel                                                                           Map output:      Aufgabe: Vo...
Aggregation Framework      Seit Version 2.2      Alternative zu Map/Reduce      db.docs.aggregate(          {$project:{_id...
MongoDB Replikation: Replica Sets      Grundprinzip: Master/Slave + Election      Writes nur auf den Master, Reads ggfs. a...
MongoDB Sharding      Fragmentierung der Daten auf n Sharding-Knoten,      jedes Dokument wird einmal persistiert      Con...
MongoDB Produktion: Sharding + Replica Sets                     Node 1                Node 2           Node 3             ...
MongoDB Sharding Beispiel: Initialer Zustandmongos> sh.status()--- Sharding Status ---   sharding version: { "_id" : 1, "v...
MongoDB Sharding Beispiel: Chunks verteilen sichmongos> sh.status()--- Sharding Status ---   sharding version: { "_id" : 1...
MongoDB Treiber        Ein Wire-Protokoll für alle Client-Sprachen        Pro Sprache ein Treiber      Übersicht:      htt...
MongoDB TreiberBeispiele Sprache            Struktur JavaScript, Python {“hello": “MongoDB" } Ruby, Perl         {“hello" ...
MongoDB TreibersWesentliche Aufgaben eines Treibers      Konvertierung der sprachabh. Datenstrukturen        BSON-Format...
MongoDB Java-Treiber      Einzelnes JAR ohne weitere Abhängigkeiten      <dependency>         <groupId>org.mongodb</groupI...
Spring Data MongoDB                                              Spring Data                                  CrudReposito...
Spring Data MongoDBTemplate     Abstraktion vom MongoDB Java Driver     Konfiguration von mongod / mongos-Instanzen und Co...
MongoDB User-Gruppen (MUGs)MongoDB User-Gruppe Düsseldorf           MongoDB User-Gruppe Berlinhttps://www.xing.com/net/mon...
QUESTION?Tobias Trellecodecentric AGMerscheider Str. 142699 Solingentel              +49 (0) 212.233628.47fax             ...
Upcoming SlideShare
Loading in...5
×

OOP 2013: Praktische Einführung in MongoDB

1,986

Published on

OOP 2013:
Praktische Einführung in MongoDB

Tobias Trelle
@tobiastrelle

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,986
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

OOP 2013: Praktische Einführung in MongoDB

  1. 1. OOP 2013:Praktische Einführung in MongoDBtobias.trelle@codecentric.de@tobiastrelle codecentric AG 1
  2. 2. Tobias Trelle - Senior IT Consultant codecentric AG - MongoDB User-Gruppe Düsseldorf - MongoDB-Buchcodecentric AG 2
  3. 3. „It‘s not my fault the chapters areshort, MongoDB is just easy to learn“ aus „The Little MongoDB book“codecentric AG 3
  4. 4. MongoDB? „humongous“ = gigantisch, wahnsinnig groß http://www.mongodb.orgcodecentric AG 4
  5. 5. MongoDB? NoSQL-Datenbank Dokumenten-orientiert Hochperformant, horizontal skalierbar (scale-out) Replication & Sharding out-of-the-box Map/Reduce Geospatial Indexes / Queriescodecentric AG 5
  6. 6. Grundkonzept MongoDB-Server ServerRelationales DatabasePendant Aber … Flexibles Tabelle Collection Schema Zeile Document - Arrays Spalte Field - Rekursivcodecentric AG 6
  7. 7. Document{ title: „Praxisbuch Mongo“, version: 0.1, copies_sold: 0, authors: [ { name: „Uwe Seiler“, email: „uwe.seiler@codecentric.de“ }, { name: „Tobias Trelle“, email: „tobias.trelle@codecentric.de“} ]}codecentric AG 7
  8. 8. 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 8
  9. 9. 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 9
  10. 10. BSON Beispiel{ hello: "MongoDB" }x18x00x00x00 x02 hellox00 x08x00x00x00MongoDBx00x00codecentric AG 10
  11. 11. Live Session CRUD Operations Replication Queries Sharding Geospatial Queries MongoDB Java Driver & Spring Data MongoDB Map/Reducecodecentric AG 11
  12. 12. CRUD = IFUR insert(…) find(…), findOne(…) update(…) remove()codecentric AG 12
  13. 13. 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 13
  14. 14. Map/Reduce Algorithmus/Framework für Berechnungen auf Datenmengen basierend auf zwei Phasen: Map & Reduce Die Map-Phase kann nebenläufig und verteilt (im Cluster) auf großen Datenmengen (Petabytes) ausgeführt werden Apache Hadoopcodecentric AG 14
  15. 15. Map/Reduce mit MongoDB Wird auf einer Untermenge / allen Dokumenten einer Collection ausgeführt Map / Reduce-Funktionen sind in JavaScript implementiert Ergebnisse sind Dokumente in einer Ziel-Collectioncodecentric AG 15
  16. 16. Map/Reduce Beispiel Map output: Aufgabe: Vorkommen von Tags zählen: key = „cc“, value = 1 key = „mongodb“, value = 1 {name: „Doc 1“, tags: [ „cc“, „mongodb“, „nosql“ ] } key = „nosql“, value = 1 {name: „Doc 2“, tags: [ „cc“, „agile“ ] } {name: „Doc 3“, tags: [ „cc“, „nosql“ ] } key = „cc“, value = 1 key = „agile“, value = 1 map = function() { this.tags.forEach( function(tag) { key = „cc“, value = 1 emit( tag, 1 ); key = „nosql“, value = 1 }) } reduce = function(key, values) { return values.length; Reduce input: } key = „cc“, values = [ 1, 1, 1 ] key = „mongodb“, values = [ 1 ] key = „nosql“, values = [ 1,1 ] key = „agile“, values = [ 1 ]codecentric AG 16
  17. 17. Aggregation Framework Seit Version 2.2 Alternative zu Map/Reduce db.docs.aggregate( {$project:{_id:0,tags:1}}, {$unwind: "$tags"}, {$group:{_id:"$tags", n:{$sum:1}}} )codecentric AG 17
  18. 18. MongoDB Replikation: Replica Sets Grundprinzip: Master/Slave + Election Writes nur auf den Master, Reads ggfs. auch von Slaves Slaves wählen automatisch neuen Master bei Ausfall Replica Set, n = 3 Secondary 1 Client Primary Secondary 2codecentric AG 18
  19. 19. MongoDB Sharding Fragmentierung der Daten auf n Sharding-Knoten, jedes Dokument wird einmal persistiert Config Server = Buchhalter für Meta-Daten Switch: Gateway Sharding Setup für die Clients Config Shard 1 Server Client Switch Shard 2codecentric AG 19
  20. 20. MongoDB Produktion: Sharding + Replica Sets Node 1 Node 2 Node 3 <<Config>> <<Config>> <<Config>> mongod mongod mongod <<Primary>> <<Secondary>> << Secondary >> Shard 1 mongod mongod mongod << Secondary >> <<Primary>> << Secondary >> Shard 2 mongod mongod mongod <<Switch>> <<Switch>> <<Switch>> mongos mongos mongos App Server App Server App Servercodecentric AG 20
  21. 21. MongoDB Sharding Beispiel: Initialer Zustandmongos> sh.status()--- Sharding Status --- sharding version: { "_id" : 1, "version" : 3 } shards: 2 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 }codecentric AG 21
  22. 22. MongoDB Sharding Beispiel: Chunks verteilen sichmongos> sh.status()--- Sharding Status --- sharding version: { "_id" : 1, "version" : 3 } shards: 2 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 Chunks { "age" : { $minKey : 1 } } -->> { "age" : 50 } on : shard0001 { "t" : 2000, "i" : 0 } are equally distributed { "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 }codecentric AG 22
  23. 23. MongoDB Treiber Ein Wire-Protokoll für alle Client-Sprachen Pro Sprache ein Treiber Übersicht: http://www.mongodb.org/display/DOCS/Driverscodecentric AG 23
  24. 24. MongoDB TreiberBeispiele Sprache Struktur JavaScript, Python {“hello": “MongoDB" } Ruby, Perl {“hello" => “MongoDB" } C++ BSONObj p = BSON(“hello" << “MongoDB"); Java DBObject obj = new BasicDBObject(); obj.put(“hello", “MongoDB");codecentric AG 24
  25. 25. MongoDB TreibersWesentliche Aufgaben eines Treibers Konvertierung der sprachabh. Datenstrukturen   BSON-Format Generierung der _id-Werte Treiber macht möglichst viel, um Server zu entlastencodecentric AG 25
  26. 26. MongoDB Java-Treiber Einzelnes JAR ohne weitere Abhängigkeiten <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.10.0</version> </dependency> github: https://github.com/mongodb/mongo-java-drivercodecentric AG 26
  27. 27. Spring Data MongoDB Spring Data CrudRepository PagingAndSortingRepository Spring Data Spring Data Spring Data Spring Data JPA MongoDB Neo4j … JpaRepository MongoRepository GraphRepository MongoTemplate Neo4jTemplate Embedded REST JPA Mongo Java Driver JDBC RDBMS MongoDB Neo4j …codecentric AG 27
  28. 28. Spring Data MongoDBTemplate Abstraktion vom MongoDB Java Driver Konfiguration von mongod / mongos-Instanzen und Collections Verwaltung von Collections Map/Reduce-AufrufeObject Mapping Annotationen @Document, @Field, @Index etc. Klassen werden auf Collections abgebildet, Java-Objekte auf DokumenteRepository Support Schlüsselwörter werden auf Query-Operatoren abgebildet Geospatial Queriescodecentric AG 28
  29. 29. MongoDB User-Gruppen (MUGs)MongoDB User-Gruppe Düsseldorf MongoDB User-Gruppe Berlinhttps://www.xing.com/net/mongodb-dus http://www.meetup.com/MUGBerlin/@MongoDUS @MUGBerlinMongoDB User-Gruppe Frankfurt/Main Hamburg MongoDB User Grouphttps://www.xing.com/net/mongodb-ffm https://www.xing.com/net/mugh@MongoFFMMongoDB User-Gruppe Münchenhttp://www.meetup.com/Muenchen-MongoDB-User-Group/@mongomuccodecentric AG 29
  30. 30. QUESTION?Tobias Trellecodecentric AGMerscheider Str. 142699 Solingentel +49 (0) 212.233628.47fax +49 (0) 212.233628.79mail Tobias.Trelle@codecentric.detwitter @tobiastrellewww.codecentric.deblog.codecentric.de/en/author/tobias-trellewww.xing.com/net/mongodb-duscodecentric AG 30

×