transakcje ACID - okładka

Transakcje ACID

Opublikowano Kategorie Backend, Czysty kodCzas czytania 3min

Tym razem będzie nieco o bazach danych, a dokładniej o zasadach transakcyjności w relacyjnych bazach danych, 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ć niekontrolowany 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ć transakcje w relacyjnych bazach danych 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ś nowego. 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

Dominik Szczepaniak

Zawodowo Senior Software Engineer w CKSource. Prywatnie bloger, fan włoskiej kuchni, miłośnik jazdy na rowerze i treningu siłowego.

Inne wpisy, które mogą Cię zainteresować

Zapisz się na mailing i odbierz e-booka

Zapisując się na mój mailing, otrzymasz darmowy egzemplarz e-booka 106 Pytań Rekrutacyjnych Junior JavaScript Developer! Będziesz też otrzymywać wartościowe treści i powiadomienia o nowych wpisach na skrzynkę e-mail.

Subscribe
Powiadom o
guest

0 komentarzy
Inline Feedbacks
View all comments