使用Guava库创建Bloom过滤器时,需要提供一个漏斗和一个预期的插入次数(以及所需的误报率)。有没有办法设置Bloom过滤器应该使用的哈希函数?如果无法设置哈希函数,默认情况下会使用什么?
布鲁姆过滤器是com.google.common.hash的一部分,它提供了各种不同的哈希函数。不幸的是https://github.com/google/guava/wiki/HashingExplained无法回答我的问题,但是显示了可用的哈希函数并给出了一些解释。
答案 0 :(得分:1)
默认哈希函数是128-bit murmur3 hash function (x64 variant)(请参见BloomFilterStrategies enum)。
您不能使用公共API指定哈希函数。但是,使用一些技巧就可以做到-您需要:
在release build!
包中放置一个自定义类,以调用BloomFilter。com.google.common.hash
创建create(
Funnel<? super T> funnel, long expectedInsertions, double fpp, Strategy strategy)
的自定义实现(最简单的方法是从BloomFilter.Strategy
复制一个实现,并将hash函数转换为字段)。
但是,请确保您确实需要自定义功能。 Murmur3确实非常快(尽管不安全),并且其他所有哈希函数都可能会慢得多,所以也许您希望的唯一好处就是减少冲突。