浏览 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,它是一个后台程序) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-08-27
最后修改:2012-08-27
感觉上你线程数量超过数据库连接数量,其实都是在等待状态吧? 线程数量的增加同时也增大了系统开销。cpu本身就这点能力,查看一下cpu占用率如何。如果用多台机器分布式fetch可能会好点。
数据库本身有没有优化好?譬如index以及分区。 另外不知道你搜索内容size多大?网络吞吐也是需要考虑的问题。 |
|
返回顶楼 | |
发表时间:2012-08-27
最后修改:2012-08-27
线程数量超过数据库连接数量,确实是没有什么必要的,你只要保证 CPU, 数据库连接数,网络带宽 使用率都比较饱和就可以了,比如80% 90%这样
|
|
返回顶楼 | |
发表时间:2012-08-27
在内存中建立缓存可以快很多
|
|
返回顶楼 | |
发表时间:2012-08-27
内存+缓存吧 否则 这肯定会挂。大数据量lucene 的确很揪心。用缓存吧
|
|
返回顶楼 | |
发表时间:2012-08-27
线程不要那么多,没必要。
lucene的索引运算很多,多留点时间给cpu吧。 1000w数据有多大?内存够的话,全部进内存,开上10个现场各处理一部分就够了。 想要更快,多找几个机器,分布式索引,然后拷贝过去。 话说lucene已经支持搜索多个目录的索引,为啥要合并呢?拆的细些,对将来搜索也有好处。 |
|
返回顶楼 | |
发表时间:2012-08-28
为什么不给表建视图,通过视图建立索引呢 ?
|
|
返回顶楼 | |
发表时间:2012-08-28
yuzou45 写道 为什么不给表建视图,通过视图建立索引呢 ?
这个也是查询的变体,除非可以物化视图。 |
|
返回顶楼 | |