对我来说,实现记录锁定的最佳方法是什么?
时间:2020-03-06 15:03:46 来源:igfitidea点击:
我有一个关于锁定的问题。这不仅与记录锁定有关,而且无论如何。
假设我正在编写一个可访问Web的CMS。我正在为一些想法而苦苦挣扎。
当用户打开文章进行编辑时,我可以将文章标记为"正在使用"。到目前为止,一切都很好。
但是何时删除该标志?用户何时保存文章?但是,如果用户不想再键入,而是决定关闭浏览器并上床睡觉该怎么办?
我想到了一种超时机制,但是写一篇文章需要多长时间?太短10分钟,太长30分钟..
也许我把这个复杂化了。我想听听我们对这个问题的想法。
解决方案
我的投票是尽可能地乐观锁定。
在一个实现了实际锁的地方,我有一个管理页面来删除锁。服务器上还有一个服务正在运行,用于解锁没有相应活动会话的所有锁。
为什么不使用时间戳记?实际上,我们不必担心锁定任何内容,只需对记录(文章)已更改的事件做出反应。
基本上,在保存文章之前,请检查版本(时间戳)是否与磁盘上的版本相同。如果相同,则我们仍具有最新副本,因此将其写入,如果没有,则...提供合并,提供另存为新内容,丢弃其特定于应用程序的内容。
对于mssql 2005及更高版本,请使用rowversion;对于mssql 2000及以下版本,请使用时间戳。将隐藏的xmin字段用于postgresql。
让所有其他用户打开记录。除了保存记录外,保存记录的标签以及在rowversion的帮助下,在catch(DbConcurrencyException)上重新引发错误,该错误指示其他用户在保存之前先保存了记录,并要求他们重新打开记录查看由首先保存记录的用户所做的更改。