论坛首页 Java企业应用论坛

lucene 多线程下创建大数据索引文件 效率问题

浏览 6554 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-08-27  

应用场景:
需查询数据库(1000W条数据的表),然后将查询出来的数据放入lucene索引文件中.

我的方案:
采用多线程去查询数据库,每个线程负责查询一个区间的数据(如:1W条),每个线程查询完之后创建一个索引文件,最后把这些小的索引文件
合并.

实施步骤:
创建了一个线程池,初始化500个线程,每个线程分配的任务是到数据库查询1W条记录(单线程环境下查询1W条数据花费5分钟)
直到1000W条数据全部查完.数据库连接池设了150个连接.

测试结果:
记录数量  花费时间 线程数量 单个线程查询的记录数
1W        75S       50       200
10W       11分钟    100      1000
10W       11分钟    200      500
100W      114分钟   1000     1000

经测试,效率瓶颈应该在多线程查询数据库上面,如何提高多线程查询数据库的效率了.

请问大家有没有更好的方案提高 来完成这个需求(只要考虑效率高就OK,它是一个后台程序)
   发表时间:2012-08-27   最后修改:2012-08-27
感觉上你线程数量超过数据库连接数量,其实都是在等待状态吧? 线程数量的增加同时也增大了系统开销。cpu本身就这点能力,查看一下cpu占用率如何。如果用多台机器分布式fetch可能会好点。
数据库本身有没有优化好?譬如index以及分区。
另外不知道你搜索内容size多大?网络吞吐也是需要考虑的问题。
0 请登录后投票
   发表时间:2012-08-27   最后修改:2012-08-27
线程数量超过数据库连接数量,确实是没有什么必要的,你只要保证 CPU, 数据库连接数,网络带宽 使用率都比较饱和就可以了,比如80% 90%这样
0 请登录后投票
   发表时间:2012-08-27  
在内存中建立缓存可以快很多
0 请登录后投票
   发表时间:2012-08-27  
内存+缓存吧 否则 这肯定会挂。大数据量lucene 的确很揪心。用缓存吧
0 请登录后投票
   发表时间:2012-08-27  
线程不要那么多,没必要。
lucene的索引运算很多,多留点时间给cpu吧。
1000w数据有多大?内存够的话,全部进内存,开上10个现场各处理一部分就够了。
想要更快,多找几个机器,分布式索引,然后拷贝过去。
话说lucene已经支持搜索多个目录的索引,为啥要合并呢?拆的细些,对将来搜索也有好处。
0 请登录后投票
   发表时间:2012-08-28  
为什么不给表建视图,通过视图建立索引呢 ?

0 请登录后投票
   发表时间:2012-08-28  
yuzou45 写道
为什么不给表建视图,通过视图建立索引呢 ?


这个也是查询的变体,除非可以物化视图。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics