有没有人知道任何捆绑包,或者Doctrine有任何计划来实现新的乐观锁定策略,如Telerik框架中的策略?
http://docs.telerik.com/data-access/developers-guide/crud-operations/concurrency-control/data-access-tasks-define-model-concurrency-optimistic#checking_for_any_changes
此策略很棒,因为它不使用版本号或时间戳,它将输入的旧值与新值进行比较,并且仅适用于更改的输入。
因此,如果我有两个不同的表单更新同一个实体,使用当前策略(时间戳或版本控制),即使不更新相同的数据,2 个用户也会发生冲突。
我知道这是互联网上一个相当古老的问题,所以,我将在理论上如何做到这一点。
每列锁意味着有一种检测每列更改的机制 - 因此要么对行进行哈希处理(或我们关注的列),并且哈希比较用于检测/跟踪更改,或者我们单独跟踪每一列。
然后,必须基于每个请求应用此跟踪,以确定更改的内容和时间。这是正常的@Version装饰器逻辑适用的地方。
Telerik 能够处理每列的更改,因为信息是在浏览器中进行比较的(很可能是数组比较)。这是数据的隔离状态,在更新之前不与其他浏览器/数据库同步。
这里最简单的选择是不允许两个表单发生冲突(就数据而言),并删除锁 - OR - 将表单数据与主表分离,并允许它们单独更新(并与 sql 连接合并)。