hbase关于bloom filter使用
1.Bloomfilter的原理??
可参考?http://hi.baidu.com/yizhizaitaobi/blog/item/cc1290a0a0cd69974610646f.html?
2.Bloomfilter在HBase中的作用??
HBase利用Bloomfilter来提高随机读(Get)的性能,对于顺序读(Scan)而言,设置Bloomfilter是没有作用的(0.92以后,如果设置了bloomfilter为ROWCOL,对于指定了qualifier的Scan有一定的优化,但不是那种直接过滤文件,排除在查找范围的形式)?
3.Bloomfilter在HBase中的开销??
Bloomfilter是一个列族(cf)级别的配置属性,如果你在表中设置了Bloomfilter,那么HBase会在生成StoreFile时包含一份bloomfilter结构的数据,称其为MetaBlock;MetaBlock与DataBlock(真实的KeyValue数据)一起由LRUBlockCache维护。所以,开启bloomfilter会有一定的存储及内存cache开销。?
4.Bloomfilter如何提高随机读(Get)的性能??
对于某个region的随机读,HBase会遍历读memstore及storefile(按照一定的顺序),将结果合并返回给客户端。如果你设置了bloomfilter,那么在遍历读storefile时,就可以利用bloomfilter,忽略某些storefile。?
5.HBase中的Bloomfilter的类型及使用??
a)ROW, 根据KeyValue中的row来过滤storefile?
举例:假设有2个storefile文件sf1和sf2,?
sf1包含kv1(r1 cf:q1 v)、kv2(r2 cf:q1 v)?
sf2包含kv3(r3 cf:q1 v)、kv4(r4 cf:q1 v)?
如果设置了CF属性中的bloomfilter为ROW,那么get(r1)时就会过滤sf1,get(r3)就会过滤sf2?
b)ROWCOL,根据KeyValue中的row+qualifier来过滤storefile?
举例:假设有2个storefile文件sf1和sf2,?
sf1包含kv1(r1 cf:q1 v)、kv2(r2 cf:q1 v)?
sf2包含kv3(r1 cf:q2 v)、kv4(r2 cf:q2 v)?
如果设置了CF属性中的bloomfilter为ROW,无论get(r1,q1)还是get(r1,q2),都会读取sf1+sf2;而如果设置了CF属性中的bloomfilter为ROWCOL,那么get(r1,q1)就会过滤sf2,get(r1,q2)就会过滤sf1?
6.ROWCOL一定比ROW效果好么??
不一定?
a)ROWCOL只对指定列(Qualifier)的随机读(Get)有效,如果应用中的随机读get,只含row,而没有指定读哪个qualifier,那么设置ROWCOL是没有效果的,这种场景就应该使用ROW?
b)如果随机读中指定的列(Qualifier)的数目大于等于2,在0.90版本中ROWCOL是无效的,而在0.92版本以后,HBASE-2794对这一情景作了优化,是有效的(通过KeyValueScanner#seekExactly)?
c)如果同一row多个列的数据在应用上是同一时间put的,那么ROW与ROWCOL的效果近似相同,而ROWCOL只对指定了列的随机读才会有效,所以设置为ROW更佳?
7.ROWCOL与ROW只在名称上有联系,ROWCOL并不是ROW的扩展,不能取代ROW?
8.region下的storefile数目越多,bloomfilter的效果越好?
9.region下的storefile数目越少,HBase读性能越好?