2007-02-23

对lucene进行了一番性能测试

首先,我模仿lucene的Demo写了一个MakeIndex程序,其中也有类似Demo中的FileDocument类,分词采用的是IK_CAnalyzer 1.4。

然后,我对IndexWriter的合并因子对索引速度的影响进行了测试,同时我也测试了内存索引和硬盘索引的速度差别。测试文档为两份,3838个文件和11500个文件。数据如下:


结论如下:
在需索引文件数不大的情况下,合并因子对性能影响并不大。至少在万级水平,较大的合并因子才会对性能带来显著改进。这与我对合并因子的理解基本上一致。

内存索引在某些情况下居然会比硬盘索引慢,可能的原因是:1、内存在堆内频繁分配释放,浪费时间;2、本地文件读取在这次测试中耗时最多,索引时间较少,故而结果受到本地文件读取速度影响较大,所以测试时间颠簸超过了内存和硬盘的速度差。

总之可以证明硬盘索引效率很高跟内存效率差异不大。内存如果作为缓冲,而且尺寸选择得当应该会大幅提高效率,时间不足,就不做更细节的测试了。
接下来,我进行了不同索引方式(是否保存被索引的全文文本在索引中)的性能测试,测试文件是我收藏的中文小说的纯文本文件,经过分割和复制,有183888个,总尺寸为1207M,测试结果如下:


结论如下:
最快的是不保存耗时2930113/1000/60=48.8分钟,最慢的是4030653/1000/60=67.3分钟,效率还是另人满意的。压缩保存的时间开销完全可以接受,带来的膨胀率也完全可以接受。应该是最佳的选择。
以上程序,在我的MacBook上面开发,第一个测试在我的MacBook进行,Mac book的jdk版本为1.5,很稳定。第二个在我们的linux服务器上进行。Linux服务器原安装的是jdk 1.6,程序频繁无故锁死,找不到原因。后换为jdk 1.43,程序很稳定运行下去了。

我的估计是jdk 1.6还不够稳定,霍炬估计是程序中有跟jdk 1.6不兼容的部分,存疑与此。

update:在服务器安装了jdk 1.5也会频繁发生锁死,看来出现的问题可能跟1.5以后的机制改变有关,继续存疑。

Technorati technorati tags: , , ,

请不要吝惜您的评论,每一条评论,都是我在漫漫长夜前行的力量

1 条评论:

Anonymous 匿名 说...

文档库是什么样地?典型不?网上有没有现成的文档库好介绍啊?
imxuhao@126.com

1:02 下午

 

发表评论

<< 主页