Каков наилучший способ для меня реализовать блокировку записи? - PullRequest
2 голосов
/ 03 октября 2008

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

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 03 октября 2008

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

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

2 голосов
/ 03 октября 2008

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

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

0 голосов
/ 01 марта 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...