我遇到了一个非常奇怪的问题,即我的Solr索引无法看到只是在另一个连接上写入MySQL数据库的更改。
以下是一系列事件:
mysql_query()
添加的(无交易)。如果我从同一个连接再次查询数据库,我自然可以看到我刚刚做的更改。* 但是,此时,返回到Solr的结果不包括最后添加的行,除非我在更改数据库之后立即插入sleep()
调用将消息发送给Solr。
*请注意,如果此时我实际执行查询数据库,这需要足够的时间让Solr实际获取更改。如果我只是sleep(1)
(一秒钟),就会出现同样的情况。
我正在寻找的是一些可靠的解决方案,可以让我确保在发送刷新消息之前Solr会看到更改。但是,根据我发现的所有文档,对mysql_query()
的调用应该已经是原子和同步的,并且在数据库更新之前不应该将控制权返回给PHP。因此,我似乎没有任何函数可以强制执行此操作。
有没有人有任何建议/想法?我正在敲打这个。
答案 0 :(得分:1)
检查插入记录时自动提交的设置。机会是刚插入的记录在同一个数据库会话中,因此可见(但未提交)。在此之后,某些事件导致提交发生,因此另一个线程/会话可以“看到”记录。另请检查事务隔离级别设置。
答案 1 :(得分:1)
我通常不使用数据导入处理程序,并且网站中的更新会触发一种机制(内部或外部),使用适当的Solr Client使用正在使用的编程语言将记录更新为Solr。我个人过去并没有很好的使用数据导入处理程序,因此更倾向于使用自定义代码将Solr与相应的数据存储平台同步。