2010-04-23 94 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