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:
- Pomniejsz saldo osoby nadającej przelew.
- Dodaj wpis do rejestru przelewów.
- 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 Isolated z zasad 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.
Przygotuj się lepiej do rozmowy o pracę!
Odbierz darmowy egzemplarz e-booka 106 Pytań Rekrutacyjnych Junior JavaScript Developer i realnie zwiększ swoje szanse na rozmowie rekrutacyjnej! Będziesz też otrzymywać wartościowe treści i powiadomienia o nowych wpisach na skrzynkę e-mail.
Dlaczego warto?
E-booka odbierzesz korzystając z formularza poniżej 👇