NoSQL - Mongo, Couch und Co

42
NOSQL? MONGO, COUCH & CO. Michael Whittaker Webmontag Paderborn 8. April 2013

description

Slides vom Webmontag Paderborn, 8.4.2013 zum Thema NoSQL-Datenbanken

Transcript of NoSQL - Mongo, Couch und Co

Page 1: NoSQL - Mongo, Couch und Co

NOSQL?MONGO, COUCH & CO.

Michael WhittakerWebmontag Paderborn

8. April 2013

Page 2: NoSQL - Mongo, Couch und Co

ERFAHRUNGEN

Page 3: NoSQL - Mongo, Couch und Co

NOSQL

Page 4: NoSQL - Mongo, Couch und Co

NO SQL?

Page 5: NoSQL - Mongo, Couch und Co

NOT ONLY SQL

Page 6: NoSQL - Mongo, Couch und Co

WHY NOT ONLY SQL?

Page 7: NoSQL - Mongo, Couch und Co

CODD 1970

Millionen User? unstrukturiert

„BigData“?(PetaBytes)

Commodity Hardware?

Realtime Analytics?

Page 8: NoSQL - Mongo, Couch und Co

ACID

Atomic Consistent

Isolated Durable

Page 9: NoSQL - Mongo, Couch und Co

BASE

Basic Availability Soft-State

Eventual Consistent

Page 10: NoSQL - Mongo, Couch und Co

Relationen / SQL Graphen

BigTable / Spaltenbasiert

Dokumente / Objekte

DB-TYPEN

Page 11: NoSQL - Mongo, Couch und Co

SQL / RELATIONALES SCHEMA

ID Name Mail

1 Max Mustermann [email protected]

2 Sandra Musterfrau [email protected]

3 Peter Müller [email protected]

Mitglieder

}Relation/Tabelle

Page 12: NoSQL - Mongo, Couch und Co

SQL / RELATIONALES SCHEMA

Mitglied1_ID Mitglied2_ID

1 2

1 3

Freundschaften

Max ist mit Sandra und Peter

befreundet

Max‘ ID

Max

Sandra

Peter

Page 13: NoSQL - Mongo, Couch und Co

OBJEKTGRAPH

Mitglied

Mitglied

Mitglied

peter@...

Peter

max@...

Max

sandra@... Sandra

Freund

Freund

Page 14: NoSQL - Mongo, Couch und Co

IST DAS NICHT...

Page 15: NoSQL - Mongo, Couch und Co

IST DAS NICHT...FAST EIN ER-DIAGRAMM?

kann das so nicht direkt in die

DB?

Page 16: NoSQL - Mongo, Couch und Co

GRAPHDATENBANKENNEO4J

Page 17: NoSQL - Mongo, Couch und Co
Page 18: NoSQL - Mongo, Couch und Co

DOKUMENTENORIENTIERTE DATENBANKEN

Page 19: NoSQL - Mongo, Couch und Co

{name: „Mongo“, type: „DB“}

Page 20: NoSQL - Mongo, Couch und Co

BSON-DOKUMENTE IN COLLECTIONS

{    "_id": {        "$oid": "5056259d…000012",    },    "email": "[email protected]",    "name": "Max Mustermann" }

Page 21: NoSQL - Mongo, Couch und Co

BSON-DOKUMENTE IN COLLECTIONS

{    "_id": {        "$oid": "5056259d…000011",    },    "email": "[email protected]",    "name": "Max Mustermann", "friend_ids": ["5056259d…000012", "5056259d…000013"] }

Referenz auf IDs

Page 22: NoSQL - Mongo, Couch und Co

BSON-DOKUMENTE IN COLLECTIONS

{    "_id": {        "$oid": "5056259d…000011",    },    "email": "[email protected]",    "name": "Max Mustermann", "friend_ids": ["5056259d…000012", "5056259d…000013"], "addresses": [{        "street": "Warburger Str. 100", "coords": [12.34, 23.45] }, … ] }

Page 23: NoSQL - Mongo, Couch und Co

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" } } )

Page 24: NoSQL - Mongo, Couch und Co

ZUGRIFF

MongoDB-Server

Treiber

CREATE TABLE …

Page 25: NoSQL - Mongo, Couch und Co

MONGOS STÄRKEN

Geschwindigkeit

JSON-Im/-Export / Hot Backups

Queries und Indizes (Geospatial, verschachtelt, ...)

Konsistenz

Page 26: NoSQL - Mongo, Couch und Co

MONGODB USERS

Page 27: NoSQL - Mongo, Couch und Co
Page 28: NoSQL - Mongo, Couch und Co

JSON DOKUMENTE IN COUCHDB

{    "_id": "member_5056259d…000011",    "type": "member",    "email": "[email protected]",    "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

Page 29: NoSQL - Mongo, Couch und Co

COUCHDB VIEWS(JS MAPREDUCE)

{  function(doc) { if (doc.type === "member" && doc.name.test(/max.*/i)){ emit(doc.name, doc) } }

Page 30: NoSQL - Mongo, Couch und Co

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

Page 31: NoSQL - Mongo, Couch und Co

ZUGRIFF

CouchDB-Server

HTTP / Treiber (Wrapper)

Views definieren

Page 32: NoSQL - Mongo, Couch und Co

COUCHDBS STÄRKEN

Built for the Web – HTTP/JSON

CouchApp

Versionierung

Views / Indizes / MapReduce

High Availability

Page 33: NoSQL - Mongo, Couch und Co

COUCHDB USERS

Page 34: NoSQL - Mongo, Couch und Co

KEY-VALUE STORES

Page 35: NoSQL - Mongo, Couch und Co

KEY-VALUE STORES

SPEICHERN WERTE MIT EINEM SCHLÜSSEL AB

Page 36: NoSQL - Mongo, Couch und Co

memcached

Page 37: NoSQL - Mongo, Couch und Co

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

Page 38: NoSQL - Mongo, Couch und Co
Page 39: NoSQL - Mongo, Couch und Co

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

Page 41: NoSQL - Mongo, Couch und Co

LINKS

Neo4J: neo4j.org

MongoDB: mongodb.org (try.mongodb.org)

CouchDB: couchdb.apache.org (couchapp.org)

Couchbase: couchbase.com

Memcached: memcached.org

Redis: redis.io

Cassandra: cassandra.apache.org

Riak: basho.com/riak/

GemStone/S: gemstone.com/products/gemstone

Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Couchbase vs Neo4j vs Hypertable vs ElasticSearch vs Accumulo vs VoltDB vs Scalaris comparison: kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis