首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何解决这个Solr/MySQL争用条件?

如何解决这个Solr/MySQL争用条件?
EN

Stack Overflow用户
提问于 2013-05-28 18:09:54
回答 2查看 361关注 0票数 1

我遇到了一个非常奇怪的问题,我的Solr索引无法看到刚刚写入另一个连接上的MySQL数据库的更改。

以下是一系列事件:

  1. 用户在网站上启动一个操作,该操作将导致将一行添加到MySQL中的表中。
  2. 行是通过mysql_query()添加的(没有事务)。如果我再次从同一连接查询数据库,自然会看到我刚才所做的更改。
  3. 调用将立即通过curl发送到Solr实例,告诉它使用对其索引进行部分更新。
  4. Solr通过单独的JDBC连接(相同的凭据和一切)连接到MySQL数据库,并对自上次更新以来更新的所有记录执行查询。

但是,此时返回给Solr的结果不包括最后添加的行,除非我在对数据库进行更改之后并在将消息发送给Solr之前立即插入一个sleep()调用。

*请注意,如果我在这一点上确实查询了数据库,这需要足够的时间才能让Solr实际获取更改。如果我只是简单的sleep(1) (一秒钟),也会发生同样的情况。

我正在寻找的是一些可靠的解决方案,可以让我在发送刷新消息之前确保Solr能够看到更改。但是,根据我发现的所有文档,对mysql_query()的调用应该已经是原子的和同步的,并且在数据库更新之前不应该返回对PHP的控制。因此,似乎没有任何函数,我可以调用来强制这一点。

有人有什么建议/想法吗?我正为这件事大发雷霆。

EN

回答 2

Stack Overflow用户

发布于 2013-05-28 18:15:45

在插入记录时检查自动提交设置为什么。刚才插入的记录很可能位于同一个数据库会话中,因此可以看到(但没有提交)。在此之后,某些事件会导致提交发生,因此另一个线程/会话可以“查看”记录。还检查事务隔离级别设置。

票数 1
EN

Stack Overflow用户

发布于 2013-05-28 20:03:28

我通常不使用数据导入处理程序,而是让网站中的更新触发一种机制(无论是内部的还是外部的),以便使用所使用的编程语言的适当Solr客户端将记录更新为Solr。我个人过去在方面没有太多的运气,因此我更喜欢使用自定义代码来将Solr与相应的数据存储平台同步。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16798678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档