transakcja

Transakcja w bazie danych.

Czy zastanawiałeś/łaś się już nie raz co to jest transakcja w bazie danych? Czy  posiada ona izolacje transakcji lub czy te transakcje są w jakiś sposób blokowane lub cofane? Dzisiaj wprowadzę Cię w ten temat. Wyjaśnię co to takiego transakcja w bazie danych i w jaki sposób może się ona zakończyć. Dowiesz się również dlaczego commitrollback są takie istotne w codziennych operacjach.

1. Co to jest transakcja?

W najprostszym ujęciu transakcja to wszystkie polecenia/instrukcje sql w danej transakcji, które stanowią logiczną całość. Wynikiem tych działań jest albo zapisanie całej transakcji do bazy danych albo jej całkowite wycofanie. Transakcja to również lokowanie rekordów na czas trwania transakcji. 

1.1. Transakcja - Scenariusz pozytywny:

Najbardziej obrazowym i  chyba najpopularniejszym przykładem jest przelew bankowy pomiędzy kontami. Co tutaj się dzieje:

  1. sprawdzamy stan konta,
  2. wprowadzamy zmiany do przelewu takie jak: wybór odbiorcy, kwota, data wykonania, nr konta odbiorcy, tytuł przelewu i tak dalej…
  3. zatwierdzamy transakcje (tokenem, sms-em, innym zabezpieczeniem) w codziennym życiu. W języku SQL jest to commit.

W tym scenariuszu transakcja została zrealizowana z powodzeniem. Ale co w przypadku gdy coś pójdzie nie tak?

1.2. Transakcja - Scenariusz negatywny

W takiej sytuacji następuje wspomniane wcześniej wycofanie całej transakcji. Wróćmy więc do przykładu powyżej i zatrzymajmy się na punkcie 2.

  1. W momencie kiedy wprowadzamy dane, albo już je wprowadziliśmy zazwyczaj jeszcze sprawdzamy ich poprawność. I w tym momencie następuje awaria w dostawie prądu.
  2. Nasz laptop, komputer nagle się wyłączył a transakcja została wycofana  – rollback. Uff… całe szczęście ponieważ dzięki temu nie straciliśmy środków finansowych na koncie.

Lub też inna sytuacja: np.:

  1. zorientowaliśmy się że w jakiś sposób nr konta odbiorcy został minimalnie zmieniony i co gorsza nie daje się go tak łatwo poprawić.
  2. Nie pozostaje nic innego jak wylogować się z banku i upewnić się czy jesteśmy na właściwej stronie. Również i tutaj transakcje została wycofana – rollback.
 
Transakcja w bazie danych: commit - zatwierdzenie, rollback - wycofanie
Transakcja w bazie danych: commit – zatwierdzenie, rollback – wycofanie.

2. Izolacje transakcji - dlaczego to takie istotne

Transakcja to również lokowanie rekordów na czas trwania transakcji. Jest to szczególnie istotne w sytuacji gdy z jednej bazy danych może korzystać w tym samym czasie wielu użytkowników. Wyobraźmy więc sobie że mamy np.: 4-rech użytkowników:  A, B, C i D którzy wykonują przelew bankowy na kwotę np 1000 USD dla użytkownika B (np Amazon, AWS, Udemy i in.). Użytkownik B decyduje się na zakup/y w tym samym czasie które są potrzebne do biznesu. Co tutaj się dzieje:

  1. z jednej strony mam transakcje które maja zwiększyć stan konta
  2. a z drugiej transakcja która ma to konto obciążyć.

Czy zastanawiałeś/łaś się kiedyś jak to się dzieje że baza danych wie co kiedy ma obsłużyć aby wciąż móc zapewniać spójność danych?

2.1. Poziomy izolacji transakcji

Z pomocą przychodzą nam poziomy izolacji transakcji inaczej lockowanie. To dzięki nim baza danych wie co kiedy zaktualizować i w jakiej kolejności.

Powracając do przykładu powyżej nie trudno sobie wyobrazić że bez tego mechanizmu  powstał by chaos w danych. W życiu codziennym użytkowników są tysiące, a operacji jest jeszcze więcej. Po drodze może się wydarzyć wiele rzeczy.  W naszym przykładzie może to być m.in: 

  • przewalutowanie, i
  • transfery pomiędzy bankami pośredniczącymi zanim kwota z punku A trafi do właściwego odbiorcy.

Tym bardziej projektując/implementując naszą aplikacje trzeba zadbać  o właściwe zabezpieczenia.

3. Podsumowanie

W dzisiejszym artykule nauczyliśmy się rozumieć w życiu codziennym co to jest transakcja i dlaczego jej właściwa obsługa jest taka istotna. Dzięki temu będzie nam łatwiej zrozumieć lockowanie/izolacje transakcji które opisałam m.in. w artykule: Izolacje transakcji. A jakie Ty masz doświadczenia z transakcjami? Chętnie przeczytam w komentarzu 🙂

Leave a Comment

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *