随着您的数据集变大,您需要更多的哈希算法来保持1%的低误报率。
如果我希望我的bloom过滤器在运行时动态增长,那么我将需要多少哈希算法。如果我使用相同的(比如MD5)哈希,但随机生成的盐,在哈希值之前附加到值上,这会产生与使用不同的哈希(比如MD5,SHA1等)相同的效果吗?
我使用.NET C#作为参考,但该语言几乎与此问题无关。
答案 0 :(得分:2)
MD5是一种为Bloom过滤器生成哈希的非常昂贵的方法。您可能希望使用执行速度更快的内容,例如Jenkins hash或其中一个变体,或something along these lines。
正如您所指出的,Bloom过滤器需要大量的哈希函数。提出17个独特的哈希函数是最困难的。幸运的是,有一种方法可以避免这样做。我使用了论文Less Hashing, Same Performance: Building a Better Bloom Filter中描述的技术。事实证明这在C#中非常容易,而且性能非常好。
论文中的数学可能有点难以理解,但你可以很容易地得到它的要点。本文描述了几种不同的方法,可以简单快速地生成多个哈希码值。
此外,Bloom过滤器通常不易动态调整大小。如果您希望Bloom过滤器增长,则需要专门构建支持它的可扩展Bloom过滤器。对[可扩展布隆过滤器]的Google搜索将提供大量参考和一些代码示例。