关于hbase scan查询的效率----filterlist(急)

Steel_EdwardElric 2012-06-04 05:19:47
scan.setFilters()
通过filter设置的条件查不到数据时,响应速度非常慢,大概在十几秒,有时会超时,
但可以查到数据时,响应速度只有几百ms,差距非常大

环境:
数据10W条,表为单一列族,30-40的列


部分代码:

Scan scan = new Scan();
FilterList filters = new FilterList();

for (String[] param : params)
{
//param[0]为列名,param[1]为相应的值
filters.addFilter(new SingleColumnValueFilter("INFO".getBytes(), param[0].getBytes(), CompareOp.EQUAL, param[1].getBytes()));
}

scan.setFilter(filters);
scan.setCaching(count + 1);

ResultScanner resultScanner = null;
resultScanner = table.getScanner(scan);
//通过debug,查不到数据的情况下在resultScanner.next()就已经停住不动了
while ((result = resultScanner.next()) != null)
{
....
}


有人清楚是什么原因造成的么? 非常感谢
...全文
25562 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bitzhuxb 2014-08-21
  • 打赏
  • 举报
回复
前缀扫描是全盘扫描吗?
Steel_EdwardElric 2014-07-28
  • 打赏
  • 举报
回复
pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528pc9528
pc9528 2014-04-14
  • 打赏
  • 举报
回复
rowkey是hbase中很重要的一个设计,如果你把它当成普通字段那你的设计就有点失败了。它的设计可以说是一门艺术。你的查询如果不能把rowkey加入进来,那你的设计基本是失败的。加上rowkey,hbase可以快速地定位到具体的region去取你要的数据,否则就会像疯狗一样满上遍野的找数据。
wanglongshengdf 2013-12-23
  • 打赏
  • 举报
回复
引用 9 楼 maray 的回复:
非主键列查询,没有Rowkey的话肯定会全表扫描。解决方法: 1. 设计表格的时候就考虑到这种查询,让其参与到rowkey中来。 2. 使用索引
hbase查询速度还是要依靠rowkey,所以根据业务逻辑把rowkey设计好,之后所有的查询都通过rowkey,是会非常快。 批量查询最好是用 scan的startkey endkey来做查询条件
maray 2013-12-02
  • 打赏
  • 举报
回复
非主键列查询,没有Rowkey的话肯定会全表扫描。解决方法: 1. 设计表格的时候就考虑到这种查询,让其参与到rowkey中来。 2. 使用索引
Wuerselen 2013-08-08
  • 打赏
  • 举报
回复
引用 7 楼 pandoraliu 的回复:
那就考虑一下,做个新的queryIndex Collection. 设定,所有检索,从这里出发,如果,不在这个Coll里面的,就是没有值。 查询条件,尽量单一,如果条件非常多,就专门做一列,把这些需要检索的内容做成Hash放进去。
10W数据真的是个小数据量,应该还有别的方法吧。 我没基本上都用上边这个思路,因为觉得设置timeout的话,不大保险。 缺点是,写入数据的时候,需要做个hash的预处理,但是,真的以后的操作容易很多。 而且,还可以,很容易的找到,相同的数据项,进行Drill down
Wuerselen 2013-08-08
  • 打赏
  • 举报
回复
那就考虑一下,做个新的queryIndex Collection. 设定,所有检索,从这里出发,如果,不在这个Coll里面的,就是没有值。 查询条件,尽量单一,如果条件非常多,就专门做一列,把这些需要检索的内容做成Hash放进去。
宣源之父 2013-07-08
  • 打赏
  • 举报
回复
我也遇到了这个问题,最后没办法,看了hbase 的源码,ClientScanner 类 206 行,当条件不能满足时,它会去找每个region 上的数据做对比。所以很慢,但是没找到解决方案,如果要是filter指定了正确的条件,或是存在的数据,那如果要是 10w 数据 就可以在毫秒级下查询出来。
yzlback 2013-04-21
  • 打赏
  • 举报
回复
我也遇到这个问题,我查询的时候还设置了rowkey的范围,查询1分钟范围的数据(该分钟内没有数据),结果就卡在scanner.next()那里了,
chenxue0821 2013-03-29
  • 打赏
  • 举报
回复
这个无解,因为你没有匹配到数据,所以resultScanner.next()时,它通表查了10W条数据,所以速度就慢了,解决hbase速度问题,大数据最好从rowkey入手,ColumnValueFilter的数度是很慢的
Steel_EdwardElric 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

//通过debug,查不到数据的情况下在resultScanner.next()就已经停住不动了

不动是因为没有符合条件的结果,所以一直再做scan,直到把startkey和endkey之间的数据全部扫描完。
[/Quote]
hbase 通过非rowkey 的条件查询,发现非常慢,这个有没有优化的方案(排除优化rowkey的方式)
ppcpu 2012-06-24
  • 打赏
  • 举报
回复
//通过debug,查不到数据的情况下在resultScanner.next()就已经停住不动了

不动是因为没有符合条件的结果,所以一直再做scan,直到把startkey和endkey之间的数据全部扫描完。
Steel_EdwardElric 2012-06-04
  • 打赏
  • 举报
回复
UP UP 有人了解吗

8,028

社区成员

发帖
与我相关
我的任务
社区描述
高性能数据库开发
社区管理员
  • 高性能数据库开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧