我有一个关于锁定的问题。这不一定只是关于记录锁定,但无论如何。

假设我正在编写一个可通过网络访问的 CMS。我正在努力思考一些想法。

当用户打开文章进行编辑时,我可以将该文章标记为“正在使用”。到目前为止,一切都很好。

但我什么时候删除标志呢?用户何时保存文章?但如果用户不想再打字并决定关闭浏览器去睡觉怎么办?

我想到了超时机制,但是写一篇文章需要多长时间?10分钟太短,30分钟太长。

也许我把这个问题过于复杂化了。我想听听您对这个主题的想法。

有帮助吗?

解决方案

为什么不使用时间戳?实际上并不担心锁定任何东西,只是对记录(文章)发生变化的事件做出反应。

基本上,在保存文章之前,请检查您的版本(时间戳)是否与磁盘上的版本相同。如果相同,那么你仍然有最新的副本所以写它,如果没有那么...提供合并,提供保存为新,丢弃它 - 它的应用程序特定。

其他提示

我的投票是尽可能乐观锁定

在一个我已实现实际锁定的地方,我有一个管理页面来删除锁定。服务器上还运行了一个服务来解锁任何没有相应活动会话的锁。

对于 mssql 2005 及更高版本,使用 rowversion,对于 mssql 2000 及更低版本,使用时间戳。使用 postgresql 的隐藏 xmin 字段。

让所有其他用户打开该记录。在保存记录的同时,标记保存者,并在 rowversion 的帮助下,在 catch(DbConcurrencyException) 上重新抛出一个错误,向其他用户指示之前保存过该记录的用户,并请求他们重新打开该记录查看最先保存记录的用户所做的更改。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top