lucene索引优化前后性能对比及优化方针

来源:互联网 发布:北京ds数据精灵 编辑:程序博客网 时间:2024/04/29 11:17

针对目前线上产品进行压力,发现不少问题,现在做个总结

我们的产品是一个问答系统,主要核心技术是lucene搜索,针对不同实例,分成不同的索引目录,有N个实例会存在N个indexwriter

目前测试数据量及环境如下:

   6核4G
   数据量1000万
   问题字数:平均14个字
   问题答案字数:平均418个字

优化前1000万数据量需要构建索引16个小时,IO已经极限

优化后1000万数据量针对不同实例对比如下

 

索引构建所并发数

单实例构建索引

两个实例两个线程并发构建索引

三个实例三个线程并发构建索引

内存优化时间

182655毫秒  3分钟

实例1

 

192110毫秒 3.20分钟

实例1

 

189883毫秒 3.164分钟 

实例2

 

192114毫秒 3.20分钟

实例2

 

189889毫秒3.164分钟 

 

 

实例3

 

189879毫秒 3.164分钟 

磁盘优化时间

1514423毫秒   25分钟

实例1

 

3820694毫秒  63.678分钟

实例1

 

4874940毫秒 81.249分钟

实例2

 

3322985毫秒  55.383分钟

实例2

 

4579260毫秒 76.321分钟

 

 

实例3

 

4807620毫秒 80.127分钟

单独构建索引的时间

4663807毫秒    1.295 个小时

实例1

 

7867191毫秒  2.185小时

实例1

 

13925086 毫秒 3.868 小时

实例2

 

7776207毫秒  2.16小时

实例2

 

14423098 毫秒 4.006小时

 

 

实例3

 

14349161 毫秒 3.985小时

构建索引和优化总时间

6196072毫秒   1.721 小时

实例1

 

11811529毫秒 3.28小时

实例1

 

18991299毫秒 5.275小时

实例2

 

11202412毫秒 3.11小时   

实例2

 

19212047毫秒 5.336小时

 

 

实例3

 

19356620毫秒 5.376小时 

 

 

 

优化方针:

     1、多线程构建索引

        采用jdk1.5提供的线程池多线程构建索引

     2、构建索引的脚本调优

        采用游标方式抓取数据而不是分页抓取数据

     3、lucene api调优

            indexwriter.setRAMBufferSizeMB(256);// M
            indexwriter.setUseCompoundFile(false);// 多文件索引
            indexwriter.setMergeFactor(10);