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