Dokumentendatenbanken – Einordnung
Übersicht
- Dokumentendatenbanken speichern Daten als semi-strukturierte Dokumente (JSON, BSON, XML)
- Jedes Dokument ist ein eigenständiges Objekt mit beliebig tiefer Verschachtelung
- Kein festes Schema – verschiedene Dokumente in einer Collection können unterschiedliche Felder haben
- Bekannte Systeme: MongoDB, CouchDB, Couchbase, Amazon DocumentDB, Firebase Firestore
- Dokumentenstrukturen werden inzwischen von relationalen Datebanken unterstützt (z.B. PostgreSQL mit JSONB-Typ)
Dokumentenorientierte Datenbank
Datenbank = Menge von Kollektionen
Kollektion
- Menge von Dokumenten
- Entspricht Tabelle
- Flexibles Schema
Dokument
- Entspricht einer Zeile in einer Tabelle
- Ähnliche Dokumente in einer Kollektion
Dokumentenstruktur
Typischerweise JSON
{
"name": "Alice Meier",
"age": 28,
"active": true,
"address": {
"street": "Unter den Linden 1",
"city": "Berlin",
"zip": "10117"
},
"tags": ["premium", "newsletter"],
"orders": [
{ "id": "o1", "total": 99.90, "date": ISODate("2024-01-10") },
{ "id": "o2", "total": 49.50, "date": ISODate("2024-03-02") }
],
"meta": null
}
Anwendungsbereiche
Übersicht
- Anwendungen mit reichhaltigen Domänenmodellen
- Web-Anwendungen mit großer Nutzeranzahl
- Anwendungen mit starker horizontaler Skalierung
- CRM-Systeme
- Katalogsysteme
- Portale, News, Wiki, Foren, Blogs
Gut geeignet wenn...
- Datenstruktur variiert pro Eintrag (Produktkatalog, CMS)
- Schnelle Schema-Evolution während Entwicklung
- Daten natürlich als hierarchische Objekte modellierbar
- Horizontale Skalierung auf viele Schreibvorgänge nötig
- Dokumente werden typischerweise als Ganzes gelesen/geschrieben
- Semi-strukturierte oder unstrukturierte Daten (Logs, Events)
Weniger geeignet wenn...
- Stark vernetzte Daten mit vielen Beziehungen (eher Graph-DB)
- Komplexe Multi-Tabellen-Transaktionen häufig nötig
- Strenge referentielle Integrität gefordert
- Komplexe analytische SQL-Abfragen
Bekannte Systeme
MongoDB
- Speichert Daten als BSON (ähnlich JSON)
- Schemafrei (flexible Datenstruktur)
- Horizontale Skalierung (Sharding)
- Sehr verbreitet, großes Ökosystem
CouchDB
- JSON-Dokumente + HTTP/REST API
- Multi-Master-Replikation
- Offline-Synchronisation möglich
- Fokus auf Verfügbarkeit und einfache Integration
Couchbase
- Kombination aus Key-Value und Dokumenten-DB
- Hohe Performance (In-Memory)
- SQL-ähnliche Abfragesprache (N1QL)
- Gute Skalierbarkeit
Amazon DocumentDB
- Voll gemanagter Service (AWS)
- MongoDB-kompatibel
- Automatische Skalierung & Backups
- Stark integriert ins AWS-Ökosystem
Azure Cosmos DB
- Multi-Modell-Datenbank (inkl. Dokumente)
- Globale Verteilung (Multi-Region)
- Niedrige Latenz weltweit
- Verschiedene APIs (SQL, MongoDB, Cassandra)
Firestore
- Dokumentenorientierte Cloud-Datenbank
- Echtzeit-Synchronisation
- Starke Integration mit Firebase
- Automatische Skalierung
Datenmodell: Dokument vs. Relation
Bild: Sadalage, Fowler: NoSql Distilled
Kernunterschiede
- Relationales DBMS: normalisierte Tabellen, Joins erforderlich
- Dokument-DB: verwandte Daten in einem Dokument – kein Join nötig
- Dokumente entsprechen oft direkt den Anwendungsobjekten (z.B. Java-Klassen)
- Arrays und verschachtelte Objekte nativ unterstützt
Unterschiedliche Aggregate
- Dokumente sind Einheiten des Datentransfers
- Entscheidung über die Struktur der Aggregate
- Redundanz
- Anzahl Roundtrips
- Änderungsumfang
- Atomarität
Ein Aggregat
Redundante Speicherung von Kundendaten
Zwei Aggregate
Trennung von Kundendaten und Bestellinformationen
Lookup erforderlich, zweiter Roundtrip
Bilder: Sadalage, Fowler: NoSql Distilled
Anwendungsfall: E-Commerce-Produktkatalog
{
"sku": "LAPTOP-PRO-15",
"name": "Laptop Pro 15",
"price": 1299.00,
"category": "electronics",
"brand": "TechCo",
"stock": 42,
"images": ["img1.jpg", "img2.jpg"],
"specs": {
"ram_gb": 16,
"ssd_gb": 512,
"screen_inch": 15.6,
"cpu": "Intel i7-13700H"
},
"variants": [
{ "color": "silver", "sku": "…-S" },
{ "color": "black", "sku": "…-B" }
],
"ratings": {
"avg": 4.7, "count": 312
}
}
Produktkatalog
- Verschiedene Produktkategorien haben völlig unterschiedliche Attribute
- Kein Schema-Change bei neuen Produkttypen
- Verschachtelte Spezifikationen und Varianten nativ unterstützt
- Bewertungen direkt eingebettet – kein JOIN für Durchschnitt
Anwendungsfall: Content Management System
{
"title": "Einführung in MongoDB",
"status": "published",
"author": { "id": "u1", "name": "Alice" },
"tags": ["mongodb", "nosql", "tutorial"],
"createdAt": ISODate("2024-02-01"),
"updatedAt": ISODate("2024-03-10"),
"content": "# MongoDB\n\nMongoDB ist…",
"seo": {
"metaTitle": "…",
"metaDesc": "…",
"canonical": "/blog/einfuehrung-mongodb"
},
"locales": {
"de": { "title": "Einführung …" },
"en": { "title": "Introduction …" }
},
"comments": [
{ "user": "bob", "text": "Super!",
"date": ISODate("2024-02-05") }
]
}
CMS
- Flexibles Content-Schema
- Mehrsprachigkeit direkt im Dokument
- SEO-Daten, Kommentare eingebettet