@ Брайан Дрисколл говорит, что они установили бит в записи базы данных. Затем они говорят своим пользователям, что они ДОЛЖНЫ нажать «Сохранить» или «Отменить». Действительно? В этом так много неправильного.
Правило 1 дизайна взаимодействия «пользователи» никогда не будут делать то, что вы ожидаете.
Правило 1 блокировки вещей - если актор, ответственный за освобождение блокировки, может выйти из строя, это произойдет. Даже если вам удалось с помощью шоковой терапии обучить свою пользовательскую базу, их компьютер может выйти из строя, база данных может выйти из строя, соединение может выйти из строя, сеть может выйти из строя, пользователь может умереть во время редактирования.
Правило 2 блокировки вещей - когда действует правило 1 блокировки вещей, вам нужен выход - в частности, TIMEout или какой-либо другой способ освобождения потерянных блокировок.
В Википедии много написано о блокировке, и это стоит прочитать. Блокировка файлов и блокировка потоков (мьютексы, семафоры и т. д.) очень похожи на эту проблему, и понимание того, как они работают, является хорошей отправной точкой. Пользователь действительно является еще одним внешним параллельным процессором, верно?
@Майкл Юн дает очень интересный ответ, на мой взгляд. Мы находимся в процессе реализации именно такого типа блокировки на основе страниц, и это то, что у нас сейчас делает система, но мы изменим ее, чтобы она больше соответствовала идее Юна постоянно пинговать сервер для продления блокировки.
- Пользователь нажимает изменить
- Request lock on item to be edited (duration 5 minutes?) acquired
- On Success GOTO 3
- При сбое уведомлять о том, что блокировка пользователя не получена
- Check the item’s version returned by the lock token
- If the version is the same (could never be older, right?) GOTO 5
- Если версия новее, ПЕРЕЙДИТЕ К 4
- Получить последнюю версию элемента с сервера
- Войти в режим редактирования
- Периодически проверяйте возраст блокировки и уведомляйте пользователя, когда истечет срок действия блокировки.
В частности, мы бы заменили пункт 6 на идею Юна, чтобы не беспокоить пользователя уведомлением, а использовать «длительность микроблокировки», возможно, 30 секунд, и поддерживать активную блокировку, продлевая продолжительность блокировки от клиента чаще, чем 30 секунд.
person
Mark Lauter
schedule
22.12.2011