ACID to akronim opisujący cztery właściwości, które gwarantują, że transakcja w bazie danych wykona się niezawodnie: Atomicity (atomowość), Consistency (spójność), Isolation (izolacja) i Durability (trwałość). Mówiąc po ludzku: gdy zmieniasz dane, baza obiecuje, że albo cała operacja się powiedzie, albo żadna jej część — i że nikt po drodze nie zobaczy bałaganu. To fundament relacyjnych baz danych jak PostgreSQL, MySQL (na silniku InnoDB) czy Oracle.
Co oznaczają poszczególne litery
Atomicity — transakcja jest niepodzielna. Jeśli przelew to „odejmij 100 zł z konta A” i „dodaj 100 zł do konta B”, to wykonują się obie operacje albo żadna. Awaria w połowie? Baza robi ROLLBACK i wraca do stanu sprzed.
Consistency — transakcja przeprowadza bazę z jednego poprawnego stanu w drugi, respektując reguły (klucze obce, CHECK, NOT NULL). Nie da się zapisać czegoś, co łamie więzy integralności.
Isolation — równoległe transakcje nie wchodzą sobie w drogę. Tak jakby działały po kolei, nawet gdy realnie lecą jednocześnie. Tu wchodzą poziomy izolacji (READ COMMITTED, REPEATABLE READ, SERIALIZABLE).
Durability — gdy baza potwierdzi COMMIT, dane przetrwają nawet jeśli sekundę później padnie prąd. Zwykle dzięki zapisowi do logu transakcji (WAL — write-ahead log) na dysk.
Jak to wygląda w praktyce
Klasyczny przykład to przelew bankowy w PostgreSQL. Opakowujesz operacje w transakcję:
BEGIN; UPDATE konta SET saldo = saldo - 100 WHERE id = 1; UPDATE konta SET saldo = saldo + 100 WHERE id = 2; COMMIT;
Jeśli drugi UPDATE się wywali (np. konto nie istnieje), wołasz ROLLBACK i pierwsza zmiana znika — nikt nie zostaje stratny stówy w próżni. Bez ACID musiałbyś ręcznie pilnować takich scenariuszy w kodzie aplikacji, co kończy się dziurami przy każdej nietypowej awarii.
Częste mity i pułapki
„ACID i NoSQL się wykluczają” — nieprawda. Owszem, wiele baz NoSQL stawiało kiedyś na BASE (eventual consistency) i wydajność, ale dziś MongoDB obsługuje transakcje wielodokumentowe, a wiele systemów rozproszonych daje gwarancje ACID.
Mylenie Consistency z literą „C” w CAP — to dwa różne pojęcia mimo tej samej nazwy. W ACID chodzi o integralność reguł bazy, w CAP o spójność danych między węzłami w systemie rozproszonym.
Uważaj też na izolację: domyślny poziom (w PostgreSQL to READ COMMITTED) nie chroni przed wszystkim. Anomalie jak phantom read czy lost update potrafią cię ugryźć, jeśli założysz, że „transakcja = pełna magiczna ochrona”.
Pojęcia powiązane
Warto znać: transakcja, COMMIT i ROLLBACK, poziomy izolacji, write-ahead log (WAL), więzy integralności, teoremat CAP, BASE oraz eventual consistency.