我们希望为Symfony2 webapp实现Multiversion concurrency control。
这意味着在任何事件中,都不会对数据库执行UPDATE
,而只会执行INSERT
。由于我没有找到Symfony2对此要求的任何原生支持,我决定如何手动实现。
除了每个实体的常规ID(主键)(例如User
)之外,我们还添加了另一个实体属性,例如另一个userID
。因此,对于用户属性的每次更改,我们只能INSERT
用户的另一行,然后有另一行ID
,但相同的userID
。
然后,可以始终通过特定的附加实体ID来识别实体。
但是这个解决方案存在一些问题:常规实体ID是主键,因此是该实体的所有关系的标识符。也可以尝试创建组合主键(例如ID
加timestamp
,或ID
加entityID
),但Symfony2 / Doctrine2不构建为支持组合主键。
那么你将如何在Symfony2 / Doctrine2中实现MVCC呢?你看到了解决这个问题的方法吗?或者,您是否建议使用单独的历史记录表来跟踪所有更改?