🎯 Definicja

Transakcje ACID to zbiór właściwości, które gwarantują poprawność i niezawodność operacji na danych w systemach zarządzania bazami danych (DBMS) oraz nowoczesnych formatach tabel w jeziorach danych (Data Lake Table Formats). Skrót ACID oznacza:

  • A — Atomicity (atomowość)
  • C — Consistency (spójność)
  • I — Isolation (izolacja)
  • D — Durability (trwałość)

Te właściwości zapewniają, że każda operacja na danych zostanie przeprowadzona całkowicie lub wcale, pozostawiając system zawsze w spójnym stanie — nawet w sytuacjach awaryjnych, takich jak awaria systemu, przerwa w zasilaniu lub błąd zapisu.

🔑 Kluczowe punkty

  • Transakcje ACID to warunek konieczny dla bezpiecznego współdzielenia danych i gwarantowanej historii zmian.
  • Modele ACID są dziś wspierane nie tylko przez relacyjne bazy danych, ale też nowoczesne formaty tabel w Data Lake, takie jak:
  • Każdy format implementuje ACID w nieco inny sposób – poprzez wersjonowanie plików, logi transakcji i warstwę metadanych.
  • Rola kluczowa w systemach wymagających dużej liczby operacji zapisu/odczytu, równocześnie i na dużą skalę.

📚 Szczegółowe wyjaśnienie

A — Atomicity (atomowość)

Każda transakcja jest niepodzielna: wykonuje się w całości lub wcale.
Jeśli jedna z operacji się nie powiedzie, inne zmiany są wycofywane (rollback).

Przykład: Jeśli próbujesz zaktualizować dane w dwóch tabelach jednocześnie — albo obie zmiany się powiodą, albo żadna nie zostanie zapisana.

C — Consistency (spójność)

System przechodzi z jednego poprawnego stanu w inny poprawny stan. Po zakończeniu transakcji integralność danych (np. unikalne ID, typy danych, ograniczenia kluczy obcych) musi zostać zachowana.

I — Isolation (izolacja)

Transakcje wykonywane równolegle są odseparowane i nie powinny na siebie wpływać (np. poprzez “brudny odczyt”).

Rodzaje izolacji (w tradycyjnym SQL):

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE

W OLAP i systemach Lakehouse izolacja implementowana jest przez katalogi wersjonowania i snapshoty.

D — Durability (trwałość)

Po zatwierdzeniu (commit) zmiany są utrwalone – pozostają zachowane nawet mimo awarii (bo są zapisane np. w dziennikach, logach transakcyjnych, wpisane do nowego snapshotu).

🔄 ACID w formatach Lakehouse

FormatACIDImplementacja
Delta Lake‘Dziennik transakcji w Data Lake|_delta_log/`, transakcje JSON, snapshoty
Apache Hudicommit logs, .hoodie/ metadane i timeline
Apache Icebergmetadata.json, snapshoty, manifesty, atomic commits

Wszystkie te formaty pozwalają na:

  • Upserty, delecje, time travel
  • Zachowanie historii zmian
  • Równoległy dostęp (bez konfliktu odczyt/zapis)

💡 Przykład zastosowania

W hurtowni danych typu Lakehouse tabela użytkowników jest zapisywana równocześnie przez kilka źródeł. Dzięki ACID operacje są wykonywane w sposób bezpieczny: nie dochodzi do konfliktów ani częściowych zapisów. Podczas awarii części źródeł dane są automatycznie wycofywane z przetwarzania i zapisany jest tylko poprawny subset.

Równolegle analityk może wykonać zapytanie używając określonej wersji danych (VERSION AS OF) — system gwarantuje, że snapshot danego punktu w czasie jest spójny i kompletny.

📌 Źródła

👽 Brudnopis

  • ACID = minimum współbieżności + gwarancje odczytów
  • Delta: JSON logs, Iceberg: metadata.json + manifest, Hudi: timeline z commitem
  • snapshot = izolacja, redo-log = trwałość
  • ACID ≠ tylko dla OLTP — dziś też OLAP i batch / micro-batch
  • Wsparcie dla rollback, merge, conflict resolution