当使用番石榴库创建一个Bloom过滤器时,您需要给出一个漏斗和一个预期的插入数(还有一个可选的错误阳性率)。是否有一种方法来设置Bloom过滤器应该使用的散列函数?如果没有办法设置散列函数,默认情况下使用什么?
Bloom过滤器是com.google.common.hash的一部分,它提供了各种不同的哈希函数。不幸的是,https://github.com/google/guava/wiki/HashingExplained无法回答我的问题,但显示了可用的哈希函数,并给出了一些解释。
发布于 2018-07-15 14:10:46
默认的哈希函数是128位murmur3散列函数(x64变体) (参见BloomFilterStrategies enum)。
不能使用公共API指定哈希函数。然而,使用一个小小的黑客你就可以做到-你需要:
com.google.common.hash包中放置一个自定义类以调用BloomFilter.create( Funnel<? super T> funnel, long expectedInsertions, double fpp, Strategy strategy)BloomFilter.Strategy的自定义实现(最简单的方法是从BloomFilterStrategies复制其中一个实现,并将哈希函数转换为字段)。但是,请确保您确实需要一个自定义函数。Murmur3非常快(虽然不安全),而且其他的哈希函数都很可能要慢得多,所以您可能希望的唯一好处是减少冲突。
https://stackoverflow.com/questions/51348368
复制相似问题