2011-05-19 44 views
0

数据插入到多个服务器的表中@ 100-200个插入/秒的速率。每个服务器按照id顺序读取该表中的所有行,并在每隔几秒运行一次的计时器线程中处理数据。读入的最后一个ID存储在内存中,并在下次查询时再次使用。MySQL读取返回后面的行,但不返回前面的行

发生什么事是一些行不被读取数据的函数读取;当插入率很高时,会跳过它们。

这是场景。

读取数据的函数读入数据直到ID 100,它现在试图读取ID大于100的行。返回的行是101,102,104,105。第103行被跳过(尽管它存在)。

发生什么事的当前工作原理是,由于数据是由多个服务器插入的,所以当读取发生时,行103没有被提交,因此不作为结果集的一部分返回。提交可能发生在这次阅读之后。事务隔离级别设置为'REPEATABLE-READ'。

有没有人遇到过这样的事情?它是如何处理的。欢迎任何建议。

编辑:我正在寻找一种方式来阅读所有的行顺序没有任何差距。

回答

1

你的猜测几乎可以肯定发生了什么。

有未提交的插入。一旦其他线程使用该序列,该序列仍会增加,但在提交之前您不会看到该行。

您的结果集从查询启动时起将保持一致性,所以即使在返回结果期间该行已被提交,您仍然不会在查询后再查看它。

你在寻找什么建议?您将永远无法读取未提交的行。

+0

感谢您的确认。我编辑了这个问题,但我正在寻找一种方法来按顺序读取所有行。 – smahesh 2011-05-19 21:54:19

+0

+1进行确认 – smahesh 2011-05-19 23:40:25