【问题标题】:Choosing hash functions used by Guava Bloom filters选择 Guava Bloom 过滤器使用的哈希函数
【发布时间】:2018-07-15 12:26:30
【问题描述】:

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

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

【问题讨论】:

    标签: java hash guava bloom-filter


    【解决方案1】:

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

    您无法使用公共 API 指定哈希函数。但是,您可以使用一些技巧来做到这一点 - 您需要:

    1. 在com.google.common.hash包中放置一个自定义类来调用BloomFilter.create( Funnel<? super T> funnel, long expectedInsertions, double fpp, Strategy strategy)

    2. 创建BloomFilter.Strategy 的自定义实现(最简单的方法是从BloomFilterStrategies 复制其中一个实现,并将哈希函数转换为字段)。

    但是,请确保您确实需要自定义函数。 Murmur3 非常快(虽然不安全),而且所有其他散列函数很可能会慢得多,因此您可能希望的唯一好处是更少的冲突。

    【讨论】:

      猜你喜欢
      • 2016-05-19
      • 1970-01-01
      • 2014-11-10
      • 2012-08-10
      • 2018-08-26
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      相关资源
      最近更新 更多