database locking strategy - ghdrako/doc_snipets GitHub Wiki
- 
Optymistyczne blokowanie (Optimistic Locking)
- Mechanizm:
- Przy odczycie danych zapisywana jest informacja o ich wersji (np. version number lub timestamp).
 - Przed zapisaniem danych sprawdzane jest, czy wersja danych w bazie nie uległa zmianie.
 - Jeśli wersja jest taka sama, dane są zapisywane; w przeciwnym razie operacja kończy się błędem, a aplikacja musi podjąć odpowiednie kroki.
 
 - Zalety:
- Brak potrzeby blokowania wierszy w bazie przez dłuższy czas.
 - Lepsza wydajność w środowiskach o niskim poziomie współbieżności.
 
 - Wady:
- Wysoki poziom współbieżności może prowadzić do wielu konfliktów, co wymaga częstego powtarzania operacji.
 
 
 - Mechanizm:
 - 
Pesymistyczne blokowanie (Pessimistic Locking)
- 
Mechanizm:
- Przy odczycie danych wiersz jest blokowany do czasu zakończenia transakcji (
SELECT ... FOR UPDATEw MySQL/PostgreSQL). Inne transakcje próbujące odczytać te same dane muszą czekać na zwolnienie blokady. 
START TRANSACTION; SELECT balance FROM account WHERE account_id = 7 FOR UPDATE; -- Race condition free update after processing the data UPDATE account SET balance = 540 WHERE account_id = 7; COMMIT; - Przy odczycie danych wiersz jest blokowany do czasu zakończenia transakcji (
 - 
Zalety:
- Gwarantuje, że dane nie zostaną zmodyfikowane przez inną transakcję w trakcie aktualizacji.
 - Unika konfliktów, które występują w przypadku optymistycznego blokowania.
 
 - 
Wady:
- Może powodować blokady i problemy z wydajnością w przypadku długotrwałych transakcji.
 - Potencjalne ryzyko deadlocków.
 
 
 - 
 - 
Atomiczne operacje na poziomie bazy (Atomic Updates)
- Mechanizm:
- Wykorzystuje pojedyncze instrukcje SQL do aktualizacji danych w bazie (np. UPDATE z warunkiem WHERE opartym na bieżącym stanie danych). Przykład:
 
UPDATE account SET balance = balance - 100 WHERE account_id = 7 AND balance >= 100; - Zalety:
- Brak konieczności stosowania blokad na poziomie aplikacji.
 - Szybkość i wydajność w prostych scenariuszach.
 
 - Wady:
- Ograniczona elastyczność w bardziej złożonych przypadkach.
 - Trudności z walidacją danych przed aktualizacją.
 
 
 - Mechanizm:
 - 
Mechanizmy blokad zewnętrznych (External Locking Mechanisms)
- Mechanizm:
- Wykorzystanie systemów zewnętrznych, takich jak Redis, DynamoDB, czy systemy plików, do zarządzania blokadami.
 - Przykład: Użycie kluczy Redis z czasem życia (TTL) do zabezpieczania zasobów.
 
 - Zalety:
- Elastyczność w środowiskach rozproszonych.
 - Niezależność od bazy danych.
 
 - Wady:
- Złożoność implementacji i możliwość wystąpienia problemów, takich jak niespójność stanu blokad.
 - Potencjalne problemy z wydajnością i spójnością w środowiskach rozproszonych.
 
 
 - Mechanizm:
 - 
Transakcje z izolacją na poziomie SERIALIZABLE
- Mechanizm:
- Wykorzystanie wysokiego poziomu izolacji transakcji, który symuluje wykonywanie operacji sekwencyjnie, nawet jeśli są one wykonywane równolegle.
 - Zapewnia, że żadna transakcja nie wpłynie na wynik innej transakcji.
 
 - Zalety:
- Brak konieczności ręcznego zarządzania blokadami.
 - Najwyższy poziom spójności danych.
 
 - Wady:
- Znaczny spadek wydajności w przypadku dużej liczby równoczesnych transakcji.
 
 
 - Mechanizm: