我尝试使用 Java/JDBC 和 MySQL 以及用于并发处理的乐观锁定来实现活动记录模式。
现在,我有一个表中所有记录的“version_number”字段,每次更新后都会递增。
似乎有两种策略可以实现这一点:
- 应用程序在请求数据时还存储每个对象(即记录)的相应版本号。在更新时,版本号被“发送”到数据层,该数据层用于 UPDATE...SET...WHERE 查询以进行乐观锁定
- 应用程序不存储版本号,而只存储对象的某些部分(而不是整行数据)。为了使乐观锁定成功,数据层(活动记录)需要首先从数据库中获取“行”,获取版本号,然后触发相同的 UPDATE...SET...WHERE 查询以更新记录。
前者有“第一次获取”,然后是更新。在后一种情况下,您确实有一个“第一次提取”,但在更新之前也有一个提取。
问题是:按照设计,哪种方法更好?将所有数据(包括版本号)存储在 Web 应用程序的前端(Javascript/HTML)中是否可以/安全/正确?还是在更新前对性能进行读取会更好?
有没有“正确的方法”来实现这个设计?我不确定活动记录的当前实现如何处理这个(Ruby、Play、ActiveJDBC 等)如果我要在 JDBC 中“原始”实现它,在这种情况下,正确的设计决策是什么?