HBase布隆过滤器的问题

关于HBase中的布隆过滤器有些疑惑,来请教一下。
HBase布隆过滤器是针对每个HFile都有一个过滤器吗?
1.如果是的话,那来一条数据,每个HFile都要调用布隆过滤器来进行多个hash?这样不会效率很低吗?
2.如果只是针对HStore,那么过滤后bit位有0也只能说明这个HStore里没有这条数据吧,都是1也只能代表众多HFile里可能有这条数据,并不能进一步筛选HFile的粒度呀。
已邀请:

libis - HBase爱好者

赞同来自: Figo

1. Bloomfilter的数据是HFile级别的,可以认为每个HFile都会有一个布隆过滤器。
2. 查询是先经过[StartKey,EndKey]或者TimeRange过滤一遍HFile,过滤不掉的在经过布隆过滤器处理。布隆过滤器的数据大概率会以元数据的形式加载到BlockCache中,rowkey执行hash本身并不耗时,然后直接在内存数组中查找对应的映射也不耗时。对整体查询效率影响并不大,反而可以排除很多不满足条件的HFile。

要回复问题请先登录注册