布隆过滤器实现如何保持清洁?

时间:2011-08-13 06:35:53

标签: algorithm bloom-filter

由于它们填满并且误报的百分比增加,有哪些技术可以防止它们饱和?看起来你不能清空比特,因为这会对存储在该节点中的数据立即产生负面影响。

即使你有一组已知的大小,在使用像Cassandra这样的bloom过滤器的数据存储中,令我困惑的是节点中的数据将被添加和删除,对吗?但是当您删除密钥时,您无法将其bloom过滤器桶设置为0,因为这可能会对节点中的数据产生错误否定,该数据散列到与移除的密钥相关联的一个或多个相同的存储桶。所以随着时间的推移,就好像过滤器填满了

2 个答案:

答案 0 :(得分:4)

我认为您需要设置布隆过滤器所覆盖的集合大小的上限。如果集超过该大小,则需要重新计算布隆过滤器。

在cassandra中使用时,在创建过滤器之前,已知布隆过滤器所覆盖的集合的大小,因此这不是问题。

另一个方法是Scalable Bloom Filters

答案 1 :(得分:2)

你应该意识到的第一件事是布隆过滤器只是添加剂。有一些近似删除的方法:

  • 重写布隆过滤器
    • 您必须保留旧数据
    • 您支付绩效价格
  • 负布隆过滤器
    • 比上述便宜得多,如果你能发现它们,也有助于处理误报。
  • 计算布隆过滤器(递减计数)
  • 吊桶
    • 保留多个分类布隆过滤器,在不再需要时丢弃类别(例如“星期二”,“星期三”,“星期四”......)
  • 其他?

如果您有时间限制的数据,使用存储桶可能会有效,并丢弃太旧的过滤器。