由于它们填满并且误报的百分比增加,有哪些技术可以防止它们饱和?看起来你不能清空比特,因为这会对存储在该节点中的数据立即产生负面影响。
即使你有一组已知的大小,在使用像Cassandra这样的bloom过滤器的数据存储中,令我困惑的是节点中的数据将被添加和删除,对吗?但是当您删除密钥时,您无法将其bloom过滤器桶设置为0,因为这可能会对节点中的数据产生错误否定,该数据散列到与移除的密钥相关联的一个或多个相同的存储桶。所以随着时间的推移,就好像过滤器填满了
答案 0 :(得分:4)
我认为您需要设置布隆过滤器所覆盖的集合大小的上限。如果集超过该大小,则需要重新计算布隆过滤器。
在cassandra中使用时,在创建过滤器之前,已知布隆过滤器所覆盖的集合的大小,因此这不是问题。
另一个方法是Scalable Bloom Filters
答案 1 :(得分:2)
你应该意识到的第一件事是布隆过滤器只是添加剂。有一些近似删除的方法:
如果您有时间限制的数据,使用存储桶可能会有效,并丢弃太旧的过滤器。