对复合对象使用Bloom过滤器

时间:2018-12-19 14:21:56

标签: bloom-filter

据我了解,Bloom过滤器允许以100%保证来判断元素是否不存在于集合中。但它可能以1%的概率告诉您该元素存在而实际上却不存在。

但是它可以用于复杂的对象和键-不仅仅是单个密码,ID或名称吗?例如,假设我有数百万个具有独特特征(id,名称,其他字段)的对象-我可以使用Bloom Filter来同时检查具有所有这些特征的对象是否不存在吗?

1 个答案:

答案 0 :(得分:1)

当然可以。您有多种选择:

  • 将所有这些字段(id,name和其他字段)组合为一个组合键。然后根据该组合键计算哈希函数。
  • 为每个字段维护单独的Bloom过滤器(一个Bloom过滤器用于id,另一个Bloom过滤器用于名称,一个Bloom过滤器用于其他字段)。查询时,您分别查询每个Bloom过滤器。仅当每个Bloom筛选器返回yes时,该对象才有可能在集合中。如果一个或多个Bloom过滤器返回“否”,则该对象肯定不是不在集合中。即使您只有关于该对象的部分信息,这也可以让您查询。
  • 或两者的组合,例如,一个ID的Bloom过滤器,一个名称和其他字段的组合的过滤器。

当然,拥有多个Bloom过滤器会占用更多内存。