hutool创建布隆过滤器的api不够友好,需要设置自行设置bitmap内存大小,里面使用的hash函数默认是5个,对不熟悉该算法的开发人员来说很难配置的。
1、误判率测试
一百万随机手机号测试
|
set集合 |
guava布隆过滤器(expectedInsertions = 100_0000,fpp = 0.00001) |
guava布隆过滤器(expectedInsertions = 100_0000,fpp = 0.000001) |
guava布隆过滤器(expectedInsertions = 100_0000,fpp = 0.0000001) |
hutool布隆过滤器(bitmap大小:10M) |
hutool布隆过滤器(bitmap大小:30M) |
hutool布隆过滤器(bitmap大小:50M) |
| 内存消耗 |
104M |
3M |
3.5M |
4M |
10M |
30M |
50M |
| 误判数 |
0 |
2 |
0 |
0 |
80 |
1 |
0 |
| 误判率 |
0 |
0.000002 |
0 |
0 |
0.00008 |
0.000001 |
0 |
一千万随机手机号测试
|
set集合 |
guava布隆过滤器(expectedInsertions = 1000_0000,fpp = 0.00001) |
guava布隆过滤器(expectedInsertions = 1000_0000,fpp = 0.000001) |
guava布隆过滤器(expectedInsertions = 1000_0000,fpp = 0.0000001) |
hutool布隆过滤器(bitmap大小:10M) |
hutool布隆过滤器(bitmap大小:30M) |
hutool布隆过滤器(bitmap大小:50M) |
hutool布隆过滤器(bitmap大小:100M) |
| 内存消耗 |
996M |
30M |
35M |
40M |
10M |
30M |
50M |
100M |
| 误判数 |
0 |
5 |
0 |
0 |
400290 |
24973 |
3672 |
447 |
| 误判率 |
0 |
0.000002 |
0 |
0 |
0.0400290 |
0.0024973 |
0.0003672 |
0.0000447 |
2、性能测试
读取随机的手机号文件,然后插入测试
|
读取文件内容 |
set集合 |
guava布隆过滤器(expectedInsertions = 100_0000,fpp = 0.00001) |
guava布隆过滤器(expectedInsertions = 100_0000,fpp = 0.000001) |
guava布隆过滤器(expectedInsertions = 500_0000,fpp = 0.00001) |
guava布隆过滤器(expectedInsertions = 500_0000,fpp = 0.000001) |
guava布隆过滤器(expectedInsertions = 1000_0000,fpp = 0.00001) |
guava布隆过滤器(expectedInsertions = 1000_0000,fpp = 0.000001) |
hutool布隆过滤器(bitmap大小:10M) |
hutool布隆过滤器(bitmap大小:30M) |
hutool布隆过滤器(bitmap大小:50M) |
hutool布隆过滤器(bitmap大小:100M) |
| 100W数据 |
105ms |
350ms |
994ms |
1086ms |
1343ns |
1500ms |
1405ms |
1586ms |
502ms |
596ms |
618ms |
649ms |
| 500W数据 |
306ms |
1921ms |
2795ms |
3559ms |
5481ms |
6569ms |
6201ms |
6973ms |
2159ms |
2662ms |
2880ms |
3047ms |
| 10000W数据 |
487ms |
6848ms |
4753ms |
5832ms |
9776ms |
11580ms |
11497ms |
13398ms |
3808ms |
5273ms |
5572ms |
6055ms |
3、测试总结
1、使用方面
- guava的布隆过滤器api比较友好,只需要传入预估数据量、误判率,这些都是开发人员很容易评估的。
- hutool的布隆过滤器api默认构建方法比较难衡量怎么用,虽然可以优化,但算法不熟的话,很难下手。
2、内存、误判率方面
- guava的布隆过滤器在预估数据量准确的情况下,误判率可以很低,且内存占用相对较小。
- hutool的布隆过滤器(默认构造出来的实例、随着设置的bitmap大小越大,误判率就越低,但相对guava的来说,内存、误判率方面guava表现更佳。
3、速度、性能方面
- guava的布隆过滤器插入数据耗时相对hutool的耗时较多,可能是hutool默认5个hash函数的原因,而guava的hash函数个数是会根据数量和误判率来变化的。
4、最终总结