性能和误判率

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...
目录
文章列表
王小扬博客
产品
Think
Git
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP