transakcje ACID - okładka

Transakcje ACID

Tym razem będzie nieco o bazach danych, a dokładniej mówiąc o zasadach transakcyjności, czyli ACID.

Czym jest transakcja?

W kontekście relacyjnych baz danych transakcja to mechanizm, który oczekuje zestawu operacji do wykonania. Do zaistnienia transakcji konieczne jest pomyślne wykonanie wszystkich operacji. W przeciwnym wypadku wszystkie operacje są odrzucane.

Załóżmy, że mamy transakcję składającą się z 10 zapytań. Jeżeli ostatnie zapytanie będzie skutkowało błędem, to zmiany dokonane przez poprzednie 9 zapytań zostaną cofnięte, a transakcja nie zostanie zakończona pomyślnie. Klasycznym przypadkiem zastosowania transakcji może być przelew bankowy. Przykładowy zestaw zapytań dla tego procesu może wyglądać następująco:

  1. Pomniejsz saldo osoby nadającej przelew.
  2. Dodaj wpis do rejestru przelewów.
  3. Powiększ saldo osoby odbierającej przelew.

Przypadek, gdy choć jedna z powyższych operacji nie zakończy się sukcesem, a pozostałe tak i ich rezultat zostanie zapisany do bazy danych jest wysoce niepożądany. Taki błąd może rodzić bardzo poważne konsekwencje. W tym przypadku może to być niekonotrolowany dopływ lub odpływ środków z systemu. Z tego samego powodu równie istotnym aspektem jest wycofanie pomyślnych operacji w przypadku wystąpienia błędu.

ACID

Jednym ze zbiorów zasad definiujących cechy jakie powinny spełniać trasakcje jest ACID.

Atomowość (atomicity)

Atomowość oznacza, że każda operacja na bazie danych jest traktowana jako osobny, niepodzielny byt. Co więcej, albo wszystkie operacje zakończą się pomyślnie, albo żadna z nich nie zostanie zaaplikowana. Mówiąc w skrócie – wszystko albo nic.

Spójność (consistency)

Ta zasada stoi na straży spójności danych. Każda transakcja zmienia stan bazy z jednego poprawnego stanu na inny stan, również poprawny. Oznacza to także, że transakcja nie może łamać nałożonych na bazę reguł, ograniczeń i wyzwalaczy.

Izolacja (isolation)

Równolegle uruchomione transakcje powinny być wyizolowane i nie powinny wpływać na siebie nawzajem. Oznacza to, że powinny się zachowywać tak, jakby były wykonywane sekwencyjnie. Zasada ta jest analogiczna do zasady Isolatedzasad definiujących dobre testy jednostkowe. Warto pamiętać, że sytuacja gdy wielu użytkowników równolegle wykonuje operacje na bazie danych jest bardzo powszechna.

Trwałość (durability)

Zmiany poczynione w trakcie transakcji są permanentne. Oznacza to, że rezultaty transakcji są trwale zapisane w bazie danych niezależnie od dalszych awarii.

Podsumowanie

Mam nadzieję, że mimo swojego rozmiaru ten krótki artykuł nauczył Cię czegoś ciekawego. Jak zawsze zachęcam do pozostawienia komentarza i zapoznania się ze źródłami i materiałami dodatkowymi.

Źródła i materiały dodatkowe