寻找有关分布式系统中记录锁定的建议

时间:2008-10-16 07:57:25

标签: database concurrency locking

在记录锁定方面,我们正在尝试为我们的团队提出推荐的设计模式。典型的思想流派是这样的: 1.用户从列表中选择一条记录 2.使用用户ID锁定记录 3.加载锁定的记录记录(没有锁定,然后有人打败它)。

我错过了什么,或者这似乎是唯一的方法吗? ((在我们的案例中,乐观锁定会让最终用户感到麻烦和困惑。编辑通常非常重要。))

1 个答案:

答案 0 :(得分:2)

可能使您的解决方案管理密集的细节是在崩溃或连接失败后摆脱锁定。这就是乐观和悲观锁定之间的权衡取舍。当乐观锁定失败时手动合并或重做编辑是一件痛苦的事情,但是在悲观和持久锁定模型崩溃之后扫荡会产生自己的麻烦(因为任何支持90年代Pervasive支持会计系统用户的人都会告诉你详细信息机会)

一个答案是使用您的RDBMS管理事务和并发的机制:使用SELECT FOR UPDATE或适合您的环境和隔离级别的任何语法来获取记录。如果您的某个客户端崩溃或断开连接,则事务将回滚并锁定被释放。

在无连接环境(如Web或连接丢失并经常恢复的环境)中,基于会话的模型和会话超时也可以起作用:

  • 如果是针对过期的会话,则尝试清除记录上的现有锁
  • 尝试将记录锁定到sessionid(如果上一步失败,则失败)
  • 选择锁定的记录(如果上一步失败,则不返回记录)

所以当会话到期时锁会被释放。崩溃后无需手动删除锁定以及客户端/连接问题的容忍度。尽管如此,编码确实需要做更多的工作。