1 标准布隆过滤器
1.1 优点
- 支持添加和查询
- 节省空间
1.2 缺点
- 不支持删除操作
- 布隆过滤器要采用多种哈希函数进行多次哈希
2 计数布隆过滤器
2.1 优点
- 支持添加和删除
- 支持计数
2.2 缺点
- 内存消耗是标准布隆过滤器的3-4倍
3 布谷鸟过滤器
3.1 优点
- 支持动态新增和删除元素
- 布谷鸟哈希表更加紧凑,可以更加节省空间,散列确保了高空间占用率
- 布隆过滤器要采用多种哈希函数进行多次哈希,而布谷鸟过滤器只需一次哈希,因此查询效率很高,提供了比标准布隆过滤器更高的查找性能
- 如果要求错误率小于3%,那么在许多实际应用中,它比布隆过滤器占用的空间更小
- 比商过滤器(quotient filter,另一种过滤器)之类的替代方案更容易实现
3.2 缺点
- 布谷鸟过滤器采用一种备用候选桶的方案,候选桶与首选桶可以通过位置和存储值互相异或得出,这种对应关系要求桶的大小必须是 2 的指数倍
- 布隆过滤器插入时计算好哈希直接写入位即可,而布谷鸟过滤器在计算后可能会出现当前位置上已经存储了指纹,这时候就需要将已存储的项踢到候选桶,随着桶越来越满,产生冲突的可能性越来越大,插入耗时越来越高,因此其插入性能相比布隆过滤器很差
- 插入重复元素:布隆过滤器在插入重复元素时并没有影响,只是对已存在的位再置一遍。而布谷鸟过滤器对已存在的值会做踢出操作,因此重复元素的插入存在上限
- 布谷鸟过滤器的删除并不完美:有上述重复插入的限制,删除时也会出现相关的问题:
- 删除仅在相同哈希值被插入一次时是完美的
- 如果元素没有插入便进行删除,可能会出现误删除,这和假阳性率的原因相同
- 如果元素插入了多次,那么每次删除仅会删除一个值,你需要知道元素插入了多少次才能删除干净,或者循环运行删除直到删除失败为止
3.3 参数
- 哈希函数个数(k):哈希个数,取 2 就足够
- 桶大小(b):每个桶存储多少个指纹
- 指纹大小(f):每个指纹存储键的哈希值的多少位
3.4 删除
布谷鸟过滤器就像计数布隆过滤器,可以通过从哈希表删除相应的指纹删除插入的项。