首页 > 编程知识 正文

布隆过滤器特性反转,impala集成布隆过滤器

时间:2023-05-03 14:19:00 阅读:130422 作者:161

文章目录1、基本概念2、实例3、影响误判的几个要素4、guava实现的BloomFilter5、总结

1、基本概念

本质上是数据结构,是比较巧妙的概率型数据结构,本身是长的二进制向量,无论是0还是1都存储着。 特点是高校的插入和查询,可以传达“某事物不存在或可能存在”。 主要用于判断某个要素是否存在于某个集合中; 与传统的List、Set、Map等数据结构相比,他具有效率更高、占用空间少,但返回的结果不一定完全正确,具有一定的误判率的缺点。

2、例布隆过滤器为bit向量或bit数组,较长。

要将值映射到光晕过滤器类型,必须使用多个散列函数生成多个散列值,对数组长度建模以获取数组后缀,并将下标更改后的值设置为1。 例如,对于百度,三个散列函数分别生成1、4和7。

存储另一个值“tencent”,用散列函数计算到下标为3、4、8时:

下标为4的这个位置都被两个值占用了。 如果检查另一个值,例如“didi”,则返回1、6和7。 结果,在6这个位置上有0表示该值不存在。 在检查是否存在baidu的值时,三个位置都是1,baidu是否一定存在? 不,百度这个值可能存在。 因为随着增加值的增加,设置为1的位置增加,有一定概率的误定性。 (根据值计算的散列值可能相同,如果散列值不同,则原始值一定不同。)

3、影响误判的几个要素混列函数的个数k、光晕滤波器的长度m、插入的元素的个数n、p是误报率

4、guava实现的bloom过滤器/* * thebitsetofthebloomfilter (notnecessarilypowerof 2! * /专用文件二进制位; //低位bit数组/* * numberofhashesperelement */privatefinalintnumhashfunctions; //hash函数的个数/* * thefunneltotranslatetstobytes */privatefinalfunneltfunnel; //输入过滤器的其他类型的对象以字节/* * * thestrategyweemploytomapanelementto { @ codenumhashfunctions } bit indexes.*/privateed 将元素映射到位数组的策略bits是上述长度为m的位数组,用LockFreeBitArray类型封装。

numHashFunctions即散列函数的个数k。

funnel是funnel接口实现类的实例,用于将任何类型的t输入数据转换为Java基本类型的数据(字节、整型、字符等)。 这里将转换为字节。

strategy是BloomFilterStrategies枚举中的一种模糊过滤器哈希策略,即数据如何映射到位数组。

bloom过滤器提供了创建bloom过滤器实例的create静态方法。

publicstatictbloomfiltertcreate (funneltfunnel,int expectedInsertions /* n */,double fpp ) checknotnull ) ) funnel; check argument (expectedInsertions=0,' expectedInsertions ) %s ) must be=0',expected insertions ); 检查协议(FPP 0.0,' falsepositiveprobability(%s ) must be 0.0 ),fpp ); 检查协议(FPP 1.0,' falsepositiveprobability(%s ) must be 1.0 ),fpp ); if(expectedinsertions==0) { expectedInsertions=1; }/**todo(user ) : putawarninginthejavadocabouttinyfppvalues,* sincetheresultingsizeisproportionalto-log ) p,butthed e.g.optimalm (1000,0.00000000001 )=76680 * which is less than 10k b.who cares */longnumbits=optimalnumofbits (expech intnumhashfunctions=optimalnumofhashfunctions (expected insertions,numBits ); try { returnnewbloomfiltert (newbitarray (numb its )、numHashFunctions、funnel, bloomfilterstrategies.murmur 128 _ mitz } catch (illegalargumentexceptione ) thrownewillegalargumentexception )、' couldnonond funnel是插入数据的funnel,expectedInsertions是希望插入的元素总数n,fpp是假阳性率p,strategy是散列策略。

综上所述,比特数组的长度m和散列函数的个数k分别由optimalNumOfBits (方法和optimalNumOfHashFunctions )方法估计。

计算最佳值:位数组长度和散列函数数:

/**根据要插入的数据量和错误判定率,数组的全长* @ paramn * @ paramp * @ return */staticlongoptimalnumofbits (longn,double p ) if () p==0 } /** *根据要插入的数据量和全长,hash函数的个数* @ paramn * @ paramm * @ return */staticintoptimalnumofhashfunctions (longn,long m ) ) 5、总结1、模糊过滤器具有检索效率高、内存消耗量少的特点

2、缺点有一定的误判率,可以参考guava的实现确定序列长度m和hash函数k

3、本文只介绍了布隆过滤器的原理和guava的实现方式,其中哈希算法的策略,计算m和k的算法需要深入研究

参考资料

3359 www.Jian Shu.com/p/bef 2e C1 c361 f

33559 www.Jian Shu.com/p/2104 d 11e E0 a 2

3359 blog.csdn.net/ZC 1992 12 15/article/details/91047708

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。