题
我有一个关于锁定的问题。这不一定只是关于记录锁定,但无论如何。
假设我正在编写一个可通过网络访问的 CMS。我正在努力思考一些想法。
当用户打开文章进行编辑时,我可以将该文章标记为“正在使用”。到目前为止,一切都很好。
但我什么时候删除标志呢?用户何时保存文章?但如果用户不想再打字并决定关闭浏览器去睡觉怎么办?
我想到了超时机制,但是写一篇文章需要多长时间?10分钟太短,30分钟太长。
也许我把这个问题过于复杂化了。我想听听您对这个主题的想法。
解决方案
为什么不使用时间戳?实际上并不担心锁定任何东西,只是对记录(文章)发生变化的事件做出反应。
基本上,在保存文章之前,请检查您的版本(时间戳)是否与磁盘上的版本相同。如果相同,那么你仍然有最新的副本所以写它,如果没有那么...提供合并,提供保存为新,丢弃它 - 它的应用程序特定。
其他提示
我的投票是尽可能乐观锁定。
在一个我已实现实际锁定的地方,我有一个管理页面来删除锁定。服务器上还运行了一个服务来解锁任何没有相应活动会话的锁。
对于 mssql 2005 及更高版本,使用 rowversion,对于 mssql 2000 及更低版本,使用时间戳。使用 postgresql 的隐藏 xmin 字段。
让所有其他用户打开该记录。在保存记录的同时,标记保存者,并在 rowversion 的帮助下,在 catch(DbConcurrencyException) 上重新抛出一个错误,向其他用户指示之前保存过该记录的用户,并请求他们重新打开该记录查看最先保存记录的用户所做的更改。
不隶属于 StackOverflow