【发布时间】:2013-12-11 17:42:54
【问题描述】:
我有一个相当大的 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 的新连接似乎随后会找到数据。 我会接受任何可以解释原因的人的回答!
【问题讨论】: