2013-12-11 33 views
0

我有一個相當大的web應用程序,它將大量數據存儲在MySQL數據庫中。我也有一個PHP腳本,對這些數據做了一些工作。從PHP調用sphinx索引器

因爲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和實際能夠查詢索引之間存在延遲,但這沒有幫助。

以前有沒有人見過類似的東西?

非常感謝

編輯:

行,所以我提出這個問題後,我靈機一動。似乎一旦索引器被第二次調用,獅身人面像客戶端需要被重新創建。

這會導致一個新的連接到獅身人面像似乎然後找到數據。 我會接受任何人的答案,可以解釋爲什麼!

回答

0

如果你保持連接打開到searchd,它不能'重新啓動'。這樣做會破壞連接。

所以實際的'旋轉'被延遲,直到沒有連接打開。

但不知道爲什麼你從查詢中得不到'什麼',你應該只是得到舊的結果。