概念

Bloom Filter

主要功能

提高随机读的性能

存储开销

bloom filter 的数据存在 StoreFile 的 meta 中,一旦写入无法更新,因为 StoreFile 是不可变的。Bloomfilter 是一个列族(cf)级别的配置属性,如果你在表中设置了 Bloomfilter,那么 HBase 会在生成 StoreFile 时包含一份 bloomfilter 结构的数据,称其为 MetaBlock;MetaBlock 与 DataBlock(真实的 KeyValue 数据)一起由 LRUBlockCache 维护。所以,开启 bloomfilter 会有一定的存储及内存 cache 开销。

控制粒度

常用场景

  1. 根据 key 随机读时,在 StoreFile 级别进行过滤
  2. 读数据时,会查询到大量不存在的 key,也可用于高效判断 key 是否存在

举例说明

假设 x、y、z 三个 key 存在于 table 中,W 不存在

使用 Bloom Filter 可以帮助我们减少为了判断 key 是否存在而去做 Scan 操作的次数

源码解析