Inhalt | 6 |
Geleitwort | 14 |
Vorwort | 16 |
Vorwort zur 2.Auflage | 18 |
Einführung | 20 |
1.1 Historie | 20 |
1.2 Definition und Diskussion | 21 |
1.3 Kategorisierung von NoSQL-Systemen | 24 |
1.3.1 Key/Value-Systeme | 26 |
1.3.2 Column-Family-Systeme | 26 |
1.3.3 Document Stores | 27 |
1.3.4 Graphdatenbanken | 27 |
1.4 Fazit | 28 |
NoSQL – Theoretische Grundlagen | 30 |
2.1 Map/Reduce | 31 |
2.1.1 Funktionale Ursprünge | 31 |
2.1.2 Phasen und Datenfluss | 36 |
2.1.3 Komponenten und Architektur | 38 |
2.1.4 Anwendungsbereiche und Implementierungen | 41 |
2.1.5 Praktisches Beispiel | 43 |
2.1.6 Zusammenfassung | 47 |
2.2 CAP und Eventually Consistent | 49 |
2.2.1 Konsistenzmodell relationaler Datenbanken | 49 |
2.2.2 CAP- Theorem | 50 |
2.2.3 Alternatives Konsistenzmodell: BASE | 52 |
2.3 Consistent-Hashing | 55 |
2.4 Multiversion Concurrency Control | 59 |
2.5 Vector Clocks | 62 |
2.6 Paxos | 66 |
2.7 REST | 70 |
2.7.1 Web-scale? | 70 |
2.7.2 Bausteine | 71 |
2.7.3 Entwurf von REST- Applikationen | 75 |
2.7.4 Skalierung von REST-Systemen | 78 |
2.7.5 Fazit | 80 |
Wide Column Stores | 82 |
3.1 HBase | 83 |
3.1.1 Überblick | 83 |
3.1.2 Allgemeines | 84 |
3.1.3 Datenmodell | 84 |
3.1.4 Installation | 86 |
3.1.5 CRUD-Operationen | 88 |
3.1.6 Fortgeschrittene Abfragen mit Map/Reduce | 93 |
3.1.7 Skalierung und Konfiguration | 96 |
3.1.8 Replikation | 98 |
3.1.9 Bewertung | 99 |
3.2 Cassandra | 101 |
3.2.1 Allgemeines | 101 |
3.2.2 Installation | 102 |
3.2.3 Datenmodell | 103 |
3.2.4 CRUD-Operationen | 107 |
3.2.5 Abfragen in Cassandra | 110 |
3.2.6 Replikation und Skalierung | 112 |
3.2.7 Bewertung | 113 |
3.3 Amazon SimpleDB | 115 |
3.3.1 Allgemeines | 116 |
3.3.2 Datenmodell | 116 |
3.3.3 Datensicherheit und Datenschutz | 117 |
3.3.4 Installation | 118 |
3.3.5 CRUD-Operationen | 119 |
3.3.6 Zugriff mit dem AWS Toolkit für Eclipse | 130 |
3.3.7 Replikation und Skalierung | 133 |
3.3.8 Bewertung | 133 |
Document Stores | 136 |
4.1 CouchDB | 137 |
4.1.1 Überblick | 137 |
4.1.2 Beschreibung | 137 |
4.1.3 Datenmodell | 138 |
4.1.4 View-Modell | 139 |
4.1.5 Zugriffskontrolle | 139 |
4.1.6 Installation | 140 |
4.1.7 CRUD-Operationen | 142 |
4.1.8 Erstellen von Views | 146 |
4.1.9 Replikation | 147 |
4.1.10 Skalierung | 148 |
4.1.11 CouchApps | 148 |
4.1.12 Bewertung | 149 |
4.2 MongoDB | 150 |
4.2.1 Überblick | 150 |
4.2.2 Datenmodell | 152 |
4.2.3 Installation | 153 |
4.2.4 CRUD-Operationen | 154 |
4.2.5 Fortgeschrittene Abfragen und Map/Reduce | 159 |
4.2.6 Skalierung | 162 |
4.2.7 Replikation | 164 |
4.2.8 Bewertung | 167 |
Key/Value-Datenbanken | 170 |
5.1 Redis | 171 |
5.1.1 Überblick | 171 |
5.1.2 Allgemeines | 171 |
5.1.3 Installation | 172 |
5.1.4 CRUD-Operationen | 173 |
5.1.5 Redis Hashes | 179 |
5.1.6 Redis Messaging | 180 |
5.1.7 Zugriff aus anderen Programmiersprachen | 181 |
5.1.8 Replikation und Konfiguration | 183 |
5.1.9 Skalierung | 185 |
5.1.10 Bewertung | 185 |
5.2 Chordless | 187 |
5.2.1 Überblick | 187 |
5.2.2 Allgemeines | 188 |
5.2.3 Installation | 189 |
5.2.4 CRUD-Operationen | 190 |
5.2.5 Fortgeschrittene Abfragen | 192 |
5.2.6 Skalierung, Replikation und Konfiguration | 195 |
5.2.7 Bewertung | 196 |
5.3 Riak | 198 |
5.3.1 Überblick | 198 |
5.3.2 Allgemeines | 198 |
5.3.3 Installation | 201 |
5.3.4 CRUD-Operationen | 201 |
5.3.5 Zugriff aus anderen Programmiersprachen | 203 |
5.3.6 Abfragen und Links in Riak | 206 |
5.3.7 Riak Search | 208 |
5.3.8 Skalierung, Replikation und Konfiguration | 209 |
5.3.9 Bewertung | 210 |
5.4 Membase | 212 |
5.4.1 Überblick | 212 |
5.4.2 Allgemeines | 212 |
5.4.3 Installation | 213 |
5.4.4 Architektur und Konzepte | 215 |
5.4.5 Das Memcached-Protokoll | 218 |
5.4.6 Zugriff aus anderen Programmiersprachen | 218 |
5.4.7 Skalierung und Replikation | 220 |
5.4.8 Der Moxi | 221 |
5.4.9 Die TAP-Schnittstelle | 222 |
5.4.10 Bewertung | 223 |
Graphdatenbanken | 226 |
6.1 Mathematische und technische Grundlagen | 228 |
6.1.1 Das allgemeine Graphenmodell | 228 |
6.1.2 Das Property-Graph-Modell | 229 |
6.1.3 Relationen höherer Ordnung | 232 |
6.1.4 Repräsentation von Graphen | 236 |
6.1.5 Traversierung von Graphen | 238 |
6.1.6 Indizierung von Graphdaten | 240 |
6.1.7 Skalierung mittels Replikation und Partitionierung | 241 |
6.1.8 Graph Query Languages | 244 |
6.1.9 Vergleich mit anderen Datenmodellen | 244 |
6.1.10 Zusammenfassung | 247 |
6.2 Der Tinkerpop Graph Processing Stack | 249 |
6.2.1 Blueprints | 250 |
6.2.2 Blueprints.NET | 253 |
6.2.3 Frames | 255 |
6.2.4 Pipes und Pipes.NET | 256 |
6.2.5 Gremlin | 259 |
6.2.6 Pacer | 263 |
6.2.7 Rexster | 263 |
6.3 AllegroGraph | 267 |
6.3.1 Datenmodell | 268 |
6.3.2 Installation | 269 |
6.3.3 CRUD-Operationen mit Java | 270 |
6.3.4 RDF-Reasoning und Konsistenzkriterien | 276 |
6.3.5 Bewertung | 278 |
6.4 DEX | 279 |
6.4.1 Beschreibung | 280 |
6.4.2 Datenmodell | 281 |
6.4.3 Installation | 281 |
6.4.4 CRUD-Operationen | 281 |
6.4.5 Graphoperationen | 283 |
6.4.6 DEX-Skripting | 284 |
6.4.7 DEX-Shell | 286 |
6.4.8 Bewertung | 287 |
6.5 HyperGraphDB | 288 |
6.5.1 Datenmodell | 288 |
6.5.2 Installation | 289 |
6.5.3 CRUD-Operationen | 290 |
6.5.4 Graphoperationen | 293 |
6.5.5 Peer- To-Peer-Framework | 293 |
6.5.6 Bewertung | 293 |
6.6 InfiniteGraph | 295 |
6.6.1 Beschreibung | 295 |
6.6.2 Datenmodell | 296 |
6.6.3 Installation | 297 |
6.6.4 CRUD-Operationen | 297 |
6.6.5 Graphoperationen | 301 |
6.6.6 Bewertung | 302 |
6.7 InfoGrid | 303 |
6.7.1 Beschreibung | 304 |
6.7.2 Datenmodell | 304 |
6.7.3 Installation | 305 |
6.7.4 CRUD-Operationen | 305 |
6.7.5 Models | 308 |
6.7.6 Bewertung | 309 |
6.8 Neo4j | 309 |
6.8.1 Installation | 310 |
6.8.2 CRUD-Operationen mit der Java- API | 311 |
6.8.3 CRUD-Operationen mit JRuby | 315 |
6.8.4 HTTP/REST-Schnittstelle | 316 |
6.8.5 Cypher | 319 |
6.8.6 Replikation und Skalierung | 320 |
6.8.7 Bewertung | 320 |
6.9 sones GraphDB | 321 |
6.9.1 Datenmodell | 322 |
6.9.2 Installation | 323 |
6.9.3 CRUD-Operationen | 323 |
6.9.4 Bewertung | 327 |
6.10 Weitere graphorientierte Ansätze | 328 |
6.10.1 Twitters FlockDB | 328 |
6.10.2 Google Pregel | 330 |
6.10.3 Apache Hama | 334 |
6.10.4 Microsoft Trinity | 336 |
6.10.5 Die VertexDB-Familie | 340 |
6.10.6 Filament | 343 |
OrientDB | 348 |
7.1 Überblick | 348 |
7.2 Allgemeines | 349 |
7.3 Datenmodell | 349 |
7.4 Struktur der Datenablage | 351 |
7.5 Datenbanksicherheit | 351 |
7.6 Installation | 352 |
7.7 CRUD-Operationen DocumentDB | 355 |
7.8 CRUD-Operationen ObjectDB | 359 |
7.9 CRUD-Operationen GraphDB | 362 |
7.10 Datenbankschemata | 366 |
7.11 Transaktionen | 366 |
7.12 HTTP-REST-Schnittstelle | 367 |
7.13 Replizierung | 370 |
7.14 Hosting über NuvolaBase | 372 |
7.15 Bewertung | 372 |
Weitere NoSQL-Datenbanken | 374 |
8.1 Wide Column Stores | 375 |
8.1.1 Hypertable | 375 |
8.1.2 Cloudera | 376 |
8.2 Document Stores | 377 |
8.3 Key/Value/Tupel-Stores | 378 |
8.3.1 Amazon Dynamo | 378 |
8.3.2 Dynomite und KAI | 379 |
8.3.3 Voldemort | 379 |
8.3.4 Scalaris | 382 |
8.3.5 Die Tokyo-Produktfamilie | 383 |
8.3.6 Weitere Key/Value-Systeme | 385 |
8.4 Google App Engine Storage | 386 |
8.5 Weitere ‚Soft’-NoSQL-Lösungen | 387 |
Orientierung im Datenbankraum | 390 |
9.1 Grundlegende Gedanken | 391 |
9.2 Datenanalyse | 392 |
9.3 Transaktionsmodell | 394 |
9.4 Performancesapekte | 395 |
9.5 Abfrageanforderungen | 396 |
9.6 Architektur | 397 |
9.7 Weitere nicht-funktionale Anforderungen | 398 |
9.8 Anwendungsfälle für NoSQL-Datenbanken | 400 |
9.9 Fazit | 401 |
Register | 404 |