Einstieg in die Welt nichtrelationaler Web 2.0 Datenbanken
E-Book, Deutsch, 412 Seiten
ISBN: 978-3-446-42855-3
Verlag: Hanser, Carl
Format: PDF
Kopierschutz: Adobe DRM (»Systemvoraussetzungen)
Autoren/Hrsg.
Weitere Infos & Material
1;Inhalt;6
2;Geleitwort;14
3;Vorwort;16
3.1;Vorwort zur 2.Auflage;18
4;Einführung;20
4.1;1.1 Historie;20
4.2;1.2 Definition und Diskussion;21
4.3;1.3 Kategorisierung von NoSQL-Systemen;24
4.3.1;1.3.1 Key/Value-Systeme;26
4.3.2;1.3.2 Column-Family-Systeme;26
4.3.3;1.3.3 Document Stores;27
4.3.4;1.3.4 Graphdatenbanken;27
4.4;1.4 Fazit;28
5;NoSQL – Theoretische Grundlagen;30
5.1;2.1 Map/Reduce;31
5.1.1;2.1.1 Funktionale Ursprünge;31
5.1.2;2.1.2 Phasen und Datenfluss;36
5.1.3;2.1.3 Komponenten und Architektur;38
5.1.4;2.1.4 Anwendungsbereiche und Implementierungen;41
5.1.5;2.1.5 Praktisches Beispiel;43
5.1.6;2.1.6 Zusammenfassung;47
5.2;2.2 CAP und Eventually Consistent;49
5.2.1;2.2.1 Konsistenzmodell relationaler Datenbanken;49
5.2.2;2.2.2 CAP- Theorem;50
5.2.3;2.2.3 Alternatives Konsistenzmodell: BASE;52
5.3;2.3 Consistent-Hashing;55
5.4;2.4 Multiversion Concurrency Control;59
5.5;2.5 Vector Clocks;62
5.6;2.6 Paxos;66
5.7;2.7 REST;70
5.7.1;2.7.1 Web-scale?;70
5.7.2;2.7.2 Bausteine;71
5.7.3;2.7.3 Entwurf von REST- Applikationen;75
5.7.4;2.7.4 Skalierung von REST-Systemen;78
5.7.5;2.7.5 Fazit;80
6;Wide Column Stores;82
6.1;3.1 HBase;83
6.1.1;3.1.1 Überblick;83
6.1.2;3.1.2 Allgemeines;84
6.1.3;3.1.3 Datenmodell;84
6.1.4;3.1.4 Installation;86
6.1.5;3.1.5 CRUD-Operationen;88
6.1.6;3.1.6 Fortgeschrittene Abfragen mit Map/Reduce;93
6.1.7;3.1.7 Skalierung und Konfiguration;96
6.1.8;3.1.8 Replikation;98
6.1.9;3.1.9 Bewertung;99
6.2;3.2 Cassandra;101
6.2.1;3.2.1 Allgemeines;101
6.2.2;3.2.2 Installation;102
6.2.3;3.2.3 Datenmodell;103
6.2.4;3.2.4 CRUD-Operationen;107
6.2.5;3.2.5 Abfragen in Cassandra;110
6.2.6;3.2.6 Replikation und Skalierung;112
6.2.7;3.2.7 Bewertung;113
6.3;3.3 Amazon SimpleDB;115
6.3.1;3.3.1 Allgemeines;116
6.3.2;3.3.2 Datenmodell;116
6.3.3;3.3.3 Datensicherheit und Datenschutz;117
6.3.4;3.3.4 Installation;118
6.3.5;3.3.5 CRUD-Operationen;119
6.3.6;3.3.6 Zugriff mit dem AWS Toolkit für Eclipse;130
6.3.7;3.3.7 Replikation und Skalierung;133
6.3.8;3.3.8 Bewertung;133
7;Document Stores;136
7.1;4.1 CouchDB;137
7.1.1;4.1.1 Überblick;137
7.1.2;4.1.2 Beschreibung;137
7.1.3;4.1.3 Datenmodell;138
7.1.4;4.1.4 View-Modell;139
7.1.5;4.1.5 Zugriffskontrolle;139
7.1.6;4.1.6 Installation;140
7.1.7;4.1.7 CRUD-Operationen;142
7.1.8;4.1.8 Erstellen von Views;146
7.1.9;4.1.9 Replikation;147
7.1.10;4.1.10 Skalierung;148
7.1.11;4.1.11 CouchApps;148
7.1.12;4.1.12 Bewertung;149
7.2;4.2 MongoDB;150
7.2.1;4.2.1 Überblick;150
7.2.2;4.2.2 Datenmodell;152
7.2.3;4.2.3 Installation;153
7.2.4;4.2.4 CRUD-Operationen;154
7.2.5;4.2.5 Fortgeschrittene Abfragen und Map/Reduce;159
7.2.6;4.2.6 Skalierung;162
7.2.7;4.2.7 Replikation;164
7.2.8;4.2.8 Bewertung;167
8;Key/Value-Datenbanken;170
8.1;5.1 Redis;171
8.1.1;5.1.1 Überblick;171
8.1.2;5.1.2 Allgemeines;171
8.1.3;5.1.3 Installation;172
8.1.4;5.1.4 CRUD-Operationen;173
8.1.5;5.1.5 Redis Hashes;179
8.1.6;5.1.6 Redis Messaging;180
8.1.7;5.1.7 Zugriff aus anderen Programmiersprachen;181
8.1.8;5.1.8 Replikation und Konfiguration;183
8.1.9;5.1.9 Skalierung;185
8.1.10;5.1.10 Bewertung;185
8.2;5.2 Chordless;187
8.2.1;5.2.1 Überblick;187
8.2.2;5.2.2 Allgemeines;188
8.2.3;5.2.3 Installation;189
8.2.4;5.2.4 CRUD-Operationen;190
8.2.5;5.2.5 Fortgeschrittene Abfragen;192
8.2.6;5.2.6 Skalierung, Replikation und Konfiguration;195
8.2.7;5.2.7 Bewertung;196
8.3;5.3 Riak;198
8.3.1;5.3.1 Überblick;198
8.3.2;5.3.2 Allgemeines;198
8.3.3;5.3.3 Installation;201
8.3.4;5.3.4 CRUD-Operationen;201
8.3.5;5.3.5 Zugriff aus anderen Programmiersprachen;203
8.3.6;5.3.6 Abfragen und Links in Riak;206
8.3.7;5.3.7 Riak Search;208
8.3.8;5.3.8 Skalierung, Replikation und Konfiguration;209
8.3.9;5.3.9 Bewertung;210
8.4;5.4 Membase;212
8.4.1;5.4.1 Überblick;212
8.4.2;5.4.2 Allgemeines;212
8.4.3;5.4.3 Installation;213
8.4.4;5.4.4 Architektur und Konzepte;215
8.4.5;5.4.5 Das Memcached-Protokoll;218
8.4.6;5.4.6 Zugriff aus anderen Programmiersprachen;218
8.4.7;5.4.7 Skalierung und Replikation;220
8.4.8;5.4.8 Der Moxi;221
8.4.9;5.4.9 Die TAP-Schnittstelle;222
8.4.10;5.4.10 Bewertung;223
9;Graphdatenbanken;226
9.1;6.1 Mathematische und technische Grundlagen;228
9.1.1;6.1.1 Das allgemeine Graphenmodell;228
9.1.2;6.1.2 Das Property-Graph-Modell;229
9.1.3;6.1.3 Relationen höherer Ordnung;232
9.1.4;6.1.4 Repräsentation von Graphen;236
9.1.5;6.1.5 Traversierung von Graphen;238
9.1.6;6.1.6 Indizierung von Graphdaten;240
9.1.7;6.1.7 Skalierung mittels Replikation und Partitionierung;241
9.1.8;6.1.8 Graph Query Languages;244
9.1.9;6.1.9 Vergleich mit anderen Datenmodellen;244
9.1.10;6.1.10 Zusammenfassung;247
9.2;6.2 Der Tinkerpop Graph Processing Stack;249
9.2.1;6.2.1 Blueprints;250
9.2.2;6.2.2 Blueprints.NET;253
9.2.3;6.2.3 Frames;255
9.2.4;6.2.4 Pipes und Pipes.NET;256
9.2.5;6.2.5 Gremlin;259
9.2.6;6.2.6 Pacer;263
9.2.7;6.2.7 Rexster;263
9.3;6.3 AllegroGraph;267
9.3.1;6.3.1 Datenmodell;268
9.3.2;6.3.2 Installation;269
9.3.3;6.3.3 CRUD-Operationen mit Java;270
9.3.4;6.3.4 RDF-Reasoning und Konsistenzkriterien;276
9.3.5;6.3.5 Bewertung;278
9.4;6.4 DEX;279
9.4.1;6.4.1 Beschreibung;280
9.4.2;6.4.2 Datenmodell;281
9.4.3;6.4.3 Installation;281
9.4.4;6.4.4 CRUD-Operationen;281
9.4.5;6.4.5 Graphoperationen;283
9.4.6;6.4.6 DEX-Skripting;284
9.4.7;6.4.7 DEX-Shell;286
9.4.8;6.4.8 Bewertung;287
9.5;6.5 HyperGraphDB;288
9.5.1;6.5.1 Datenmodell;288
9.5.2;6.5.2 Installation;289
9.5.3;6.5.3 CRUD-Operationen;290
9.5.4;6.5.4 Graphoperationen;293
9.5.5;6.5.5 Peer- To-Peer-Framework;293
9.5.6;6.5.6 Bewertung;293
9.6;6.6 InfiniteGraph;295
9.6.1;6.6.1 Beschreibung;295
9.6.2;6.6.2 Datenmodell;296
9.6.3;6.6.3 Installation;297
9.6.4;6.6.4 CRUD-Operationen;297
9.6.5;6.6.5 Graphoperationen;301
9.6.6;6.6.6 Bewertung;302
9.7;6.7 InfoGrid;303
9.7.1;6.7.1 Beschreibung;304
9.7.2;6.7.2 Datenmodell;304
9.7.3;6.7.3 Installation;305
9.7.4;6.7.4 CRUD-Operationen;305
9.7.5;6.7.5 Models;308
9.7.6;6.7.6 Bewertung;309
9.8;6.8 Neo4j;309
9.8.1;6.8.1 Installation;310
9.8.2;6.8.2 CRUD-Operationen mit der Java- API;311
9.8.3;6.8.3 CRUD-Operationen mit JRuby;315
9.8.4;6.8.4 HTTP/REST-Schnittstelle;316
9.8.5;6.8.5 Cypher;319
9.8.6;6.8.6 Replikation und Skalierung;320
9.8.7;6.8.7 Bewertung;320
9.9;6.9 sones GraphDB;321
9.9.1;6.9.1 Datenmodell;322
9.9.2;6.9.2 Installation;323
9.9.3;6.9.3 CRUD-Operationen;323
9.9.4;6.9.4 Bewertung;327
9.10;6.10 Weitere graphorientierte Ansätze;328
9.10.1;6.10.1 Twitters FlockDB;328
9.10.2;6.10.2 Google Pregel;330
9.10.3;6.10.3 Apache Hama;334
9.10.4;6.10.4 Microsoft Trinity;336
9.10.5;6.10.5 Die VertexDB-Familie;340
9.10.6;6.10.6 Filament;343
10;OrientDB;348
10.1;7.1 Überblick;348
10.2;7.2 Allgemeines;349
10.3;7.3 Datenmodell;349
10.4;7.4 Struktur der Datenablage;351
10.5;7.5 Datenbanksicherheit;351
10.6;7.6 Installation;352
10.7;7.7 CRUD-Operationen DocumentDB;355
10.8;7.8 CRUD-Operationen ObjectDB;359
10.9;7.9 CRUD-Operationen GraphDB;362
10.10;7.10 Datenbankschemata;366
10.11;7.11 Transaktionen;366
10.12;7.12 HTTP-REST-Schnittstelle;367
10.13;7.13 Replizierung;370
10.14;7.14 Hosting über NuvolaBase;372
10.15;7.15 Bewertung;372
11;Weitere NoSQL-Datenbanken;374
11.1;8.1 Wide Column Stores;375
11.1.1;8.1.1 Hypertable;375
11.1.2;8.1.2 Cloudera;376
11.2;8.2 Document Stores;377
11.3;8.3 Key/Value/Tupel-Stores;378
11.3.1;8.3.1 Amazon Dynamo;378
11.3.2;8.3.2 Dynomite und KAI;379
11.3.3;8.3.3 Voldemort;379
11.3.4;8.3.4 Scalaris;382
11.3.5;8.3.5 Die Tokyo-Produktfamilie;383
11.3.6;8.3.6 Weitere Key/Value-Systeme;385
11.4;8.4 Google App Engine Storage;386
11.5;8.5 Weitere ‚Soft’-NoSQL-Lösungen;387
12;Orientierung im Datenbankraum;390
12.1;9.1 Grundlegende Gedanken;391
12.2;9.2 Datenanalyse;392
12.3;9.3 Transaktionsmodell;394
12.4;9.4 Performancesapekte;395
12.5;9.5 Abfrageanforderungen;396
12.6;9.6 Architektur;397
12.7;9.7 Weitere nicht-funktionale Anforderungen;398
12.8;9.8 Anwendungsfälle für NoSQL-Datenbanken;400
12.9;9.9 Fazit;401
13;Register;404
8 Weitere NoSQLDatenbanken (S. 355-356)
In den vorigen Kapiteln wurde gut ein Dutzend der wichtigsten NoSQL-Datenbanken ausführlich erwähnt. Daher werden wir Ihnen in diesem Kapitel einen kurzen Überblick über die wichtigsten weiteren NoSQL-Datenbanken geben, die nachweisbar Einzug in die Industrie gefunden haben. Wie groß der Raum der NoSQL-Systeme derzeit tatsächlich ist, ist nicht zu bestimmen. Auf den wichtigsten Referenzseiten zu NoSQL wird alle paar Tage ein neues Datenbanksystem eingetragen. Weit über 100 NoSQL-Systeme sind dort bereits verzeichnet. Sicherlich sind viele von diesen Datenbanken noch jung und auch viele von kleinen Gruppen oder Einzelpersonen erstellt.
Dennoch dürften derzeit mindestens 30 bis 40 dieser Datenbanken bereits in nichttrivialen Anwendungen in der Industrie eingesetzt sein und eine Community mitbringen. Ziel dieses Kapitels ist, diese Anwendungen vorzustellen und auf Stärken und Schwächen hinzuweisen, damit Sie diese Systeme vielleicht auch in den Lösungsraum mit einbeziehen können. Wir beginnen mit dem Bereich der Wide Column Stores, in dem es derzeit noch sehr wenige Systeme gibt.
Hier fällt auch die Abgrenzung zu vielen Key/Value-Datenbanken (siehe Kapitel 3 und 5) – aufgrund der mächtigen Erweiterungen ebendieser – schwer. Aber mit Hypertable und Cloudera gibt es zwei Vertreter, die als Hadoop-Derivate in der Liga der Petabyte-Scale-Datenbanken spielen. Im folgenden Teil werden die NoSQL-Datenbanken vorgestellt, die in der ausführlichen Analyse vorher keinen Platz mehr gefunden haben, aber dennoch relevant für eine Evaluation wären. Darunter sind Systeme wie Amazon Dynamo, die die NoSQL-Welt nachhaltig geprägt haben, aber nicht Open Source sind. Oder das NoSQL-System Voldemort, welches im Vergleich zu vielen anderen Key/Value-Systemen bereits sehr oft eingesetzt wird.
8.1 Wide Column Stores
8.1.1 Hypertable
Hypertable wurde von Doug Judd gegründet und ahmt die Idee von Googles BigTable mit dem Map/Reduce-Framework beziehungsweise von Apache Hadoop nach. Da Hypertable Open Source ist, gibt es zwei Websites:
- http://www.hypertable.org
- http://www.hypertable.com
Die erste Website hostet das Open Source-Projekt selbst. Die zweite bietet kommerziellen Support auf Hypertable-Basis. Hypertable kann auf Hadoop aufsetzen und die Daten auch in das HDFS-Dateisystem speichern. Hypertable ist stark an das Googles BigTable-Modell angelehnt. Google selbst bietet damit Services wie YouTube, Blogger, Google Earth, Google Maps, Orkut und natürlich die Suchmaschine selbst an.
Dies ist also das Anwendungsfeld, das Hypertable anspricht. Hypertable wird auch von baidu.com und rediff.com eingesetzt. Ersteres ist das chinesische Äquivalent zur Suchmaschine Google und Letzteres eines der größten indischen Web-Portale. Anders als Apache Hadoop ist Hypertable in C++ geschrieben und daher um einiges schneller. Das primäre Ziel von Hypertable ist es, sehr große Datenvolumen zu verarbeiten und diese Online-Anwendungen zur Verfügung zu stellen. Die Datensätze werden in tabellenähnlicher Form zur Verfügung gestellt und über einen Primärschüssel indiziert. Gleichzeitig werden die Daten auch in dieser Primärschlüsselabfolge gespeichert, sodass Bereichsabfragen sehr effizient durchgeführt werden können.