我有一个 Web 界面和一个运行相同应用程序的移动应用程序,用户可以在其中创建内容(保存带有标题的图像集合)。这些内容是特定于用户的,并存储在运行带有 MySQL 的 Rails Restful WS 的 Web 服务器中。
这是内容表:
galleries(id, title, serialized_images, user_id, created_at, updated_at)
我在每个内容中使用一个版本号,以跟踪新的插入/更新并同步移动 APP,而无需每次都发回所有内容。此数字在每次新更新/插入后自动增加,以便移动 APP 仅检索大于达到的最新版本的内容。此 version_number 存储在支持表中,如下所示:
gallery_versions(is, gallery_id, version)
操作按以下顺序执行:
- 插入图库对象
- 运行一个观察者:
- 从支持表中选择最大版本号
- 将 version_number 增加到支持表中
问题是并发插入语句。如果同一用户同时从 Web 和应用程序创建新内容,则存在 2 个对象获得相同 version_number 的风险。
我想锁定选择最大值,并在更新 version_number 后释放此锁定。但是对于 Ruby 1.8.7,我不知道该怎么做。
你有什么想法吗?