Каков наилучший способ для меня реализовать блокировку записи?

StackOverflow https://stackoverflow.com/questions/165800

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть вопрос о блокировке. Это должно быть не только о блокировке записи, но в любом случае.

Допустим, я пишу CMS, доступную через Интернет. Я борюсь с некоторыми идеями.

Я мог бы в тот момент, когда пользователь открывает статью для редактирования, пометить статью как «используемую». пока все хорошо.

но когда мне убрать флаг? когда пользователь сохраняет статью? но что, если пользователь больше не хочет печатать и решает закрыть браузер и лечь спать?

Запоминается механизм тайм-аута, но сколько нужно времени, чтобы написать статью? 10 минут слишком мало, 30 минут больше.

Может быть, я слишком усложняю это. Я хотел бы услышать ваши мысли по этому вопросу.

Это было полезно?

Решение

Почему бы не использовать метки времени? На самом деле не беспокойтесь о блокировке, просто реагируйте на событие, в котором изменилась запись (статья).

Как правило, перед сохранением статьи проверьте, совпадает ли ваша версия (отметка времени) с той, что находится на диске. Если то же самое, то у вас все еще есть последняя копия, поэтому запишите ее, если нет, то ... предложите объединить, предложите сохранить как новую, отбросьте ее - это зависит от приложения.

Другие советы

Мой голос за оптимистическую блокировку , где это возможно.

В одном месте, где я реализовал реальные блокировки, у меня была страница администратора для удаления блокировок. На сервере также была запущена служба для разблокировки любых блокировок, для которых не было соответствующего активного сеанса.

Используйте версию строки для mssql 2005 и выше, отметку времени для mssql 2000 и ниже. Используйте скрытое поле xmin для postgresql.

Позвольте всем другим пользователям открыть запись. Наряду с сохранением записи, отметьте, кто ее сохранил, и с помощью rowversion при захвате (DbConcurrencyException) повторно выдают ошибку, указывающую другим пользователям, которые сохранили запись, прежде чем они это сделают, и просят их повторно открыть запись. чтобы увидеть изменения, внесенные пользователем, который первым сохранил запись.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top