OOP 2013: Praktische Einführung in MongoDB

4,313 views
4,120 views

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
4,313
On SlideShare
0
From Embeds
0
Number of Embeds
393
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

×