0

我有两个工作人员在一个相对较大(大约 6000 万行)的 MySQL 表上进行并发插入/选择。

  1. Worker 1 插入一个新行并将包含新行外键的消息排入队列。对于给定的外键值,这大约每天发生一次。
  2. Worker 2 使消息出队,查询表中外键的最新记录并进一步处理它。

似乎,Worker 2 通常不会从表中获取最新记录。有没有办法阻止 Worker 2 对给定外键的查询,直到对该外键的插入完成?

提前致谢

4

1 回答 1

1

为了准确回答,我可能缺乏一些关键信息,但是......

...我的猜测是“消息”在一个事务中对数据库所做的更改对另一个事务可见之前到达。

请记住,根据您的事务隔离级别 (1),在您成功提交事务之前,更改不会传播到数据库。并且 (2) 在您开始新事务之前,数据库的新状态是不可见的。

即便如此,据我所知,MySQL 不保证任何“传播延迟”。而且我认为除了事务已成功提交并且更改现在可见之外,MySQL 中没有任何可用的机制来指示其他连接。


我不了解您的系统,但作为建议,我认为使用消息队列来发出更改信号使用 MySQL 存储实际更改数据不是一个好的解决方案。如果我是你,我会看看一个合适的消息系统,比如RabbitMQ,它不仅可以发出变化信号,而且还可以携带新的状态——即使不是全部,也几乎与关系数据库管理系统。也许您可以重构您的应用程序,以便使用消息队列来处理更改,并且只有在完成后,才能使用 MySQL 永久存储数据。

于 2013-08-11T21:14:34.610 回答