我遇到了一个非常奇怪的问题,我的Solr索引无法看到刚刚写入另一个连接上的MySQL数据库的更改。
以下是一系列事件:
mysql_query()添加的(没有事务)。如果我再次从同一连接查询数据库,自然会看到我刚才所做的更改。但是,此时返回给Solr的结果不包括最后添加的行,除非我在对数据库进行更改之后并在将消息发送给Solr之前立即插入一个sleep()调用。
*请注意,如果我在这一点上确实查询了数据库,这需要足够的时间才能让Solr实际获取更改。如果我只是简单的sleep(1) (一秒钟),也会发生同样的情况。
我正在寻找的是一些可靠的解决方案,可以让我在发送刷新消息之前确保Solr能够看到更改。但是,根据我发现的所有文档,对mysql_query()的调用应该已经是原子的和同步的,并且在数据库更新之前不应该返回对PHP的控制。因此,似乎没有任何函数,我可以调用来强制这一点。
有人有什么建议/想法吗?我正为这件事大发雷霆。
发布于 2013-05-28 18:15:45
在插入记录时检查自动提交设置为什么。刚才插入的记录很可能位于同一个数据库会话中,因此可以看到(但没有提交)。在此之后,某些事件会导致提交发生,因此另一个线程/会话可以“查看”记录。还检查事务隔离级别设置。
https://stackoverflow.com/questions/16798678
复制相似问题