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、使用方面

2、内存、误判率方面

3、速度、性能方面

4、最终总结