我可以预测我的Zend Framework索引有多大吗? (以及一些快速问:s)

时间:2009-12-21 23:28:04

标签: php sql mysql zend-framework

我在mysql表中有大约100thousand行,其中each row has about 8 fields.

我终于掌握了如何使用Zend Lucene索引和搜索mysql表中的数据。

在我完全实现这个功能之前,我有一些问题:

1-是否可以提前确定索引的大小?这是因为在Zend手册中它表示索引的最大大小为2GB。我马上就认为这对我的桌子来说还不够!

2-我看过帖子,他们说Zend Lucene搜索在大型索引上非常慢,最多几分钟!是否更快地直接使用mysql命令(SELECT,LIKE等)而不是zend?

3-我的问题还有其他解决办法,即为至少具有these函数的分类创建搜索引擎,并且不需要全文mysql索引(字段)。

由于

1 个答案:

答案 0 :(得分:11)

SOLR基本上是一个Apache Tomcat容器,它实现了一个REST接口来查询Apache Lucene索引。是的,您需要能够在Web服务器上运行Java应用程序。这是您与托管服务提供商合作的问题。

使用您的Web应用程序的客户端不需要运行Java。您的PHP应用程序可以对SOLR服务进行REST查询,并以HTML格式化结果。客户端只看到HTML输出;它永远不需要知道数据来自用Java实现的服务。

Zend_Search_Lucene是纯PHP实现,应该与Apache Lucene完全相同。 Zend解决方案甚至使用相同的索引文件格式。因此存储方面应该是平等的。

我使用Java Lucene索引StackOverflow数据转储(2009年10月)。我索引了150万行,包括大约1千克的文本数据。 Lucene索引为1323 MB,而相同数据的MySQL FULLTEXT索引仅为466 MB。

使用SQL LIKE谓词代替任何全文索引解决方案当然不需要空间,因为它无论如何都无法使用传统索引。但在我的测试中,使用LIKE的速度比Java Lucene慢大约200倍,而后者在相同数据上的速度比MySQL FULLTEXT指数慢约40%。

请参阅我最近关于MySQL的全文索引解决方案的演示文稿:

http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql

它无法与Java Lucene技术的性能和可扩展性相匹敌,这并不奇怪。 PHP作为一种语言的优势在于提高开发效率,而不是提高运行效率。


更新: 我刚尝试使用Zend_Search_Lucene创建索引。使用PHP创建索引比使用Java Lucene技术慢得多,所以我只索引了10,000个文档。这花费了大约15分钟,这将花费大约36个小时来索引整个系列。将其与Java Lucene进行比较,在我的测试中,我在7分钟内完整地收集了150万份文档。

我使用Zend_Search_Lucene创建的索引的大小为8.75 MB。推测这150倍,我估计完整的指数将是1312.5 MB。因此,我得出结论,Zend_Search_Lucene创建的索引大小与Java Lucene生成的索引大小相同。这是预期的。