0

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

我是否遗漏了什么,或者这似乎是唯一的方法?((在我们的例子中,乐观锁定对于最终用户来说会很麻烦和困惑。编辑通常是相当大量的。))

4

1 回答 1

2

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

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

在网络等无连接环境或连接丢失和频繁恢复的环境中,具有会话超时的基于会话的模型也可以工作:

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

因此,当会话到期时,锁会被释放。崩溃后不必手动删除锁,并且对客户端/连接问题有一定的容忍度。不过,编码确实需要更多的工作。

于 2008-10-16T09:08:26.830 回答