实现记录锁定的最佳方法是什么?

时间:2008-10-03 05:36:29

标签: database locking

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

假设我正在编写一个可通过Web访问的CMS。我正在努力解决一些想法。

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

但我什么时候删除旗帜?当用户保存文章?但如果用户不想再打字并决定关闭浏览器并上床睡觉呢?

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

也许我过于复杂了。我想听听你对这个问题的看法。

3 个答案:

答案 0 :(得分:2)

我的投票只针对optimistic locking

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

让所有其他用户打开记​​录。除了保存记录,标记谁保存它,并借助于rowversion,在catch(DbConcurrencyException)上重新抛出一个错误,该错误指示在他们执行之前保存记录的其他用户,并请求他们重新打开记录查看首先保存记录的用户所做的更改。