hbase中的BloomFilter起作用的场景

hbase中有BloomFilter的功能,可以在有些情况下过滤掉不需要的hfile,节省IO.但是BloomFilter在什么情况下起作用呢?根据[url=http://hbase.apache.org/book/perf.schema.html]hbase文档[/url],只有get操作才使用到BloomFilter

[quote]In terms of HBase, Bloom filters provide a lightweight in-memory structure to reduce the number of disk reads for a given Get operation (Bloom filters do not work with Scans) to only the StoreFiles likely to contain the desired Row. The potential performance gain increases with the number of parallel reads.[/quote]

从代码上来看
StoreFileScanner的shouldUseScanner方法中,测试这个storefile是否应该被读取

 public boolean shouldUseScanner(Scan scan, SortedSet<byte[]> columns, long oldestUnexpiredTS) {
return reader.passesTimerangeFilter(scan, oldestUnexpiredTS)
&& reader.passesKeyRangeFilter(scan) && reader.passesBloomFilter(scan, columns);
}

passesBloomFilter方法中,一开始就pass了get以外的操作
  if (!scan.isGetScan()) {
return true;
}


所以passesBloomFilter只对get起作用,scan是不起作用的

[url] http://www.quora.com/How-are-bloom-filters-used-in-HBase[/url]
里提到如果集中的批量的对一个row进行put,那么这个row分布在少量的Hfile中,如果均匀的在不同column上进行put,就可能导致一个row的不同keyvalue分布在所有Hfile中,那么row 级别的bloom filter就不起作用了.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值