Lucene的分页功能怎么这么局限啊,大数据量下会内存溢出,而且很慢!!!!谁能解释下,谢谢

问题描述

大家说说Lucene针对以下这种大数据量分页场景,有没有必要改进的。。。真的很痛苦!我们的项目就要求用lucene,不用oracle,数据量又大,分页这里是个性能瓶颈,搞不定啊!TopScoreDocCollectorf=TopScoreDocCollector.create(10000010,false);indexSearcher.search(query,f);TopDocstopDocs=f.topDocs(10000000,10000010);​遇到这种大数据量问题,很痛苦,我们的业务数据量是高达上1000万的,按照每页显示10条,查询到上百万页的时候,如果用TopScoreDocCollector.create(10000010,false);这个方法,命中数量就要先查出10000010个ScoreDoc对象在内存里面,然后再截取10000000到10000010,这个过程中会出现一次内存瞬间高涨。。。。即内存里面瞬间会有10000010个ScoreDoc对象,转换成内存大小有近400MB左右,占用内存相当大。针对上面这种大数据量分页场景,真希望lucene能提供一种简洁的分页方法,比如传递两个下标,start和end,直接在最低层返回10000000到10000010的ScoreDoc对象,这样内存里面最大的ScoreDoc只有10个,而不是一次性返回10000010个ScoreDoc对象,将内存撑大到溢出。。。。

解决方案

解决方案二:
我们数据量几亿条也没事啊但是查的数不准比如我查江苏江西的数据也出来了不知道你们那分词库用的什么查出来的数据准吗
解决方案三:
就空格分词,我们业务不复杂,不是搜索引擎软件,但是要求不用数据库,关键是我们软件性能要求高,而且总运行内存只有1G,所以要想管理上千万的数据量,这个Lucene分页查询真的有问题,主要是点击的页数越多,越往后越慢,因为每次都要命中上千万的ScoreDoc,再在内存里面截取,这种方式真的太耗性能了期待高手解决,谢谢
解决方案四:
支持帮顶,我也遇到这个问题!还有建索引时,越往后索引块大了,每次读写都很慢。。。郁闷,咋办
解决方案五:
该问题已解决!!
解决方案六:
怎么解决的求问
解决方案七:
求解决方案lz
解决方案八:
晕死看了半天结局又是“问题已解决”却没解决方案
解决方案九:
解决方案就是查询的时候重写collector接口的实现类,自定义一个collector对象,所有的排序都是基于collector实现的,可以研究这里然后重构一个
解决方案十:
其实100个记录足够用了百度,谷歌搜索也只是告诉你一共有多少,但它也不会傻了吧唧的把所有结果都查出来放到内存里
解决方案十一:
推荐ElasticSearchSolr

时间: 2024-10-05 02:58:09

Lucene的分页功能怎么这么局限啊,大数据量下会内存溢出,而且很慢!!!!谁能解释下,谢谢的相关文章

在ASP.NET 2.0中操作数据之二十五:大数据量时提高分页的效率_自学过程

导言 如我们在之前的教程里讨论的那样,分页可以通过两种方法来实现: 1.默认分页– 你仅仅只用选中data Web control的 智能标签的Enable Paging ; 然而,当你浏览页面的时候,虽然你看到的只是一小部分数据,ObjectDataSource 还是会每次都读取所有数据 2.自定义分页– 通过只从数据库读取用户需要浏览的那部分数据,提高了性能. 显然这种方法需要你做更多的工作. 默认的分页功能非常吸引人,因为你只需要选中一个checkbox就可以完成了.但是它每次都读取所有的

大数据量下的分页

分页|数据 对于非常大的数据模型而言,分页检索时,每次都加载整个数据源非常浪费.通常的选择是检索页面大小的块区的数据,而非检索所有的数据,然后单步执行当前行. 本文演示ASP.net的DataGrid和Sql Server 实现大数据量下的分页,为了便于实现演示,数据表采用了Northwind数据库的Orders表(830条记录). 如果数据表中有唯一的自增索引,并且这个字段没有出现断号现象.检索页面大小的块区数据就非常简单了.通过简单的Sql语句就可以实现这个功能:select * from

ASP.NET 2.0数据教程之二十五:大数据量时提高分页的效率

返回"ASP.NET 2.0数据教程目录" 如我们在之前的教程里讨论的那样,分页可以通过两种方法来实现: 默 认分页– 你仅仅只用选中data Web control的智能标签的Enable Paging ; 然而,当你浏览页面的时候,虽然你看到的只是一小部分数据,ObjectDataSource 还是会每次都读取所有数据 自定义分页– 通过只从数据库读取用户 需要浏览的那部分数据,提高了性能.显然这种方法需要你做更多的工作. 默认的分页功能非常吸引人,因为你只需要选中一个checkb

大数据量时提高分页的效率_数据库其它

如我们在之前的教程里讨论的那样,分页可以通过两种方法来实现: 默认分页– 你仅仅只用选中data Web control的 智能标签的Enable Paging ; 然而,当你浏览页面的时候,虽然你看到的只是一小部分数据,ObjectDataSource 还是会每次都读取所有数据 自定义分页– 通过只从数据库读取用户需要浏览的那部分数据,提高了性能. 显然这种方法需要你做更多的工作. 默认的分页功能非常吸引人,因为你只需要选中一个checkbox就可以完成了.但是它每次都读取所有的数据,这种方式

MySQL大数据量时提高分页效率

我的这段代码是大数据量时提高分页的效率的测试代码 --提高分页效率:实现分页时只读取显示数据,需要先在数据库创建数据库"TestForPaging" use TestForPaging go --创建表SomeData create table SomeData ( id int primary key, name varchar(30) null, description text ) go --插入数据 insert into SomeData values(1,'num1','第

Oracle大数据量分页通用存储过程

/*根据网友资料修改的,见笑了*/ type refCursorType is REF CURSOR;  --游标类型定义,用于返回数据集 /***************************************************************** *功能描述: 大数据量分页通用存储过程 *创 建 人: 夏春涛 xchuntao@163.com qq:23106676 *创建时间: 2005-06-29 **********************************

大数据量分页存储过程效率测试附测试代码与结果

测试环境 硬件:CPU 酷睿双核T5750 内存:2G 软件:Windows server 2003 + sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 复制代码 代码如下: create database data_Test --创建数据库 data_Test GO use data_Test GO create table tb_TestTable --创建表 (id int identity(1,1) pri

mysql limit大数据量分页优化方法

Mysql的优化是非常重要的.其他最常用也最需要优化的就是limit.Mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降. 同样是取10条数据 select * from yanxue8_visit limit 10000,10 和 select * from yanxue8_visit limit 0,10 就不是一个数量级别的. 网上也很多关于limit的五条优化准则,都是翻译自Mysql手册,虽然正确但不实用.今天发现一篇文章写了些关于limit优

.net 取大数据时服务器可用内存远远没有达到峰值可是报内存溢出,除了分页查询还能怎么处理?

问题描述 如题,望大神指点一二 解决方案 解决方案二:不是你有100M内存,然后你这一个程序就可以用100M内存的--解决方案三:异步加载,当你下拉你的滚动条时,每下拉N个像素,则多请求一些数据加在Table末尾.其实还是分页的逻辑.数据太多了就一次不要加载完呗.不然还能怎么样?解决方案四:引用1楼starfd的回复: 不是你有100M内存,然后你这一个程序就可以用100M内存的-- 那怎么能设置一下,让使用内存达到最大化呢,现在我遇到的问题就是,服务器的可用内存大概有6个G,实际上我取数据量超