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

Ü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") }
  ]
}