选择 Guava Bloom 过滤器使用的哈希函数
Choosing hash functions used by Guava Bloom filters
在使用 Guava 库创建布隆过滤器时,您需要提供漏斗和预期的插入次数(以及可选的所需误报率)。有没有办法设置布隆过滤器应该使用哪些哈希函数?如果没有办法设置哈希函数默认使用什么?
布隆过滤器是 com.google.common.hash 的一部分,它提供了多种不同的哈希函数。不幸的是 https://github.com/google/guava/wiki/HashingExplained 无法回答我的问题,但显示了可用的哈希函数并给出了一些解释。
默认哈希函数是 128-bit murmur3 hash function (x64 variant) (see BloomFilterStrategies enum).
您不能使用 public API 指定哈希函数。但是,您可以使用一些技巧来做到这一点 - 您需要:
在 com.google.common.hash
包中放置自定义 class 以调用 BloomFilter。create(
Funnel<? super T> funnel, long expectedInsertions, double fpp, Strategy strategy)
创建 BloomFilter.Strategy
的自定义实现(最简单的方法是从 BloomFilterStrategies
复制其中一个实现,并将哈希函数转换为字段)。
但是,请确保您确实需要自定义函数。 Murmur3 确实很快(尽管不安全),而其他所有哈希函数很可能会慢得多,因此您可能希望的唯一好处可能是更少的冲突。
在使用 Guava 库创建布隆过滤器时,您需要提供漏斗和预期的插入次数(以及可选的所需误报率)。有没有办法设置布隆过滤器应该使用哪些哈希函数?如果没有办法设置哈希函数默认使用什么?
布隆过滤器是 com.google.common.hash 的一部分,它提供了多种不同的哈希函数。不幸的是 https://github.com/google/guava/wiki/HashingExplained 无法回答我的问题,但显示了可用的哈希函数并给出了一些解释。
默认哈希函数是 128-bit murmur3 hash function (x64 variant) (see BloomFilterStrategies enum).
您不能使用 public API 指定哈希函数。但是,您可以使用一些技巧来做到这一点 - 您需要:
在
com.google.common.hash
包中放置自定义 class 以调用 BloomFilter。create( Funnel<? super T> funnel, long expectedInsertions, double fpp, Strategy strategy)
创建
BloomFilter.Strategy
的自定义实现(最简单的方法是从BloomFilterStrategies
复制其中一个实现,并将哈希函数转换为字段)。
但是,请确保您确实需要自定义函数。 Murmur3 确实很快(尽管不安全),而其他所有哈希函数很可能会慢得多,因此您可能希望的唯一好处可能是更少的冲突。