• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
OOP 2013: Praktische Einführung in MongoDB
 

OOP 2013: Praktische Einführung in MongoDB

on

  • 1,914 views

OOP 2013:

OOP 2013:
Praktische Einführung in MongoDB

Tobias Trelle
@tobiastrelle

Statistics

Views

Total Views
1,914
Views on SlideShare
1,617
Embed Views
297

Actions

Likes
0
Downloads
3
Comments
0

5 Embeds 297

http://blog.codecentric.de 246
http://lanyrd.com 29
http://eventifier.co 14
http://feeds.feedburner.com 4
http://127.0.0.1 4

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    OOP 2013: Praktische Einführung in MongoDB OOP 2013: Praktische Einführung in MongoDB Presentation Transcript

    • 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 - MongoDB-Buchcodecentric AG 2
    • „It‘s not my fault the chapters areshort, MongoDB is just easy to learn“ aus „The Little MongoDB book“codecentric AG 3
    • MongoDB? „humongous“ = gigantisch, wahnsinnig groß http://www.mongodb.orgcodecentric AG 4
    • MongoDB? NoSQL-Datenbank Dokumenten-orientiert Hochperformant, horizontal skalierbar (scale-out) Replication & Sharding out-of-the-box Map/Reduce Geospatial Indexes / Queriescodecentric AG 5
    • Grundkonzept MongoDB-Server ServerRelationales DatabasePendant Aber … Flexibles Tabelle Collection Schema Zeile Document - Arrays Spalte Field - Rekursivcodecentric AG 6
    • 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
    • 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
    • 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
    • BSON Beispiel{ hello: "MongoDB" }x18x00x00x00 x02 hellox00 x08x00x00x00MongoDBx00x00codecentric AG 10
    • Live Session CRUD Operations Replication Queries Sharding Geospatial Queries MongoDB Java Driver & Spring Data MongoDB Map/Reducecodecentric AG 11
    • CRUD = IFUR insert(…) find(…), findOne(…) update(…) remove()codecentric AG 12
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • MongoDB Treiber Ein Wire-Protokoll für alle Client-Sprachen Pro Sprache ein Treiber Übersicht: http://www.mongodb.org/display/DOCS/Driverscodecentric AG 23
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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