Я створюю настільний додаток, який зберігає дані у хмарі. У мене є одна проблема - почати редагувати елемент у програмі та залишати його на деякий час, викликаючи застарілі дані. Це, очевидно, також може статися, якщо 2 людини намагаються одночасно редагувати той самий елемент. Коли вони закінчують редагування і хочуть зберегти дані, мені потрібно або перезаписати те, що зараз існує в базі даних, або перевірити, чи почали вони редагувати після останньої зміни, або змусити їх відмовитись від змін або, можливо, дати їм можливість ризикувати перезапис чужих змін.
Я думав над тим, щоб додати поля is_locked
та lock_timestamp
до таблиці БД. Коли користувач починає редагувати елемент, рядок буде змінено is_locked
на true та встановить часову позначку блокування на поточний час. Тоді у мене буде деякий час, протягом якого тримається замок (наприклад, 5 хвилин). Якщо хтось інший спробує відредагувати елемент, він отримає повідомлення про те, що елемент заблоковано, а коли блокування автоматично закінчується. Якщо користувач вимкнеться під час редагування блокування, автоматично закінчується через відносно короткий проміжок часу, і як тільки це стане, користувач буде попереджений, що термін дії блокування закінчився, і він буде змушений перезапустити редагування після оновлення даних.
Це був би хороший метод запобігання перезапису застарілих даних? Це надмірність (я не очікую, що програму використовуватимуть більше кількох людей одночасно на одному акаунті).
(У мене є ще одна проблема - 2 людини, які отримують замок на той самий предмет, однак я вважаю, що це стан гонки, з яким мені комфортно.)