|
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 |
|