我们想为我们的 Symfony2 webapp 实现多版本并发控制。
这意味着在任何事件上,都不UPDATE
会对数据库执行 no,而只会执行INSERT
s。由于我没有找到 Symfony2 对这个要求的任何原生支持,我决定如何手动实现它。
除了每个实体(例如 a )的常规 ID(主键)之外User
,我们还添加了另一个实体属性,例如 another userID
。因此,在每次更改用户属性时,我们可以简单地INSERT
为用户添加另一行,然后再有另一个ID
,但相同userID
。
然后可以始终通过特定的附加实体 ID 来识别实体。
但是这个解决方案有几个问题: 常规实体 ID 是主键,因此是与该实体的所有关系的标识符。也可以尝试创建组合主键(例如ID
plustimestamp
或ID
plus entityID
),但 Symfony2/Doctrine2 不支持组合主键。
那么你将如何在 Symfony2/Doctrine2 中实现 MVCC?你有办法解决这个问题吗?或者您会建议使用单独的历史记录表来跟踪所有更改吗?