Übersicht
- Speicherung semi-strukturierter Dokumente
- Verschachtelte Strukturen
- Kein festes Schema – verschiedene Dokumente einer Art können unterschiedliche Felder haben
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") }
],
"interaction": "user interaction notes, unstructured text, etc."
}
Anwendungsbereiche
- Katalogsysteme
- Content Management Systeme
- Wikis
- Foren
- Blogs
- Anwendungen mit reichhaltigen Domänenmodellen
Bekannte Systeme
MongoDB
- On-Premise und Serverless (MongoDB Atlas)
- Horizontale Skalierung (Sharding)
- Sehr verbreitet, großes Ökosystem
CouchDB
- On-Premise
- Multi-Master-Replikation
- Offline-Synchronisation möglich
- Fokus auf Verfügbarkeit und einfache Integration
Couchbase
- On-Premise und Serverless (Couchbase Capella)
- Kombination aus Key-Value und Dokumenten-DB
- Hohe Performance (In-Memory)
- SQL-ähnliche Abfragesprache (N1QL)
- Gute Skalierbarkeit
Amazon DocumentDB
- Serverless (AWS)
- MongoDB-kompatibel
- Automatische Skalierung & Backups
- Stark integriert ins AWS-Ökosystem
Azure Cosmos DB
- Serverless (Microsoft Azure)
- Multi-Modell-Datenbank (inkl. Dokumente)
- Globale Verteilung (Multi-Region)
- Niedrige Latenz weltweit
- Verschiedene APIs (SQL, MongoDB, Cassandra)
Firestore
- Serverless (Google Cloud)
- Dokumentenorientierte Cloud-Datenbank
- Echtzeit-Synchronisation
- Starke Integration mit Firebase
- Automatische Skalierung
Datenmodell: Dokument vs. Relation
- Relationales DBMS: normalisierte Tabellen, Joins erforderlich
- Dokument-DB: verwandte Daten in einem Dokument – kein Join nötig
- Redundanz
- Dokumente entsprechen oft direkt den Anwendungsobjekten (z.B. Java-Klassen)
- Arrays und verschachtelte Objekte nativ unterstützt
Bild: Sadalage, Fowler: NoSql Distilled
Unterschiedliche Aggregate
- Dokumente sind Einheiten des Datentransfers
- Entscheidung über die Struktur der Aggregate
- Redundanz
- Anzahl Roundtrips
- Änderungsumfang
- Atomarität
Ein Aggregat
- Dokument kann sehr groß werden
- Änderung von Kundeninformationen erfordert Aktualisierung des gesamten Dokuments
Zwei Aggregate
- Trennung von Kundendaten und Bestellinformationen
- Änderung von Kundeninformationen hat wesentlich geringeren Änderungsumfang
- Lookup erforderlich, zweiter Roundtrip
Bilder: Sadalage, Fowler: NoSql Distilled
Anwendungsfall: E-Commerce-Produktkatalog
- Verschiedene Produktkategorien haben völlig unterschiedliche Attribute
- Keine Schemaänderung bei neuen Produkttypen
- Verschachtelte Spezifikationen und Varianten nativ unterstützt
{
"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" }
]
}
Anwendungsfall: Content Management System
- Flexibles Content-Schema
- Mehrsprachigkeit direkt im Dokument
- SEO-Daten, Kommentare eingebettet
{
"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") }
]
}