Tworzę aplikację komputerową, która utrwala dane w chmurze. Jedną z moich obaw jest rozpoczęcie edycji elementu w aplikacji i pozostawienie go na jakiś czas, powodując, że dane staną się nieaktualne. Może się to oczywiście zdarzyć również wtedy, gdy 2 osoby będą jednocześnie edytować ten sam element. Kiedy kończą edycję i chcą zapisać dane, musiałbym albo zastąpić to, co obecnie istnieje w bazie danych, albo sprawdzić, czy rozpoczęli edycję po ostatniej zmianie i zmusić ich do odrzucenia zmian lub dać im możliwość zaryzykowania nadpisywanie cudzych zmian.
Myślałem o dodaniu pól is_locked
i lock_timestamp
do tabeli DB. Gdy użytkownik rozpocznie edycję elementu, wiersz zmieni się is_locked
na true i ustawi znacznik czasu blokady na bieżący czas. Miałbym wtedy trochę czasu na blokadę (np. 5 minut). Jeśli ktokolwiek spróbuje edytować element, otrzyma komunikat z informacją, że element jest zablokowany i kiedy blokada wygasa automatycznie. Jeśli użytkownik odejdzie podczas edycji, blokada automatycznie wygaśnie po stosunkowo krótkim czasie, a gdy to zrobi, zostanie ostrzeżony, że blokada wygasła i będzie zmuszony do ponownego uruchomienia edycji po odświeżeniu danych.
Czy byłaby to dobra metoda zapobiegania nadpisywaniu nieaktualnych danych? Czy to przesada (nie oczekuję, że aplikacja będzie używana przez więcej niż kilka osób jednocześnie na jednym koncie).
(Innym problemem, który mam, jest to, że 2 osoby dostają blokadę na ten sam przedmiot, jednak uważam, że jest to stan wyścigowy, w którym czuję się komfortowo.)