你好
我想知道在3层应用程序中实现并发控制的最佳方法吗?
可能首先想到的是:
根据这种情况,锁应同时引用锁定的记录和使用该记录的客户端。
客户端必须向服务器发送定期的保持 Activity 消息。保持 Activity 状态用于释放锁定的记录,以防万一我们因编辑操作而丢失了客户端。
我将在datasnap中使用Delphi。也许这是一个新手问题,但我不得不问!
最佳答案
我基于jachguate的Optimistic Concurrency Control答案来回答评论中提出的问题。
我更喜欢在任何可能的地方使用OCC,因为实现起来比较容易。我将讨论使用object persistence framework的三层应用程序。我的首选方案分为三个级别:
这样做的好处是,大多数情况下采用低成本OCC路径。对于发生很多但争用率低的事情,好处是巨大的。想想仓库中的产品跟踪-产品一直在移动,但很少有相同的物品同时移动,并且解决时很容易(剩下的数量=原件减去我的运抵和您的运抵)。对于(比如说)产品被重新定位的复杂情况,在运输过程中锁定产品可能是有意义的(因为这反射(reflect)了实际情况)。
当您不得不退回到锁定状态时,能够通知两个用户并拥有一个通信 channel 通常很有用。至少在需要锁时通知需要锁的用户,最好允许他们向锁持有者发送消息,甚至允许他们强制锁。然后通知失败者“乔·史密斯已将您锁定,您的更改却丢失了”。让办公室政治来解决这个问题:)
我通常通过用户投诉而不是错误报告来插入回退过程。如果用户提示他们在特定过程中过于频繁地丢失编辑,请对其进行更改。如果用户提示记录锁定太频繁,则必须重构对象映射以增加锁定粒度或进行业务流程更改。