2011-08-13 39 views
2

既然他们填满了,误报的百分比增加了,那么用什么技术来防止它们饱和呢?看起来你不能清空位,因为这会对该节点中存储的数据立即产生负面影响。bloom过滤器实现如何保持清洁?

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

回答

4

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

正如在cassandra中所使用的那样,bloom过滤器所覆盖的集合的大小在创建过滤器之前是已知的,所以这不是问题。

另一种形式给出是Scalable Bloom Filters

+0

虽然让我困惑的是,节点中的数据将被添加和删除,对吧?但是,当您删除密钥时,您无法将其布隆过滤器存储桶设置为0,因为这可能会为节点中的数据创建一个错误的否定结果,该数据会将一个或多个相同的存储区散列为已除去的密钥。那么随着时间的推移,就好像过滤器填满了吗? – ambertch

+0

bloom过滤器是可用的,一旦创建了sstable,它永远不会改变。其他sstables随着新数据的添加而添加,删除操作通过墓碑来处理,其中存储在sstable中的写入 – sbridges

2

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

  • 重写布隆过滤器
    • 你必须保持旧的数据
    • 您交纳履约价格
  • 负布隆过滤器
    • 比上述更便宜,如果可以检测到它们,也有助于处理误报。
  • 计数布隆过滤器(递减计数)
    • 保持多个分类布隆过滤器,丢弃的类别时,它不再需要(如“星期二”,“星期三”,“星期四” ,...)
  • 其他?

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