番石榴布隆过滤器不支持大插入?

时间:2012-02-02 00:57:37

标签: guava bloom-filter

我在guava v.11.0.1中使用BloomFilter,当我的插入很大时,我似乎得到了异常。我用0.001 fpp尝试了1000万,但它失败了。

java.lang.IllegalArgumentException: Number of bits must be positive
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:88)
    at com.google.common.hash.BloomFilterStrategies.checkPositiveAndMakeMultipleOf64(BloomFilterStrategies.java:72)
    at com.google.common.hash.BloomFilterStrategies.access$000(BloomFilterStrategies.java:18)
    at com.google.common.hash.BloomFilterStrategies$From128ToN.withBits(BloomFilterStrategies.java:37)
    at com.google.common.hash.BloomFilter.create(BloomFilter.java:192)
    at com.ipg.collection.BloomFilterWritable.impl(BloomFilterWritable.java:43)
    at com.ipg.collection.BloomFilterWritable.put(BloomFilterWritable.java:62)
    at com.ipg.prophet.twitter.twitflow.archive.UnzipTweetsProcessAndUpload$ProcessorConsumer.process(UnzipTweetsProcessAndUpload.java:107)
    at com.ipg.prophet.twitter.twitflow.archive.UnzipTweetsProcessAndUpload$ProcessorConsumer.run(UnzipTweetsProcessAndUpload.java:84)
    at java.lang.Thread.run(Thread.java:662)

我认为至少它应该支持那么多具有如此高fpp的插入,不应该吗?

2 个答案:

答案 0 :(得分:9)

对此抱歉,我是罪魁祸首:)

希望我们能尽快推出下一个版本。不是时候提到这个,但是这次事故还有一个好处:这意味着我们绝对可以杀死当前的BF形式及其相关的支持代码(这本身就是一个意外),我正试图修复{{ 3}} - 顺便说一下,修复它也解决了这个问题。

修改:更多信息for a month now(以及路易斯提交的问题)

答案 1 :(得分:5)

这可能应该在Guava上提交,而不是在StackOverflow上。 (顺便提一下,我确认了一下;我大部分都知道发生了什么。)

更新:我已经提交了issue并开始修补。