SlideShare ist ein Scribd-Unternehmen logo
1 von 30
OOP 2013:
Praktische Einführung in MongoDB
tobias.trelle@codecentric.de
@tobiastrelle

 codecentric AG                1
Tobias Trelle

                 -   Senior IT Consultant codecentric AG

                 -   MongoDB User-Gruppe Düsseldorf

                 -   MongoDB-Buch

codecentric AG        2
„It‘s not my fault the chapters are
short, MongoDB is just easy to learn“

      aus „The Little MongoDB book“




codecentric AG              3
MongoDB?

                 „humongous“ = gigantisch,
                      wahnsinnig groß

                  http://www.mongodb.org
codecentric AG           4
MongoDB?


      NoSQL-Datenbank

      Dokumenten-orientiert

      Hochperformant, horizontal skalierbar (scale-out)

      Replication & Sharding out-of-the-box

      Map/Reduce

      Geospatial Indexes / Queries
codecentric AG                  5
Grundkonzept MongoDB-Server


                               Server

Relationales
                              Database
Pendant                                    Aber …
                                           Flexibles
            Tabelle           Collection
                                           Schema

                 Zeile        Document


                                            - Arrays
                 Spalte         Field
                                            - Rekursiv
codecentric 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
       x08x00x00x00MongoDBx00
x00

codecentric AG   10
Live Session


      CRUD Operations           Replication

      Queries                   Sharding

      Geospatial Queries        MongoDB Java Driver &
                                Spring Data MongoDB
      Map/Reduce




codecentric 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 Hadoop


codecentric 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-Collection




codecentric 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 2

codecentric 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 2

codecentric 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 Server

codecentric AG                      20
MongoDB Sharding Beispiel: Initialer Zustand
mongos> 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 sich
mongos> 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/Drivers




codecentric AG             23
MongoDB Treiber


Beispiele
 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 Treibers


Wesentliche Aufgaben eines Treibers

      Konvertierung der sprachabh. Datenstrukturen 
       BSON-Format

        Generierung der _id-Werte

      Treiber macht möglichst viel, um Server zu
      entlasten
codecentric 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-driver



codecentric 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 MongoDB

Template
     Abstraktion vom MongoDB Java Driver
     Konfiguration von mongod / mongos-Instanzen und Collections
     Verwaltung von Collections
     Map/Reduce-Aufrufe

Object Mapping
     Annotationen @Document, @Field, @Index etc.
     Klassen werden auf Collections abgebildet, Java-Objekte auf Dokumente

Repository Support
     Schlüsselwörter werden auf Query-Operatoren abgebildet
     Geospatial Queries

codecentric AG                 28
MongoDB User-Gruppen (MUGs)

MongoDB User-Gruppe Düsseldorf           MongoDB User-Gruppe Berlin
https://www.xing.com/net/mongodb-dus     http://www.meetup.com/MUGBerlin/
@MongoDUS                                @MUGBerlin


MongoDB User-Gruppe Frankfurt/Main       Hamburg MongoDB User Group
https://www.xing.com/net/mongodb-ffm     https://www.xing.com/net/mugh
@MongoFFM


MongoDB User-Gruppe München
http://www.meetup.com/Muenchen-MongoDB-User-Group/
@mongomuc




codecentric AG                     29
QUESTION?

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

codecentric AG                              30

Weitere ähnliche Inhalte

Was ist angesagt?

Zend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDBZend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDBRalf Eggert
 
Ladezeiten Verbessern - Css Und JavaScript Komprimieren
Ladezeiten Verbessern - Css Und JavaScript KomprimierenLadezeiten Verbessern - Css Und JavaScript Komprimieren
Ladezeiten Verbessern - Css Und JavaScript KomprimierenJoomla! User Group Fulda
 
Einführung in Elasticsearch
Einführung in ElasticsearchEinführung in Elasticsearch
Einführung in ElasticsearchFlorian Hopf
 
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
 
Suchkiste BibTag 2009
Suchkiste BibTag 2009Suchkiste BibTag 2009
Suchkiste BibTag 2009nesnu
 
Suchkiste BibTag 2009
Suchkiste BibTag 2009Suchkiste BibTag 2009
Suchkiste BibTag 2009steilen
 
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
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Gregor Biswanger
 
Back to Basics – Webinar 3: Schema-Design: Denken in Dokumenten
Back to Basics – Webinar 3: Schema-Design: Denken in DokumentenBack to Basics – Webinar 3: Schema-Design: Denken in Dokumenten
Back to Basics – Webinar 3: Schema-Design: Denken in DokumentenMongoDB
 
MongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerMongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerGregor Biswanger
 
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 GrauelNETWAYS
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLFromDual GmbH
 

Was ist angesagt? (15)

Zend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDBZend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDB
 
Ladezeiten Verbessern - Css Und JavaScript Komprimieren
Ladezeiten Verbessern - Css Und JavaScript KomprimierenLadezeiten Verbessern - Css Und JavaScript Komprimieren
Ladezeiten Verbessern - Css Und JavaScript Komprimieren
 
Einführung in Elasticsearch
Einführung in ElasticsearchEinführung in Elasticsearch
Einführung in Elasticsearch
 
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)
 
Suchkiste BibTag 2009
Suchkiste BibTag 2009Suchkiste BibTag 2009
Suchkiste BibTag 2009
 
Suchkiste BibTag 2009
Suchkiste BibTag 2009Suchkiste BibTag 2009
Suchkiste BibTag 2009
 
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
 
Fly2pdf
Fly2pdfFly2pdf
Fly2pdf
 
Query Result Caching
Query Result CachingQuery Result Caching
Query Result Caching
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1
 
Back to Basics – Webinar 3: Schema-Design: Denken in Dokumenten
Back to Basics – Webinar 3: Schema-Design: Denken in DokumentenBack to Basics – Webinar 3: Schema-Design: Denken in Dokumenten
Back to Basics – Webinar 3: Schema-Design: Denken in Dokumenten
 
Datenbankoptimierung
DatenbankoptimierungDatenbankoptimierung
Datenbankoptimierung
 
MongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerMongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen Hacker
 
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
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQL
 

Andere mochten auch

めとべや東京#7セッション資料(公開用)
めとべや東京#7セッション資料(公開用)めとべや東京#7セッション資料(公開用)
めとべや東京#7セッション資料(公開用)OD-10Z Midorikawa
 
Presentatie rotary
Presentatie rotaryPresentatie rotary
Presentatie rotarypgvanderpoel
 
Designing for the Dichotomy of Immersion in Location Based Games
Designing for the Dichotomy of Immersion in Location Based GamesDesigning for the Dichotomy of Immersion in Location Based Games
Designing for the Dichotomy of Immersion in Location Based GamesAdrian Gradinar
 
Introduce my self
Introduce my selfIntroduce my self
Introduce my selfAguz Cece
 
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 MongoDBTobias Trelle
 
Bad Implementations of Good Ideas: How Systematic Inattention to Performance ...
Bad Implementations of Good Ideas: How Systematic Inattention to Performance ...Bad Implementations of Good Ideas: How Systematic Inattention to Performance ...
Bad Implementations of Good Ideas: How Systematic Inattention to Performance ...Doug Sillars
 
what is Blubbr? and how to use it?
what is Blubbr? and how to use it?what is Blubbr? and how to use it?
what is Blubbr? and how to use it?Jihane Balsheh
 
2012 Media Highlights
2012 Media Highlights2012 Media Highlights
2012 Media Highlightsmeatconamibia
 
Theanatomyofanentrepreneur 100105180411-phpapp01
Theanatomyofanentrepreneur 100105180411-phpapp01Theanatomyofanentrepreneur 100105180411-phpapp01
Theanatomyofanentrepreneur 100105180411-phpapp01Deepak R Gorad
 
Tewksbury2011
Tewksbury2011Tewksbury2011
Tewksbury2011tewksjj
 

Andere mochten auch (18)

Classroom management
Classroom managementClassroom management
Classroom management
 
めとべや東京#7セッション資料(公開用)
めとべや東京#7セッション資料(公開用)めとべや東京#7セッション資料(公開用)
めとべや東京#7セッション資料(公開用)
 
Presentatie rotary
Presentatie rotaryPresentatie rotary
Presentatie rotary
 
Drgorad sm project
Drgorad sm projectDrgorad sm project
Drgorad sm project
 
Designing for the Dichotomy of Immersion in Location Based Games
Designing for the Dichotomy of Immersion in Location Based GamesDesigning for the Dichotomy of Immersion in Location Based Games
Designing for the Dichotomy of Immersion in Location Based Games
 
Introduce my self
Introduce my selfIntroduce my self
Introduce my self
 
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
 
Reechal bday
Reechal bdayReechal bday
Reechal bday
 
Drgorad em- project
Drgorad  em- projectDrgorad  em- project
Drgorad em- project
 
Bad Implementations of Good Ideas: How Systematic Inattention to Performance ...
Bad Implementations of Good Ideas: How Systematic Inattention to Performance ...Bad Implementations of Good Ideas: How Systematic Inattention to Performance ...
Bad Implementations of Good Ideas: How Systematic Inattention to Performance ...
 
what is Blubbr? and how to use it?
what is Blubbr? and how to use it?what is Blubbr? and how to use it?
what is Blubbr? and how to use it?
 
Embedded projects
Embedded projectsEmbedded projects
Embedded projects
 
Tqm deepak R Gorad
Tqm deepak R  GoradTqm deepak R  Gorad
Tqm deepak R Gorad
 
2012 Media Highlights
2012 Media Highlights2012 Media Highlights
2012 Media Highlights
 
Power
PowerPower
Power
 
Presentatie1
Presentatie1Presentatie1
Presentatie1
 
Theanatomyofanentrepreneur 100105180411-phpapp01
Theanatomyofanentrepreneur 100105180411-phpapp01Theanatomyofanentrepreneur 100105180411-phpapp01
Theanatomyofanentrepreneur 100105180411-phpapp01
 
Tewksbury2011
Tewksbury2011Tewksbury2011
Tewksbury2011
 

Ähnlich wie OOP 2013: Praktische Einführung in MongoDB

Internet Briefing 2011: NoSQL with MySQL
Internet Briefing 2011: NoSQL with MySQLInternet Briefing 2011: NoSQL with MySQL
Internet Briefing 2011: NoSQL with MySQLFromDual GmbH
 
mongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - GrundlagenmongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - Grundlageninovex GmbH
 
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-AnwendungMongoDB
 
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDASchulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDAJörn Dinkla
 
Einführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenEinführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenTobias Trelle
 
Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)
Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)
Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)Nils Adermann
 
Tipps & Tricks für den erfolgreichen Einsatz von GPU-Computing
Tipps & Tricks für den erfolgreichen Einsatz von GPU-ComputingTipps & Tricks für den erfolgreichen Einsatz von GPU-Computing
Tipps & Tricks für den erfolgreichen Einsatz von GPU-ComputingJörn Dinkla
 
MySQL Performance Tuning für Oracle-DBA's
MySQL Performance Tuning für Oracle-DBA'sMySQL Performance Tuning für Oracle-DBA's
MySQL Performance Tuning für Oracle-DBA'sFromDual GmbH
 
Exchange Server 2019 MetaCache Database und BigFunnel
Exchange Server 2019 MetaCache Database und BigFunnelExchange Server 2019 MetaCache Database und BigFunnel
Exchange Server 2019 MetaCache Database und BigFunnelThomas Stensitzki
 
MongoDB Atlas – der beste Weg, MongoDB in der Cloud zu betreiben 2
MongoDB Atlas – der beste Weg, MongoDB in der Cloud zu betreiben 2MongoDB Atlas – der beste Weg, MongoDB in der Cloud zu betreiben 2
MongoDB Atlas – der beste Weg, MongoDB in der Cloud zu betreiben 2MongoDB
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauenjohofer
 
Dokumentenorientiere Datenbanken am Beispiel CouchDB
Dokumentenorientiere Datenbanken am Beispiel CouchDBDokumentenorientiere Datenbanken am Beispiel CouchDB
Dokumentenorientiere Datenbanken am Beispiel CouchDBMario Müller
 
The Hadoop Connection
The Hadoop ConnectionThe Hadoop Connection
The Hadoop Connectioninovex GmbH
 
MapRecude: The Hadoop Connection
MapRecude: The Hadoop ConnectionMapRecude: The Hadoop Connection
MapRecude: The Hadoop Connectionvesparun
 
Oracle vs. PostgreSQL - Unterschiede in 45 Minuten
Oracle vs. PostgreSQL - Unterschiede in 45 MinutenOracle vs. PostgreSQL - Unterschiede in 45 Minuten
Oracle vs. PostgreSQL - Unterschiede in 45 MinutenMarkus Flechtner
 
GPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der PraxisGPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der PraxisJörn Dinkla
 
Back to Basics - Webinar 6: Produktivsetzung einer Anwendung
Back to Basics - Webinar 6: Produktivsetzung einer AnwendungBack to Basics - Webinar 6: Produktivsetzung einer Anwendung
Back to Basics - Webinar 6: Produktivsetzung einer AnwendungMongoDB
 
Multi-GPU-Computing: Eins, zwei, drei, ganz viele
Multi-GPU-Computing: Eins, zwei, drei, ganz vieleMulti-GPU-Computing: Eins, zwei, drei, ganz viele
Multi-GPU-Computing: Eins, zwei, drei, ganz vieleJörn Dinkla
 

Ähnlich wie OOP 2013: Praktische Einführung in MongoDB (20)

Internet Briefing 2011: NoSQL with MySQL
Internet Briefing 2011: NoSQL with MySQLInternet Briefing 2011: NoSQL with MySQL
Internet Briefing 2011: NoSQL with MySQL
 
mongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - GrundlagenmongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - Grundlagen
 
NoSQL with MySQL
NoSQL with MySQLNoSQL with MySQL
NoSQL with MySQL
 
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
 
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDASchulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
 
Einführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenEinführung in NoSQL-Datenbanken
Einführung in NoSQL-Datenbanken
 
Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)
Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)
Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)
 
Tipps & Tricks für den erfolgreichen Einsatz von GPU-Computing
Tipps & Tricks für den erfolgreichen Einsatz von GPU-ComputingTipps & Tricks für den erfolgreichen Einsatz von GPU-Computing
Tipps & Tricks für den erfolgreichen Einsatz von GPU-Computing
 
MySQL Performance Tuning für Oracle-DBA's
MySQL Performance Tuning für Oracle-DBA'sMySQL Performance Tuning für Oracle-DBA's
MySQL Performance Tuning für Oracle-DBA's
 
Exchange Server 2019 MetaCache Database und BigFunnel
Exchange Server 2019 MetaCache Database und BigFunnelExchange Server 2019 MetaCache Database und BigFunnel
Exchange Server 2019 MetaCache Database und BigFunnel
 
MongoDB Atlas – der beste Weg, MongoDB in der Cloud zu betreiben 2
MongoDB Atlas – der beste Weg, MongoDB in der Cloud zu betreiben 2MongoDB Atlas – der beste Weg, MongoDB in der Cloud zu betreiben 2
MongoDB Atlas – der beste Weg, MongoDB in der Cloud zu betreiben 2
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauen
 
Dokumentenorientiere Datenbanken am Beispiel CouchDB
Dokumentenorientiere Datenbanken am Beispiel CouchDBDokumentenorientiere Datenbanken am Beispiel CouchDB
Dokumentenorientiere Datenbanken am Beispiel CouchDB
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
The Hadoop Connection
The Hadoop ConnectionThe Hadoop Connection
The Hadoop Connection
 
MapRecude: The Hadoop Connection
MapRecude: The Hadoop ConnectionMapRecude: The Hadoop Connection
MapRecude: The Hadoop Connection
 
Oracle vs. PostgreSQL - Unterschiede in 45 Minuten
Oracle vs. PostgreSQL - Unterschiede in 45 MinutenOracle vs. PostgreSQL - Unterschiede in 45 Minuten
Oracle vs. PostgreSQL - Unterschiede in 45 Minuten
 
GPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der PraxisGPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der Praxis
 
Back to Basics - Webinar 6: Produktivsetzung einer Anwendung
Back to Basics - Webinar 6: Produktivsetzung einer AnwendungBack to Basics - Webinar 6: Produktivsetzung einer Anwendung
Back to Basics - Webinar 6: Produktivsetzung einer Anwendung
 
Multi-GPU-Computing: Eins, zwei, drei, ganz viele
Multi-GPU-Computing: Eins, zwei, drei, ganz vieleMulti-GPU-Computing: Eins, zwei, drei, ganz viele
Multi-GPU-Computing: Eins, zwei, drei, ganz viele
 

Mehr von Tobias Trelle

TDD mit JUnit und Mockito
TDD mit JUnit und MockitoTDD mit JUnit und Mockito
TDD mit JUnit und MockitoTobias Trelle
 
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 Neo4jTobias Trelle
 
Test Automation for NoSQL Databases
Test Automation for NoSQL DatabasesTest Automation for NoSQL Databases
Test Automation for NoSQL DatabasesTobias Trelle
 
Spring Data, Jongo & Co.
Spring Data, Jongo & Co.Spring Data, Jongo & Co.
Spring Data, Jongo & Co.Tobias Trelle
 
Morphia, Spring Data & Co.
Morphia, Spring Data & Co.Morphia, Spring Data & Co.
Morphia, Spring Data & Co.Tobias Trelle
 
An introduction to MongoDB and Ruby
An introduction to MongoDB and RubyAn introduction to MongoDB and Ruby
An introduction to MongoDB and RubyTobias Trelle
 
Java Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDBJava Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDBTobias Trelle
 
MongoDB Live Hacking
MongoDB Live HackingMongoDB Live Hacking
MongoDB Live HackingTobias Trelle
 

Mehr von Tobias Trelle (8)

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
 
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
 
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
 

OOP 2013: Praktische Einführung in MongoDB

  • 1. OOP 2013: Praktische Einführung in MongoDB tobias.trelle@codecentric.de @tobiastrelle codecentric AG 1
  • 2. Tobias Trelle - Senior IT Consultant codecentric AG - MongoDB User-Gruppe Düsseldorf - MongoDB-Buch codecentric AG 2
  • 3. „It‘s not my fault the chapters are short, MongoDB is just easy to learn“ aus „The Little MongoDB book“ codecentric AG 3
  • 4. MongoDB? „humongous“ = gigantisch, wahnsinnig groß http://www.mongodb.org codecentric AG 4
  • 5. MongoDB? NoSQL-Datenbank Dokumenten-orientiert Hochperformant, horizontal skalierbar (scale-out) Replication & Sharding out-of-the-box Map/Reduce Geospatial Indexes / Queries codecentric AG 5
  • 6. Grundkonzept MongoDB-Server Server Relationales Database Pendant Aber … Flexibles Tabelle Collection Schema Zeile Document - Arrays Spalte Field - Rekursiv codecentric AG 6
  • 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. 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. 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. BSON Beispiel { hello: "MongoDB" } x18x00x00x00 x02 hellox00 x08x00x00x00MongoDBx00 x00 codecentric AG 10
  • 11. Live Session CRUD Operations Replication Queries Sharding Geospatial Queries MongoDB Java Driver & Spring Data MongoDB Map/Reduce codecentric AG 11
  • 12. CRUD = IFUR insert(…) find(…), findOne(…) update(…) remove() codecentric AG 12
  • 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. 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 Hadoop codecentric AG 14
  • 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-Collection codecentric AG 15
  • 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. 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. 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 2 codecentric AG 18
  • 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 2 codecentric AG 19
  • 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 Server codecentric AG 20
  • 21. MongoDB Sharding Beispiel: Initialer Zustand mongos> 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. MongoDB Sharding Beispiel: Chunks verteilen sich mongos> 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. MongoDB Treiber Ein Wire-Protokoll für alle Client-Sprachen Pro Sprache ein Treiber Übersicht: http://www.mongodb.org/display/DOCS/Drivers codecentric AG 23
  • 24. MongoDB Treiber Beispiele 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. MongoDB Treibers Wesentliche Aufgaben eines Treibers Konvertierung der sprachabh. Datenstrukturen   BSON-Format Generierung der _id-Werte Treiber macht möglichst viel, um Server zu entlasten codecentric AG 25
  • 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-driver codecentric AG 26
  • 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. Spring Data MongoDB Template Abstraktion vom MongoDB Java Driver Konfiguration von mongod / mongos-Instanzen und Collections Verwaltung von Collections Map/Reduce-Aufrufe Object Mapping Annotationen @Document, @Field, @Index etc. Klassen werden auf Collections abgebildet, Java-Objekte auf Dokumente Repository Support Schlüsselwörter werden auf Query-Operatoren abgebildet Geospatial Queries codecentric AG 28
  • 29. MongoDB User-Gruppen (MUGs) MongoDB User-Gruppe Düsseldorf MongoDB User-Gruppe Berlin https://www.xing.com/net/mongodb-dus http://www.meetup.com/MUGBerlin/ @MongoDUS @MUGBerlin MongoDB User-Gruppe Frankfurt/Main Hamburg MongoDB User Group https://www.xing.com/net/mongodb-ffm https://www.xing.com/net/mugh @MongoFFM MongoDB User-Gruppe München http://www.meetup.com/Muenchen-MongoDB-User-Group/ @mongomuc codecentric AG 29
  • 30. QUESTION? 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 codecentric AG 30