1. Datenbanken in der Cloud
Data-Storage jenseits von SQL
Mathias Meyer, 25.11.2009
Peritor GmbH
Mittwoch, 25. November 2009
NEUE GENERATION von post-relationalen Datenbanken
2. Wer?
“Chief Cloud Officer” bei Peritor
Ruby-Entwickler
Open-Source-Contributor (http://github.com/mattmatt)
2
Mittwoch, 25. November 2009
PERITOR ist erster Amazon Web Services Solution Provider in Europa
3. Peritor
Cloud-Management und -Deployment made easy
http://scalarium.com
3
Mittwoch, 25. November 2009
4. Cloud-Datenbanken?
Built for the Web
Skalierbar
Performant
Flexibles Datenschema
4
Mittwoch, 25. November 2009
WEB bedarf neuer Denkweisen über Daten
STORAGE muss Verteilung und Robustheit bieten
VERFÜGBARKEIT ist King
5. Cloud-Datenbanken?
Riak BigTable
Lotus Notes Amazon S3
Memcached
Redis
Cassandra
MongoDB
Dynamo Dynomite
CouchDB
Amazon SimpleDB
Excel ;)
Tokyo Tyrant Neo4j
Project Voldemort HBase
5
Mittwoch, 25. November 2009
6. Der Status-Quo
Relationale Datenstrukturen
SQL
Transaktionssicherheit
Locking
6
Mittwoch, 25. November 2009
7. Das Problem
7
Mittwoch, 25. November 2009
DATENSTRUKTUREN verändern sich
SCHEMATA sind nicht fix
DATENTYPEN sind nicht immer fix
MIGRATIONSZEITEN steigen mit der Menge Daten
KOMPLEXE Datenstrukturen lassen sich nur schwer abbilden
8. Das Problem
8
Mittwoch, 25. November 2009
TRANSAKTIONSSICHERHEIT oftmals unnötig
LOCKING bremst Performance, erschwert Replikation
INDEX-UPDATES sind oftmals immediate und verzögern die Transaktion
MEHR INDIZES bedeuten mehr Arbeit (Updates, Index-Auswahl bei Query)
http://www.flickr.com/photos/31667878@N03/4113087794
9. Die Lösung
”Simplicity is prerequisite for reliability“
— Edsger W. Dijkstra
9
Mittwoch, 25. November 2009
SIMPLIZITÄT statt Komplexität
DATEN statt Struktur
10. Die Lösung
key => “value”
10
Mittwoch, 25. November 2009
KEY/VALUE für einfache Datenstrukturen
11. Dokumente
11
Mittwoch, 25. November 2009
DOKUMENTE statt fixe Tabellenstrukturen
DOKUMENTE enthalten alle relevanten Daten (self-contained)
SCHEMAPFLEGE entfällt
DATENMIGRATION nicht
12. Dokumente
11
Mittwoch, 25. November 2009
DOKUMENTE statt fixe Tabellenstrukturen
DOKUMENTE enthalten alle relevanten Daten (self-contained)
SCHEMAPFLEGE entfällt
DATENMIGRATION nicht
13. Dokumente
11
Mittwoch, 25. November 2009
DOKUMENTE statt fixe Tabellenstrukturen
DOKUMENTE enthalten alle relevanten Daten (self-contained)
SCHEMAPFLEGE entfällt
DATENMIGRATION nicht
14. Dokumente
11
Mittwoch, 25. November 2009
DOKUMENTE statt fixe Tabellenstrukturen
DOKUMENTE enthalten alle relevanten Daten (self-contained)
SCHEMAPFLEGE entfällt
DATENMIGRATION nicht
15. Integrität
12
Mittwoch, 25. November 2009
Atomicity, Consistency, Isolation, Durability
ACID ist King, oder auch nicht
ACID vs. Performance
ACID ist lokal
EVENTUAL CONSISTENCY statt verteilter Transaktionen
http://www.flickr.com/photos/peapea/40955407/
16. Eventual Consistency
13
Mittwoch, 25. November 2009
UPDATES propagieren irgendwann über alle Knoten
EXISTIERT bereits in RDBMS
17. Append-Only
14
Mittwoch, 25. November 2009
SPEICHERPLATZ ist billig
UPDATE der Daten = NEUE Revision
KEIN Locking weil kein Update In-Place
18. Append-Only
Update
15
Mittwoch, 25. November 2009
19. Append-Only
Update
16
Mittwoch, 25. November 2009
20. Skalierbarkeit
17
Mittwoch, 25. November 2009
OPTIMIERT fuer hohe Concurrency (Read > Write)
REPLIKATION als Feature nicht als Add-On
SKALIERBARKEIT durch Auto-Sharding und/oder Sharding/Hashing
http://www.flickr.com/photos/calliope/3573471166
22. Tools
Riak BigTable
Lotus Notes Amazon S3
Memcached
Redis
Cassandra
MongoDB
Dynamo Dynomite
CouchDB
Amazon SimpleDB
Excel ;)
Tokyo Tyrant Neo4j
Project Voldemort HBase
19
Mittwoch, 25. November 2009
23. Tools
Riak BigTable
Lotus Notes Amazon S3
Memcached
Redis
Cassandra
MongoDB
Dynamo Dynomite
CouchDB
Amazon SimpleDB
Excel ;)
Tokyo Tyrant Neo4j
Project Voldemort HBase
20
Mittwoch, 25. November 2009
24. Redis
Simpler Key-Value-Store
Speichert Strings, Listen und Sets
Semi-Persistent
21
Mittwoch, 25. November 2009
SIMPEL weil einfach gehalten
ATOMARE Operationen auf Strings, Listen und Sets möglich
PERSISTENT über Snapshots und/oder Append-Logs
DATENSET wird im Speicher gehalten
25. Redis
22
Mittwoch, 25. November 2009
SPEED ist King
OPERATIONEN in Redis sind auf Speed und Simplizität getrimmt
SINGLE Prozess
REPLIKATION über Master/Slave
26. Redis
set foo 4
1000
+OK
23
Mittwoch, 25. November 2009
DATENGRÖßE je Key auf 1GB beschränkt
27. Redis
set foo 4
Request
1000
+OK Response
23
Mittwoch, 25. November 2009
DATENGRÖßE je Key auf 1GB beschränkt
28. Amazon SimpleDB
Database as a Service
Hoch-Skaliert
Always On
HTTP-API
24
Mittwoch, 25. November 2009
VERTEILTE Datenbank
ABRECHNUNG nach Computing Hours und Traffic
30. Amazon SimpleDB
26
Mittwoch, 25. November 2009
NEUE ATTRIBUTE erfordern keine Schema-Änderung
BASIS aller Schemalosen Datenbanken
STRINGS ist der einzige Datentyp in SimpleDB
NUMMERN sollten mit Paddings versehen werden
DATUM muss als String formatiert werden
31. Amazon SimpleDB
Memberships
Item #1
Name: Paul, Address: 234 Performance Rd.
Item #2
Name: John, Address: 567 Couch St.
Item #3
Name: Frank, Address: 321 Cloud Ave.
Item #4
Name: Tom, Address: 123 Scale St.
27
Mittwoch, 25. November 2009
DOMAINS sind der Spreadsheet
32. Amazon SimpleDB
Domain
Memberships
Item #1
Name: Paul, Address: 234 Performance Rd.
Item #2
Name: John, Address: 567 Couch St.
Item #3
Name: Frank, Address: 321 Cloud Ave.
Item #4
Name: Tom, Address: 123 Scale St.
27
Mittwoch, 25. November 2009
DOMAINS sind der Spreadsheet
33. Amazon SimpleDB
Memberships
Item #1
Name: Paul, Address: 234 Performance Rd.
Item #2
Name: John, Address: 567 Couch St.
Item #3
Name: Frank, Address: 321 Cloud Ave.
Item #4
Name: Tom, Address: 123 Scale St.
28
Mittwoch, 25. November 2009
ITEMS sind die Einträge
34. Amazon SimpleDB
Item
Memberships
Item #1
Name: Paul, Address: 234 Performance Rd.
Item #2
Name: John, Address: 567 Couch St.
Item #3
Name: Frank, Address: 321 Cloud Ave.
Item #4
Name: Tom, Address: 123 Scale St.
28
Mittwoch, 25. November 2009
ITEMS sind die Einträge
35. Amazon SimpleDB
Memberships
Item #1
Name: Paul, Address: 234 Performance Rd.
Item #2
Name: John, Address: 567 Couch St.
Item #3
Name: Frank, Address: 321 Cloud Ave.
Item #4
Name: Tom, Address: 123 Scale St.
29
Mittwoch, 25. November 2009
ATTRIBUTE die Eigenschaften
VALUES die Werte der Eigenschaften
ATTRIBUTE können mehrere Values haben
36. Amazon SimpleDB
Attribute
Memberships
Item #1
Name: Paul, Address: 234 Performance Rd.
Item #2
Name: John, Address: 567 Couch St.
Item #3
Name: Frank, Address: 321 Cloud Ave.
Item #4
Name: Tom, Address: 123 Scale St.
29
Mittwoch, 25. November 2009
ATTRIBUTE die Eigenschaften
VALUES die Werte der Eigenschaften
ATTRIBUTE können mehrere Values haben
37. Amazon SimpleDB
Attribute Value
Memberships
Item #1
Name: Paul, Address: 234 Performance Rd.
Item #2
Name: John, Address: 567 Couch St.
Item #3
Name: Frank, Address: 321 Cloud Ave.
Item #4
Name: Tom, Address: 123 Scale St.
29
Mittwoch, 25. November 2009
ATTRIBUTE die Eigenschaften
VALUES die Werte der Eigenschaften
ATTRIBUTE können mehrere Values haben
38. Amazon SimpleDB
Wie komme ich an die Daten?
30
Mittwoch, 25. November 2009
39. Amazon SimpleDB
GetAttributes: ItemName=1
31
Mittwoch, 25. November 2009
40. Amazon SimpleDB
select * from memberships where Name = ‘Paul’
32
Mittwoch, 25. November 2009
SUPPORT für rudimentäre Queries
41. Amazon SimpleDB
Simplizität durch Restriktionen
33
Mittwoch, 25. November 2009
SIMPLIZITÄT durch Restriktionen
10GB pro Domain
10 Mio. Attribute pro Domain
1024 Bytes pro Attribute/Value
256 Attribute-Value-Pairs pro Item
VENDOR Lock-In (Daten einfach rein, aber schwerer wieder raus)
42. Amazon SimpleDB
Skalierung mit Eventual Consistency
34
Mittwoch, 25. November 2009
DATENÄNDERUNGEN propagieren nicht sofort
MEHRERE Sekunden kann es dauern
GUT GEEIGNET für read-later Daten
44. CouchDB
Dokument-orientiert
36
Mittwoch, 25. November 2009
ERLANG als Basis
HOHE CONCURRENCY als Philosophie
45. ”CouchDB is built of the Web“
— Jacob Kaplan-Moss
37
Mittwoch, 25. November 2009
RESTful HTTP-API
VIELE ELEMENTE von HTTP werden verwendet
JSON und UTF-8 für Storage und Transfer
46. CouchDB
{
"_id": "BCCD12CBB",
"_rev": "1-‐AB764C",
"type": "person",
"name": "Darth Vader",
"age": 63,
"headware": ["Helmet", "Sombrero"],
"dark_side": true
}
38
Mittwoch, 25. November 2009
DOKUMENTE in JSON
ATTRIBUTE mit _ sind reserviert
_ID ist der Identifier eines Dokumentes
_REV die Revisionsnummer
47. CouchDB
{
"_id": "BCCD12CBB",
"_rev": "1-‐AB764C",
"type": "person",
"name": "Darth Vader",
"age": 63,
"headware": ["Helmet", "Sombrero"],
"dark_side": true
}
39
Mittwoch, 25. November 2009
DOKUMENTE in JSON
ATTRIBUTE mit _ sind reserviert
_ID ist der Identifier eines Dokumentes
_REV die Revisionsnummer
48. CouchDB
{
"_id": "BCCD12CBB",
"_rev": "1-‐AB764C",
"type": "person",
"name": "Darth Vader",
"age": 63,
"headware": ["Helmet", "Sombrero"],
"dark_side": true
}
40
Mittwoch, 25. November 2009
DOKUMENTE in JSON
ATTRIBUTE mit _ sind reserviert
_ID ist der Identifier eines Dokumentes
_REV die Revisionsnummer
49. CouchDB - CRUD
Erstellen/Aktualisieren:
PUT /starwars/BCCD12CBB
Lesen:
GET /starwars/BCCD12CBB
Löschen:
DELETE /starwars/BCCD12CBB
41
Mittwoch, 25. November 2009
50. CouchDB
Wie komme ich an meine Daten?
42
Mittwoch, 25. November 2009
51. CouchDB
Views!
43
Mittwoch, 25. November 2009
MAP/REDUCE über Views in JavaScript oder auch Erlang
B-TREE Indizes für schnellen Lookup
VIEWS werden erst beim Lesen erstellt bzw. aktualisiert
52. CouchDB
function(doc) {
if (doc.headware) {
for (var hat in doc.headware) {
emit(hat, 1);
}
}
}
44
Mittwoch, 25. November 2009
MAP Funktion kann beliebige Attribute mit beliebig vielen Werten indizieren
53. CouchDB
function(keys, values, rereduce) {
return sum(values);
}
45
Mittwoch, 25. November 2009
REDUCE Funktion aggregiert Ergebnisse aus MAP
54. CouchDB
46
Mittwoch, 25. November 2009
B-TREES speichern Referenzen für Views und Key-Lookups
TREE-Storage ist Append-Only
NIEMALS Update In-Place
55. CouchDB
47
Mittwoch, 25. November 2009
STORAGE ist Crash-Proof
KONSISTENZ der Datenbank ist durch Append-Only garantiert
56. CouchDB
48
Mittwoch, 25. November 2009
OFFLINE by Default
57. CouchDB
49
Mittwoch, 25. November 2009
REPLIKATION ist ein zentrales Feature, kein Add-On
JEDER kann zu jeder Zeit zu jedem replizieren
58. CouchDB
POST /_replication
50
Mittwoch, 25. November 2009
REPLIKATION ist nichts weiter als ein POST-Request
KONTINUIERLICHE Replikation ist seit Release 0.10.0 möglich
59. Und?
Daten sind wieder König
51
Mittwoch, 25. November 2009
CONSTRAINTS werden gebrochen
WEB benoetigt mehr Flexibilität als RDBMS
60. Aber!
Kein goldener Hammer
52
Mittwoch, 25. November 2009
RICHTIGES Tool für den richtigen Zweck