Guava BloomFilter 实现
Guava BloomFilter 改进点
- 重写了 bitset,可以参见 LockFreeBitArray类的实现 ,突破了int.maxsize 大约21亿的限制
- 采用MurmurHash3 非加密型哈希函数,对大块的数据,具有较高的平衡性与低碰撞率。en.wikipedia.org、100w字符串hash,1s+
- 论文Less Hashing, Same Performance!Building a Better Bloom Filter,提到只需要两个;论文用google翻译了一部分,见
- 32位散列函数这个技巧并不会显着降低Bloom过滤器的性能;guava 具体做法见
BloomFilterStrategies
类的MURMUR128_MITZ_32
和MURMUR128_MITZ_64
两种策略的实现 - 添加元素过程中,并非执行了 optimalNumOfHashFunctions 次hash 操作,改为一次MurmurHash3,和optimalNumOfHashFunctions次基础运算,大大减少了计算次数,提高了性能
- BloomFilter 一直被标记为@Beta,但已经在google很多产品中得到运用