在C中高效实现Bloom过滤器?

时间:2012-06-13 02:35:55

标签: c bloom-filter

之前已经问过这个问题,但当时没有答案,所以我决定再问一次。

我需要在C(而不是C ++)中高效实现Bloom过滤器。如果没有这样的东西,我不介意实施一个,如果给出一些好的参考,这样就不会占用太多的时间。

我想以比例(1:20k)使用此数据结构进行插入和测试,因此主要是测试密集型。要测试的数据是64位整数。

5 个答案:

答案 0 :(得分:17)

我这里有一个独立的普通C库,可能有用: https://github.com/jvirkki/libbloom

答案 1 :(得分:4)

不要做太多的自我推销,但是我为Geany editor/IDE编写了一个过滤掉重复文本行的插件,它使用了Bloom过滤器。

实现在C中,您可以找到它right here on GitHub。它是GPL v3,因此根据您的确切需求,您可能会或可能无法使用它。

关于我的实施的一些注意事项:

  • 它旨在过滤字符串,而不是抽象键类型。这意味着您将不得不修改密钥处理以满足您的需求。
  • 它支持非特征语义,如果你愿意,你实际上可以将它用于完全非概率的存在测试(参见BloomContains使用的bloom_filter_new()回调函数指针)。只需通过NULL即可获得“纯”过滤器。
  • Austin Appleby的字符串哈希函数为MurmurHash2。我评估了更新的MurmurHash3,但版本2更容易使用。
  • 为了适应Geany生态系统,此代码始终使用GLib种类型。

它没有经过严格的性能调整,但应该没问题。当然,我很感激您在测试后可能会得到任何反馈!

答案 2 :(得分:1)

Chromium在C ++中有一个

github link

答案 3 :(得分:0)

我知道这是一个老问题,但作为参考,这里有一些github搜索结果。

在github上搜索'bloomfilter'会产生大量的结果(对于C):

https://github.com/search?q=extension%3Ac+bloomfilter&type=Code&ref=searchresults

仅适用于 REFERENCE

答案 4 :(得分:0)

该项目中提供了几种Bloom过滤器实现和替代算法:https://github.com/FastFilter/fastfilter_cpp

包括常规Bloom过滤器,block Bloom过滤器,布谷鸟过滤器,Golomb编码集等。它是C ++,但是主要算法很容易移植到C。