简介
● 默认的bloom filter:
○ 是根据写入的完整的key构造bloom filter的;
● prefix_bloom_filter:
○ 使用:需要设置prefix_extractor,来标识每次取key的前N位,根据写入key的前N位来构造bloom filter;
○ 内存占用:
■ memtable:有对应的prefix_bloom_; 这部分通过下面表格中参数控制;
■ sst的bloom filter也是根据prefix构造bloom filter;这部分控制参数和默认bloom filter一样
●
○ 设置prefix_extractor示例
■ prefix_extractor=fixed:12 固定12位——nebula的使用方式
■ prefix_extractor=capped:12 最大12位
参数参数
memtable_prefix_bloom_size_ratio
含义
memtable 的prefix_bloom_占用内存大小公式=write_buffer_size*memtable_prefix_bloom_size_ratio*8
限制:最大0.25
if (result.memtable_prefix_bloom_size_ratio > 0.25) {
result.memtable_prefix_bloom_size_ratio = 0.25;
memtable 的 prefix bloom 的reset触发条件
// use bloom_filter_ for both whole key and prefix bloom filter
if ((prefix_extractor_ || moptions_.memtable_whole_key_filtering) &&
moptions_.memtable_prefix_bloom_bits > 0) {
bloom_filter_.reset(
new DynamicBloom(&arena_, moptions_.memtable_prefix_bloom_bits,
6 /* hard coded 6 probes */,
moptions_.memtable_huge_page_size, ioptions.info_log));
}