2010-04-23 40 views
0

因此,我已經在主機上部署和運行使用Cron的cron腳本,並索引數據庫表中的所有記錄 - 索引稍後將用於網站的前端以及支持的操作。如何使用Zend_Lucene和Zend_Paginator優化大量數據庫記錄的索引

操作後,索引約爲3-4 MB。

問題是需要大量資源(CPU:30+以及大量內存)並降低了機器速度。我的問題是關於如何優化如下操作:

首先有一個使用Zend Framework API構建的選擇查詢,然後將此查詢傳遞給Paginator工廠,該工廠返回一個paginator,我用它來平衡當前被索引的項目數量並且不會迭代太多項目。 腳本使用foreach循環遍歷paginator對象中的當前項目,直到達到結尾,然後在獲取下一頁的項目之後從頭開始。

我懷疑這種開銷是由Zend_Lucene引起的,但不知道如何改進。

+1

他們在線資源中提到了很多次,他們提到索引是在PHP中變慢的一種方式,它可以更好地使用Java來完成 - 即。使用Java Lucene來(重新)構建索引,只使用PHP和Zend_Lucene作爲前端。順便一些閱讀材料:http://dadabase.de/weblog/archives/2009/07/22/recommendation-dont-use-zend-php-lucene – wimvds 2010-04-23 14:05:29

回答

1

見我的回答Can I predict how large my Zend Framework index will be?

我測試的Zend_Search_Lucene與Apache的Lucene的(Java版本)。在我的測試中,Java產品索引了150萬個比PHP產品快300倍的文檔。

使用Apache Solr(Apache Lucene的Tomcat容器)會讓你感到高興。 Solr包含一個名爲DataImportHandler的工具,它直接從JDBC數據源獲取數據。

使用PECL Solr擴展與PHP中的Solr進行通信。如果您無法安裝該PHP擴展程序,請使用Curl,這應該在PHP的默認安裝中提供。

+0

感謝您的幫助。 它看起來像我將使用Zend的Lucene僅用於搜索部分並在Java中執行索引。 – jdichev 2010-04-25 09:09:10

+0

你應該知道,Zend Lucene不能理解比2.3版更高的Apache Lucene索引格式。 – 2010-04-25 16:49:47

+0

謝謝,我也發現了在MySQL中實用的全文搜索特別有用。 – jdichev 2010-04-26 09:15:17