【问题标题】:How do bloom filter implementations keep clean?布隆过滤器实现如何保持清洁?
【发布时间】:2011-08-13 06:35:52
【问题描述】:

由于它们被填满并且误报率增加,有哪些技术可以防止它们饱和?似乎您无法清空位,因为这会立即对该节点中存储的数据产生负面影响。

即使您有一组已知大小,在使用 Cassandra 之类的布隆过滤器的数据存储中,让我感到困惑的是节点中的数据将被添加和删除,对吧?但是,当您删除一个键时,您不能将其布隆过滤器存储桶设置为 0,因为这可能会对节点中的数据产生误报,这些数据散列到一个或多个与删除的键相同的存储桶。所以随着时间的推移,就好像过滤器填满了

【问题讨论】:

    标签: algorithm bloom-filter


    【解决方案1】:

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

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

    另一种方法是Scalable Bloom Filters

    【讨论】:

    • 让我感到困惑的是,节点中的数据将被添加和删除,对吧?但是,当您删除一个键时,您不能将其布隆过滤器存储桶设置为 0,因为这可能会对节点中的数据产生误报,这些数据散列到一个或多个与删除的键相同的存储桶。所以随着时间的推移,过滤器就好像填满了对吧?
    • bloom 过滤器是每个 sstable,一旦创建了 sstable,它就永远不会改变。其他 sstable 会在新数据进来时添加,删除是通过墓碑处理的,墓碑是存储在 sstable 中的写入
    【解决方案2】:

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

    • 重写布隆过滤器
      • 您必须保留旧数据
      • 你付出了性能的代价
    • 负布隆过滤器
      • 比上述便宜得多,如果可以检测到误报,也有助于处理误报。
    • 计算布隆过滤器(减少计数)
    • 水桶
      • 保留多个分类的布隆过滤器,在不再需要时丢弃某个类别(例如“星期二”、“星期三”、“星期四”...)
    • 其他?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      相关资源
      最近更新 更多