NOSQL?MONGO, COUCH & CO.    Michael Whittaker   Webmontag Paderborn      8. April 2013
ERFAHRUNGEN
NOSQL
NO SQL?
NOT ONLY SQL
WHY NOT ONLY SQL?
„BigData“?Millionen                (PetaBytes) User?                    unstrukturiert             CODD 1970Realtime      ...
Atomic            Consistent           ACIDIsolated           Durable
Basic                            Soft-StateAvailability               BASE                Eventual               Consistent
DB-TYPENRelationen / SQL    Graphen   BigTable /      Dokumente / Spaltenbasiert      Objekte
SQL / RELATIONALES SCHEMAMitglieder                                                 } ID          Name                Mail...
SQL / RELATIONALES SCHEMA                       Max ist mit                    Sandra und Peter                      befre...
OBJEKTGRAPHmax@...                                                          peter@...            Mitglied                 ...
IST DAS NICHT...
IST DAS NICHT...FAST EIN ER-DIAGRAMM?                  kann das            so nicht direkt in die                     DB?
GRAPHDATENBANKEN      NEO4J
DOKUMENTENORIENTIERTE    DATENBANKEN
{name: „Mongo“, type: „DB“}
BSON-DOKUMENTE           IN COLLECTIONS    {      "_id": {          "$oid": "5056259d…000012",      },      "email": "max@...
BSON-DOKUMENTE           IN COLLECTIONS    {      "_id": {          "$oid": "5056259d…000011",      },      "email": "max@...
BSON-DOKUMENTE            IN COLLECTIONS    {      "_id": {          "$oid": "5056259d…000011",      },      "email": "max...
MONGODB QUERY{  > db.members.find( { "name": "Max Mustermann" } )  > db.members.find( { "name": /max.*/i } )  > db.members...
ZUGRIFFMongoDB-ServerTreiberCREATE TABLE …
MONGOS STÄRKENGeschwindigkeitJSON-Im/-Export / Hot BackupsQueries und Indizes (Geospatial, verschachtelt, ...)Konsistenz
MONGODB USERS
JSON DOKUMENTE IN              COUCHDB    {      "_id": "member_5056259d…000011",      "type": "member",      "email": "ma...
COUCHDB VIEWS               (JS MAPREDUCE){  function(doc) {    if (doc.type === "member" && doc.name.test(/max.*/i)){    ...
COUCHDB VIEWS{  function(doc) {    if (doc.type === "member" &&        doc.addresses &&        doc.addresses.length > 0){ ...
ZUGRIFFCouchDB-ServerHTTP / Treiber (Wrapper)Views definieren
COUCHDBS STÄRKENBuilt for the Web – HTTP/JSON  CouchAppVersionierungViews / Indizes / MapReduceHigh Availability
COUCHDB USERS
KEY-VALUE STORES
KEY-VALUE STORESSPEICHERN WERTE MIT EINEM       SCHLÜSSEL AB
memcached
MEMCACHED  speichert beliebige Zeichenketten im RAM ab  weitverbreitet, „memcache-Protokoll“ (Telnet)  oft für Distributed...
REDIS    speichert Zeichenketten, Zahlen, Arrays und Mengen    im RAM* ab    „Datenstruktur-Server“    rasend schnell    R...
blog.nahurst.com/visual-guide-to-nosql-systems
LINKSNeo4J: neo4j.orgMongoDB: mongodb.org (try.mongodb.org)CouchDB: couchdb.apache.org (couchapp.org)Couchbase: couchbase....
DAS WAR‘S :-)MichaelWhi online:post@michael-whittaker.demichael-whittaker.detwitter.com/MichaelWhigithub.com/MichaelWhi   ...
NoSQL - Mongo, Couch und Co
NoSQL - Mongo, Couch und Co
NoSQL - Mongo, Couch und Co
Upcoming SlideShare
Loading in …5
×

NoSQL - Mongo, Couch und Co

4,195 views

Published on

Slides vom Webmontag Paderborn, 8.4.2013 zum Thema NoSQL-Datenbanken

Published in: Technology
  • Be the first to comment

NoSQL - Mongo, Couch und Co

  1. 1. NOSQL?MONGO, COUCH & CO. Michael Whittaker Webmontag Paderborn 8. April 2013
  2. 2. ERFAHRUNGEN
  3. 3. NOSQL
  4. 4. NO SQL?
  5. 5. NOT ONLY SQL
  6. 6. WHY NOT ONLY SQL?
  7. 7. „BigData“?Millionen (PetaBytes) User? unstrukturiert CODD 1970Realtime CommodityAnalytics? Hardware?
  8. 8. Atomic Consistent ACIDIsolated Durable
  9. 9. Basic Soft-StateAvailability BASE Eventual Consistent
  10. 10. DB-TYPENRelationen / SQL Graphen BigTable / Dokumente / Spaltenbasiert Objekte
  11. 11. SQL / RELATIONALES SCHEMAMitglieder } ID Name Mail 1 Max Mustermann max@mustermann.de Relation/ 2 Sandra Musterfrau sandra@musterfrau.de Tabelle 3 Peter Müller peter@mueller.de
  12. 12. SQL / RELATIONALES SCHEMA Max ist mit Sandra und Peter befreundet Freundschaften Mitglied1_ID Mitglied2_ID Max‘ ID 1 2 Sandra Max 1 3 Peter
  13. 13. OBJEKTGRAPHmax@... peter@... Mitglied Freund Mitglied Max Freund Peter Mitglied sandra@... Sandra
  14. 14. IST DAS NICHT...
  15. 15. IST DAS NICHT...FAST EIN ER-DIAGRAMM? kann das so nicht direkt in die DB?
  16. 16. GRAPHDATENBANKEN NEO4J
  17. 17. DOKUMENTENORIENTIERTE DATENBANKEN
  18. 18. {name: „Mongo“, type: „DB“}
  19. 19. BSON-DOKUMENTE IN COLLECTIONS {    "_id": {        "$oid": "5056259d…000012",    },    "email": "max@mustermann.de",    "name": "Max Mustermann" }
  20. 20. BSON-DOKUMENTE IN COLLECTIONS {    "_id": {        "$oid": "5056259d…000011",    },    "email": "max@mustermann.de",    "name": "Max Mustermann", "friend_ids": ["5056259d…000012", "5056259d…000013"] } Referenz auf IDs
  21. 21. BSON-DOKUMENTE IN COLLECTIONS {    "_id": {        "$oid": "5056259d…000011",    },    "email": "max@mustermann.de",    "name": "Max Mustermann", "friend_ids": ["5056259d…000012", "5056259d…000013"], "addresses": [{        "street": "Warburger Str. 100", "coords": [12.34, 23.45] }, … ] }
  22. 22. MONGODB QUERY{  > db.members.find( { "name": "Max Mustermann" } )  > db.members.find( { "name": /max.*/i } )  > db.members.find( { "friend_ids ": { $size: 0 } } )  > db.members.find( { "friend_ids ": { $elemMatch: "50…11" } } )
  23. 23. ZUGRIFFMongoDB-ServerTreiberCREATE TABLE …
  24. 24. MONGOS STÄRKENGeschwindigkeitJSON-Im/-Export / Hot BackupsQueries und Indizes (Geospatial, verschachtelt, ...)Konsistenz
  25. 25. MONGODB USERS
  26. 26. JSON DOKUMENTE IN COUCHDB {    "_id": "member_5056259d…000011",    "type": "member",    "email": "max@mustermann.de",    "name": "Max Mustermann", "friend_ids": ["member_505…012", "member_505…013"], "addresses": [{        "street": "Warburger Str. 100", "coords": [12.34, 23.45] }, … ] } http://localhost:5984/test/member_5056259d…000011
  27. 27. COUCHDB VIEWS (JS MAPREDUCE){  function(doc) { if (doc.type === "member" && doc.name.test(/max.*/i)){ emit(doc.name, doc) } }
  28. 28. COUCHDB VIEWS{  function(doc) { if (doc.type === "member" && doc.addresses && doc.addresses.length > 0){ emit(doc.name, doc.addresses[0][street]) } } http://localhost:5984/test/_design/names_with_street?key=Max+Mustermann
  29. 29. ZUGRIFFCouchDB-ServerHTTP / Treiber (Wrapper)Views definieren
  30. 30. COUCHDBS STÄRKENBuilt for the Web – HTTP/JSON CouchAppVersionierungViews / Indizes / MapReduceHigh Availability
  31. 31. COUCHDB USERS
  32. 32. KEY-VALUE STORES
  33. 33. KEY-VALUE STORESSPEICHERN WERTE MIT EINEM SCHLÜSSEL AB
  34. 34. memcached
  35. 35. MEMCACHED speichert beliebige Zeichenketten im RAM ab weitverbreitet, „memcache-Protokoll“ (Telnet) oft für Distributed Caching genutzt{  > set max_mustermann.street "Warburger Strasse 100" > get max_mustermann.street
  36. 36. REDIS speichert Zeichenketten, Zahlen, Arrays und Mengen im RAM* ab „Datenstruktur-Server“ rasend schnell Replikation / Failover{ > set max_mustermann.profile_views 1 > incr max_mustermann.profile_views # => 2
  37. 37. blog.nahurst.com/visual-guide-to-nosql-systems
  38. 38. LINKSNeo4J: neo4j.orgMongoDB: mongodb.org (try.mongodb.org)CouchDB: couchdb.apache.org (couchapp.org)Couchbase: couchbase.comMemcached: memcached.orgRedis: redis.ioCassandra: cassandra.apache.orgRiak: basho.com/riak/GemStone/S: gemstone.com/products/gemstoneCassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Couchbase vsNeo4j vs Hypertable vs ElasticSearch vs Accumulo vs VoltDB vs Scalaris comparison:kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis
  39. 39. DAS WAR‘S :-)MichaelWhi online:post@michael-whittaker.demichael-whittaker.detwitter.com/MichaelWhigithub.com/MichaelWhi Folien von heute

×