Definition: Embedding (NoSQL)

Als Embedding (de. Einbettung) bezeichnen wir im Kontext von NoSQL die Praxis, verwandte Daten direkt innerhalb eines einzelnen Dokuments zu speichern, anstatt sie als separate, referenzierte Dokumente zu speichern.

Embedding wird typischerweise dann verwendet, wenn die eingebetteten Daten zusammen mit dem Hauptdokument abgerufen und häufig zusammen gelesen oder geschrieben werden.

  • Vorteile
    • Performance: Durch das Einbetten verwandter Daten in ein Dokument wird die Notwendigkeit für mehrere Datenbankabfragen reduziert, was die Geschwindigkeit von Lesezugriffen erhöht.
    • Einfachheit: Die Datenstruktur wird vereinfacht, da keine zusätzlichen Verweise oder Joins erforderlich sind.
  • Nachteile
    • Datenredundanz: Wenn gleiche Daten in mehreren Dokumenten eingebettet werden müssen, kann dies zu Redundanz und erhöhtem Speicherverbrauch führen.
    • Inkonsistenz: Mit der Datenredundanz einher geht die Herausforderung, duplizierte Informationen an mehreren Orten konsistent zu halten.
    • Keine Transaktionssicherheit: Da es zudem keine Transaktionssicherheit gibt, wir aber potentiell an vielen Stellen Änderungen vornehmen müssen, kann es auch hierdurch zu Datenfehlern kommen.
    • Größe der Dokumente: Große eingebettete Dokumente können zu Performanceproblemen führen, insbesondere bei sehr großen oder sehr häufig geänderten Daten.

Beispiel: Customer und Order

Anmerkung

Embedding in Column Family Datenbanken

Früher wurden zum Einbetten Timestamps oder Column Qualifiers zweckentfremdet.

Mittlerweile bietet bspw. Cassandra collection types (Array, Maps und Sets) an.

Es ist jedoch wichtig anzumerken, dass Column Family Datenbanken nicht für tief geschachtelte Hierarchien gebaut sind, wodurch diese schnell zu Performanceproblemen führen können.