Fehler
Home Up PDF Prof. Dr. Ingo Claßen
Dokumentendatenbanken - ADBKT

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