我有一个相当大的Web应用程序,可以在MySQL数据库中存储大量数据。我还有一个PHP脚本,可以处理这些数据。
因为PHP脚本的工作非常激烈,所以我在多个独立的服务器上运行它。 基本上,脚本以编程方式将随机数据块下载到自己的MySql数据库中,调用sphinx索引器,然后使用sphinx完成其部分工作。
PHP脚本在CLI上运行并无限期执行。
脚本将数据下载到本地数据库后,它通过以下方式调用索引器:
$response = exec("indexer results_combined --rotate");
echo PHP_EOL.$response;
每次迭代的响应都是:
rotating indices: successfully sent SIGHUP to searchd (pid=3631)
我看到的问题是,通过索引器的第一次迭代运行,php使用sphinx来完成它的工作并产生结果。
然而第二次索引器报告运行正常,但使用php Sphinx API的任何调用都没有返回结果。
sphinx-> query()命令不会为所有查询返回任何内容,sphinx-> getLastError()也不会显示任何内容。
如果我重新启动脚本,那么它会再次运行。 在调用索引器之后我甚至尝试过延迟,以防SIGHUP和实际上能够查询索引之间有延迟,但这没有帮助。
以前有人见过这样的事吗?
非常感谢
编辑:
好的,所以在我提交这个问题后,我有一个脑电波。似乎一旦第二次调用索引器,就需要重新创建sphinx客户端。
这导致与sphinx的新连接,然后似乎找到了数据。 我会接受任何可以解释原因的答案!
答案 0 :(得分:0)
如果您将连接打开到searchd,则无法“重新启动”。这样做会破坏连接。
因此实际的'旋转'被延迟,直到没有连接打开。
但是不知道为什么你从查询中得到“没有”,你应该得到旧的结果。