NoSQL - Mongo, Couch und Co
-
Upload
michael-whittaker -
Category
Technology
-
view
3.308 -
download
0
description
Transcript of NoSQL - Mongo, Couch und Co
NOSQL?MONGO, COUCH & CO.
Michael WhittakerWebmontag Paderborn
8. April 2013
ERFAHRUNGEN
NOSQL
NO SQL?
NOT ONLY SQL
WHY NOT ONLY SQL?
CODD 1970
Millionen User? unstrukturiert
„BigData“?(PetaBytes)
Commodity Hardware?
Realtime Analytics?
ACID
Atomic Consistent
Isolated Durable
BASE
Basic Availability Soft-State
Eventual Consistent
Relationen / SQL Graphen
BigTable / Spaltenbasiert
Dokumente / Objekte
DB-TYPEN
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
SQL / RELATIONALES SCHEMA
Mitglied1_ID Mitglied2_ID
1 2
1 3
Freundschaften
Max ist mit Sandra und Peter
befreundet
Max‘ ID
Max
Sandra
Peter
OBJEKTGRAPH
Mitglied
Mitglied
Mitglied
peter@...
Peter
max@...
Max
sandra@... Sandra
Freund
Freund
IST DAS NICHT...
IST DAS NICHT...FAST EIN ER-DIAGRAMM?
kann das so nicht direkt in die
DB?
GRAPHDATENBANKENNEO4J
DOKUMENTENORIENTIERTE DATENBANKEN
{name: „Mongo“, type: „DB“}
BSON-DOKUMENTE IN COLLECTIONS
{ "_id": { "$oid": "5056259d…000012", }, "email": "[email protected]", "name": "Max Mustermann" }
BSON-DOKUMENTE IN COLLECTIONS
{ "_id": { "$oid": "5056259d…000011", }, "email": "[email protected]", "name": "Max Mustermann", "friend_ids": ["5056259d…000012", "5056259d…000013"] }
Referenz auf IDs
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] }, … ] }
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" } } )
ZUGRIFF
MongoDB-Server
Treiber
CREATE TABLE …
MONGOS STÄRKEN
Geschwindigkeit
JSON-Im/-Export / Hot Backups
Queries und Indizes (Geospatial, verschachtelt, ...)
Konsistenz
MONGODB USERS
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
COUCHDB VIEWS(JS MAPREDUCE)
{ function(doc) { if (doc.type === "member" && doc.name.test(/max.*/i)){ emit(doc.name, doc) } }
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
ZUGRIFF
CouchDB-Server
HTTP / Treiber (Wrapper)
Views definieren
COUCHDBS STÄRKEN
Built for the Web – HTTP/JSON
CouchApp
Versionierung
Views / Indizes / MapReduce
High Availability
COUCHDB USERS
KEY-VALUE STORES
KEY-VALUE STORES
SPEICHERN WERTE MIT EINEM SCHLÜSSEL AB
memcached
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
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
blog.nahurst.com/visual-guide-to-nosql-systems
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
DAS WAR‘S :-)
MichaelWhi online:
michael-whittaker.de
twitter.com/MichaelWhi
github.com/MichaelWhi
Folien von heute