bloom fliter的作用主要用于提升hbase的读性能,但是会牺牲一定的存储空间。

原理:

bloom fliter是一种空间效率很高的随机数据结构,初始状态时,bloom filter是一个包含m位的位数组(值为0),当有元素写入时,通过k个hash函数将这个元素映到这个位数组中,映射的位置设置为1。当判断一个元素是否存在时,用同样的方式进行映射,当映射的位置在这个位数组的值全部为1时,则认为该元素是存在的。

举例:

假设将x,y,z三个关键信息存入表中,判断w是否存在。

  • 写入数据。x,y,z存入时,通过hash函数获得对应的位向量,写入到位数组中。
  • 查找数据。对w同样进行hash函数获取对应的位向量,判断位数组中对应的位置是否全为1
  • 如果是,则表明w存在表中
  • 如果不是,则表明w不存在表中

hbase-bloom filter-LMLPHP

create 'test_table',{NAME=>'test_col_family',VERSIONS=>1,BLOCKCACHE=>true,BLOOMFILTER=>'ROW',COMPRESSION=>'SNAPPY',TTL => ' 259200 '},{SPLITS => ['1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']}

  

hbase在创建表时,可以通过BLOOMFILTER参数配置bloom fliter,可选的值有NONE|ROW|ROWCOL三种,默认为NONE,即不开启bloom filter,ROW为对行过滤,ROWCOL为根据行和列簇进行过滤。启用bloom filter,在get和scan的操作过程中,可以筛选过滤一部分hfile,减少io开销,从而提升查询性能。

aa

05-11 18:31