性能和误判率
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)最终总结
使用guava更方便,并且在内存节省、误判率上有很好的表现,虽然性能耗时上会多一些,但这点时间对于一个耗时任务来说影响不大,
Loading...