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 UPDATE
w 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: