目前解决Bloom filter删除问题有很多种方法,比如Bloom filter的变种Counting Bloom filter、d-left Counting Bloom filter,还有Cuckoo filter等,但是这些方法基本上都是对Bloom filter本身算法做出或大或小的改变,同样的也牺牲了一部分性能。以上三种方法的原理及细节均可以通过阅读论文或查找相关资料进行学习(这里不做过多的介绍)。接下来,介绍不同于以上方法的另一种可行思路!
在计算机系统结构中,存在这样一句话: 加上一个缓存层可以解决体系结构大部分问题!
1. 探索
在解决Bloom filter不支持删除的问题上,我们借鉴这种思路,添加一个缓存层用于存储删除的元素。添加的缓存层应满足的需求:①在查找时应具备与Bloom filter相匹配的性能,以便并发操作时可以给出结果(即当前元素是否已被删除)②空间开销应尽可能的小。
满足上述两个条件,我的第一反应是Bloom filter索引结构本身,即我们将需要删除的元素插入另一个Bloom filter当中。
2. 将Bloom filter视作“缓存”
基于以上探索,将Bloom filter需要删除的元素插入另一个Bloom filter(我们分别称之为insert Bloom filter,insert Bloom filter)。如下图所示,我们需要建立映射关系的元素插入inser