【问题标题】:Why actual false positives are much less than desired false positive probability in Guava's BloomFilter?为什么在 Guava Bloom Filter 中实际误报率远低于预期的误报率?
【发布时间】:2019-09-19 10:47:20
【问题描述】:

我使用具有较小期望误报概率 (fpp) 的 Bloom Filter,得到的结果要少得多:

    BloomFilter<Long> bloomFilter = BloomFilter.create(Funnels.longFunnel(), 1_000_000, .001);
    int c = 0;
    for (int i = 0; i < 1_000_000; i ++) {
        // can replace with random.nextLong() because 1M random.nextLong() can hardly make collision
        if (!bloomFilter.put(Long.valueOf(i))) {
            // There is no duplicated elements so put returns false means false-positive
            c ++;
        }
    }
    System.out.println(c);

我预计会有 1000 (1M * 0.001) 个误报,但结果是 127(如果我使用大随机数,结果也会接近 120,但不是 1000)。

=== 更新 ===

这是我的测试:

desired actual    a/d 
0.3     0.12      40%
0.1     0.03      30%
0.03    0.006     20%    (guava's default fpp)
0.01    0.0017    17%
0.003   0.0004    13%
0.001   0.00012   12%
0.0003  0.00003   10%
0.0001  0.000009   9%
0.00003 0.000002   7%
0.00001 0.0000005  5%

【问题讨论】:

    标签: guava bloom-filter false-positive


    【解决方案1】:

    如果过滤器中的条目较少,则误报概率较低。在您的测试中,您从一个空集开始计算概率,然后在添加条目时进行计算。这不是正确的方法。

    您需要先向 Bloom 过滤器添加 100 万个条目,然后然后计算误报概率,例如检查条目是否在您未添加的集合中。 p>

    for (int i = 0; i < 1_000_000; i ++) {
        bloomFilter.put(Long.valueOf(i));
    }
    for (int i = 0; i < 1_000_000; i ++) {
        // negative entries are not in the set
        if (!bloomFilter.mightContain(Long.valueOf(-(i + 1)))) {
            c++;
        }
    }
    

    【讨论】:

      【解决方案2】:

      BloomFilter 提供的唯一保证是,真正的误报概率最多是您设置的值。在某些情况下,Bloom Filter 数据结构的性质可能不得不“舍入”实际的 FPP。

      这可能只是BloomFilter 必须比您要求的更准确的情况,或者您很幸运。

      【讨论】:

      • 我测试了很多案例,在一些十亿行的分布式表中进行重复键检查。
      • @auntyellow 可能是“幸运”的是您为 FPP 选择的特定值。
      • @LouisWasserman 这不太可能。大数规则与您的建议相矛盾。托马斯·穆勒是对的。只有在所有项目都已插入时才应进行测试。
      猜你喜欢
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 2019-03-16
      相关资源
      最近更新 更多