2

我有一张表,我想在上面运行相当长时间的迁移(约 20 分钟)。在此期间,表的内容根本不应更改。但是,此表(以及许多其他)的 rails 前端将在迁移运行时保持运行,并且很有可能有人会尝试修改某些数据(尽管该调用最终会引发错误,但这很好)。

我们使用 MySQL 并在我们的连接池中允许 10 个连接。我是否正确地假设将这个迁移包装在事务中是不够的,但我还必须锁定表本身?

4

1 回答 1

3

如果你真的想确保表没有发生任何修改,最安全的做法是将表锁定在 mysql 级别。

但是,如果您只想确保不会发生竞争性写入/覆盖,您也可以使用乐观锁定。需要提到的一件事是,这可能意味着导入脚本会抱怨并且某些保存可能会失败,因为在读取和写入之间前端可能已经更改了记录。

假设这没问题,您可以重复这些单独的写入,这就是它的工作方式:

按照惯例,您必须将一个整数列添加lock_version到有问题的表中,然后您就可以神奇地以我们喜欢的 rails 方式设置。

我鼓励您在链接的文档中阅读更多内容,如果您愿意,我们可以在评论中讨论。

于 2013-10-17T20:00:08.973 回答