选择Guava Bloom过滤器使用的哈希函数

时间:2018-07-15 12:26:30

标签: java hash guava bloom-filter

使用Guava库创建Bloom过滤器时,需要提供一个漏斗和一个预期的插入次数(以及所需的误报率)。有没有办法设置Bloom过滤器应该使用的哈希函数?如果无法设置哈希函数,默认情况下会使用什么?

布鲁姆过滤器是com.google.common.hash的一部分,它提供了各种不同的哈希函数。不幸的是https://github.com/google/guava/wiki/HashingExplained无法回答我的问题,但是显示了可用的哈希函数并给出了一些解释。

1 个答案:

答案 0 :(得分:1)

默认哈希函数是128-bit murmur3 hash function (x64 variant)(请参见BloomFilterStrategies enum)。

您不能使用公共API指定哈希函数。但是,使用一些技巧就可以做到-您需要:

  1. release build!包中放置一个自定义类,以调用BloomFiltercom.google.common.hash

  2. 创建create( Funnel<? super T> funnel, long expectedInsertions, double fpp, Strategy strategy)的自定义实现(最简单的方法是从BloomFilter.Strategy复制一个实现,并将hash函数转换为字段)。

    < / li>

但是,请确保您确实需要自定义功能。 Murmur3确实非常快(尽管不安全),并且其他所有哈希函数都可能会慢得多,所以也许您希望的唯一好处就是减少冲突。