我有两个工作人员在一个相对较大的(约6000万行) MySQL表上进行并行插入/选择。
看来,工作人员2往往没有从表中获得最新的记录。是否有方法阻止工作人员2对给定外键的查询,直到该外键的插入完成为止?
提前感谢
发布于 2013-08-11 21:14:34
我可能缺少一些关键的信息来精确回答,但是.
..。我的猜测是,在一个事务中对DB所做的更改在另一个事务中可见之前,“消息”就到达了。
请记住,根据事务隔离级别(1),在成功提交事务之前,不会将更改传播到DB。在启动新事务之前,DB的新状态是不可见的。
即使如此,据我所知,MySQL并不保证任何“传播延迟”。而且我认为在MySQL中没有任何机制可以发出除事务已成功提交的其他连接的信号,而且更改现在是可见的。
我不了解您的系统,但作为一个建议,我不认为使用消息队列来表示更改,但是使用MySQL存储实际的更改数据是一个很好的解决方案。如果我是你,我会看一看像RabbitMQ这样的适当的消息传递系统,它不仅允许发出改变的信号,而且还将携带新的状态--几乎(如果不是全部的话)与关系数据库管理系统的保证相同。也许您可以重构您的应用程序,以便使用消息队列来处理更改,并且只需完成一次,就可以使用MySQL永久存储数据。
https://stackoverflow.com/questions/18175898
复制相似问题