Welche Mechanismen nutzt Apache Iceberg, um Snapshot-Isolation und ACID-Transaktionen auf S3 zu gewährleisten?
Apache Iceberg realisiert Snapshot-Isolation und ACID-Transaktionen durch eine hierarchische Metadatenstruktur, die den Zustand einer Tabelle zu einem exakten Zeitpunkt fixiert. Da S3 ein Objekt-Speicher ist und keine nativen Transaktionen oder atomaren Datei-Umbenennungen unterstützt, verlagert Iceberg die Zustandsverwaltung in eine Metadaten-Hierarchie und einen externen Katalog.
Die Architektur gliedert sich in folgende Ebenen:
| Ebene | Funktion |
|---|---|
| Catalog | Speichert den Pointer auf die aktuell gültige metadata.json-Datei. |
| Metadata File | Definiert den aktuellen Snapshot, Tabelleneigenschaften und die Historie. |
| Manifest List | Listet alle Manifest-Dateien auf, die zu einem spezifischen Snapshot gehören. |
| Manifest File | Enthält die Liste der tatsächlichen Datendateien (z. B. Parquet) inklusive Statistiken. |
Snapshot-Isolation wird dadurch erreicht, dass Leser immer auf die Metadaten-Datei zugreifen, die zum Zeitpunkt des Startens der Abfrage im Katalog als "aktuell" markiert war. Während ein Schreibvorgang neue Daten- und Metadaten-Dateien auf S3 schreibt, bleiben die bestehenden Dateien für aktive Leser unverändert.
ACID-Transaktionen werden über Optimistic Concurrency Control (OCC) gesteuert. Ein Schreibvorgang folgt diesem Prozess:
- Auslesen des aktuellen Snapshot-Pointers aus dem Katalog.
- Erstellung neuer Daten- und Metadaten-Dateien auf S3.
- Versuch, den Pointer im Katalog atomar auf die neue Metadaten-Datei zu aktualisieren.
Schlägt dieser atomare Wechsel fehl – etwa weil ein anderer Prozess den Pointer bereits aktualisiert hat –, prüft Iceberg, ob die Änderungen kollidieren. Falls keine Überschneidungen vorliegen, wird der Vorgang automatisch wiederholt. Diese Entkopplung von Daten und Metadaten ermöglicht es uns, im Rahmen unserer IT-Consulting & Digitale Strategie hochskalierbare Data Lakes auf S3 zu implementieren, ohne auf proprietäre Dateisysteme angewiesen zu sein.
Wir empfehlen den Einsatz von Apache Iceberg gegenüber klassischen Hive-Tabellen immer dann, wenn konsistente Concurrent-Writes und Time-Travel-Abfragen gefordert sind, da die manuelle Verwaltung auf Dateiebene bei steigender Datenmenge technisch nicht mehr beherrschbar ist.
Andere Fragen in dieser Kategorie
Andere Nutzer suchten auch nach:
Diese Fragen könnten Sie ebenfalls interessieren.
Inwiefern optimiert der Tungsten-Engine in Spark die Speicherverwaltung durch Binary Layouts und Unsafe-Operationen?
data-engineeringInwiefern unterscheidet sich das Z-Ordering von herkömmlichem Hive-Partitioning hinsichtlich der Data-Skipping-Effizienz?
data-engineeringWas ist der technische Unterschied zwischen 'At-least-once' und 'Exactly-once' Delivery in Kafka-Producer-Konfigurationen?
data-engineeringWas ist der technische Unterschied zwischen einer 'Push-based' und einer 'Pull-based' Orchestrierung in Prefect oder Dagster?
data-engineeringWas ist der technische Unterschied zwischen einer Broadcast Hash Join und einem Sort Merge Join in verteilten Systemen?