CN108460030A - 一种基于改进的布隆过滤器的集合元素判断方法 - Google Patents
一种基于改进的布隆过滤器的集合元素判断方法 Download PDFInfo
- Publication number
- CN108460030A CN108460030A CN201710086782.9A CN201710086782A CN108460030A CN 108460030 A CN108460030 A CN 108460030A CN 201710086782 A CN201710086782 A CN 201710086782A CN 108460030 A CN108460030 A CN 108460030A
- Authority
- CN
- China
- Prior art keywords
- bloom filter
- address value
- bit
- length
- calculated
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于改进的布隆过滤器的集合元素判断方法。该方法在布隆过滤器中插入或查询元素x时,首先计算哈希函数h(x),然后求得一个中间结果G,进而利用中间结果G计算得到所需的k个地址值,如果是插入,将这k个地址值处的比特设为1;若是查询,则检查是否所有地址处的比特都为1,若是则表示元素在该集合中出现,否则表示没有出现过。本发明提供的布隆过滤器的改进方案,可以只计算一次哈希函数,之后再通过高速的位运算,得到所需的所有地址值,从而在较短的时间内完成对集合元素的判断。
Description
技术领域
本发明涉及网络路由、分布式存储、IP查找、云计算等领域,具体为一种基于改进的Bloom filter(布隆过滤器)的集合元素判断方法。
背景技术
Bloom filter(B.Bloom.Space/time tradeoffs in in hash coding withallowable errors.Communications of the ACM,13(7):422-426,1970.)因为其优秀的空间效率而被广泛应用在各个领域的集合关系查询中。它本质上是一个很长的比特串,利用多个互相独立的哈希函数将元素映射到比特串中不同的地址,并通过将这些地址处的比特置1来标示该元素在集合中出现过。作为空间高效性的代价,Bloom filter有一定的假阳性,也就是说可能会把不属于集合中的元素判断为属于集合,但是它没有假阴性。
标准Bloom filter有较大的哈希函数计算开销:为了达到较高的精度,Bloomfilter需要尽可能地减少冲突,也就是一个元素在比特串中的多个地址与另一个元素完全相同的情况,这就要求每个元素被映射的地址值有一定的数量,而且地址值之间具有较高的独立性。对于传统Bloom filter,每产生一个地址值,都需要计算一个与之前不同的哈希函数,以此来保证地址之间的独立性。这使得在每次元素的插入和查询中,Bloom filter需要计算很多次哈希函数,而且独立性较好的哈希函数往往较为复杂,这就会带来较大的系统开销。而无论是在网络路由,还是在分布式存储的数据查询中,速度都非常重要,所以有必要提出一种新的更快速的集合元素判断方法。
作为对标准Bloom filter的改良,出现了Less Hashing Bloom filter(KirschA,Mitzenmacher M.Less hashing,same performance:Building a better Bloom filter[M]//Algorithms–ESA 2006.Springer Berlin Heidelberg,2006:456-467.)。当进行元素插入或查询时,它只计算两个哈希函数h1(x)和h2(x),然后通过gi(x)=h1(x)+i*h2(x)来计算得到所需的多个地址值。只计算两个哈希函数使得Less Hashing Bloom filter在损失了一定精确度的基础上,速度有了一定提高,但是由于使用了较为费时的乘法,仍有改进的空间。
发明内容
为了克服现有的Bloom filter的不足,提升基于哈希算法的路由表查找算法的性能,本发明提供一种Bloom filter的改进方案:Single-Hash Bloom filter,可以只计算一次哈希函数,之后再通过高速的位运算,得到所需的所有地址值,从而在较短的时间内完成对集合元素的判断。
本发明采用的技术方案如下:
一种基于改进的布隆过滤器的元素插入方法,包括以下步骤:
1)设布隆过滤器的长度是m比特,其所要表示的集合中有n个元素,对于每个元素映射到k个地址值;
2)在布隆过滤器中插入元素x时,首先计算32位的哈希函数h(x),然后求得一个中间结果G,该中间结果G的计算方法为:首先令G=h(x),然后将h(x)算术右移1位,2位….直到32-b位,得到32-b个结果,其中b为长度m的二进制表示的比特数目;然后将G与得到的32-b个结果依次进行按位异或,并取最后b位;
3)利用得到的中间结果G计算得到所述k个地址值,并将得到的所述k个地址值处的比特设为1。
进一步地,在查询元素x时,首先采用步骤2)~3)计算k个地址值,然后检查是否所有k个地址处的比特都为1,若是,则表示元素x在该集合中出现,否则表示元素x在该集合中没有出现过。
进一步地,步骤3)通过下式计算得到所述k个地址值:
其中0≤i≤k。
进一步地,步骤3)在计算hi时加入一个随机的素数prime,即按下式计算所述k个地址值:
进一步地,将布隆过滤器均分为k个区间,每个区间长度为m/k,其长度用二进制表示的位数为b’,之后按照同样的方法计算G和每一个地址值,只是取其最后b’位而不是b位,且当hi>m/k时,令hi=hi-m/k;对元素x的插入和查询首先分别在第i个区间的第hi位并行进行,最后将得到的k个结果比较并取最小值。
一种基于改进的布隆过滤器的元素插入方法,采用64位的哈希函数,具体包括以下步骤:
1)设布隆过滤器的长度是m比特,其所要表示的集合中有n个元素,对于每个元素映射到k个地址值;
2)在布隆过滤器中插入元素x时,首先计算64位的哈希函数h(x),然后求得一个中间结果G,该中间结果G的计算方法为:首先令G=h(x),然后将h(x)算术右移1位,3位,5位….直到65-b位,其中b为长度m的二进制表示的比特数目;然后将G与得到的移位结果依次进行按位异或,并取最后b位;
3)利用得到的中间结果G计算得到所述k个地址值,并将得到的所述k个地址值处的比特设为1。
本发明的有益效果是:以适当的精确度损失为代价,将Bloom filter所需计算的哈希函数数目减少到1个,使得其速度有了很大提升。
附图说明
图1是在保持集合元素个数n和每个元素被映射的地址数目k不变的条件下,改变Bloom filter长度m得到的标准Bloom filter,Less Hashing Bloom filter和本发明的Single-Hash Bloom filter的假阳性频率对比图。
图2和图3分别是改变n和k,保持其余两项不变时的3种Bloom filter的假阳性频率对比图。
图4是3种Bloom filter的速度对比图。其中(a)图为m和n不变,改变k的速度对比图;(b)图为k和n不变,改变m的速度对比图;(c)图为m和k不变,改变n的速度对比图。
具体实施方式
下面通过具体实施例和附图,对本发明做进一步说明。
1.Single-Hash Bloom filter基本数据结构
假设所需的Bloom filter长度是m比特,所要表示的集合中有n个元素,对于每个元素,映射到k个地址值,所使用的是32位哈希函数h(x)。每当元素x插入和查询时,我们首先计算哈希函数h(x),并且得到长度m的二进制表示的比特数目b,然后我们求得一个中间结果G,具体方法为:首先令G=h(x),之后将其与h(x)算术右移1位,2位….直到32-b位的32-b个结果依次进行按位异或,然后取最后b位。之后对于第i个地址值,我们令
其中,表示异或操作,>>为右移运算符,&表示与操作。
换句话说,如果用ai表示h(x)算术右移i(0≤i≤32-b)位后的结果,那么第i个地址则是所有aj(j≠i,0≤j≤32-b)异或后取后b位。
如果hi大于m,也就是说2b-1<m<hi<2b,只需要让hi=hi-m。
得到所有地址值后剩下的操作和标准Bloom filter相同:如果是插入,将这k个地址值处的比特设为1;若是查询,则检查是否所有地址处的比特都为1,若是,则表示元素在该集合中出现,否则则没有出现过。
由于哈希函数之外的操作以位运算为主,而位运算在计算机中执行速度较快,所以Single-Hash Bloom filter速度上较标准Bloom filter和Less Hashing Bloom filter都有较大提升。
2.Single-Hash Bloom filter的一些改进
作为提高速度的代价,Single-Hash Bloom filter损失了一定的精确度,为了减少精确度损失,可以做出以下两种改进:
其一是在计算hi时加入一个随机的素数prime,也就是说每一个哈希地址按如下方式计算:
这样多计算一次加法,降低了一定的速度,但是提高了地址值之间的独立性,从而提高了准确率。
第二种是使用64位的哈希函数得到64位的哈希值h(x),在Bloom filter长度m不变的情况下,就有了更多可供操作的比特,这时我们计算中间结果G的方法可以变为:
首先令G=h(x),之后将其与h(x)算术右移1位,3位,5位….直到65-b位的移位结果依次进行按位异或,然后取最后b位。即移位的数目每次增加两个,同时上限增长32位。相应的此时第i个地址值变成:
在具体实施中,我们以将Single-Hash Bloom Filter应用于Web Cache为例,WebCache中,当代理服务器接到用户请求时,会先检查自己是否存储有相关的信息,如果有,直接提供给用户,而不需要将请求转发给Web服务器。如何高速地检查请求的信息是否存储在服务器上,是缩短响应时间,提升用户体验的关键。因此可以在代理服务器中存储一个Single-Hash Bloom Filter,当有Web服务器发送信息到代理服务器时,将信息保存在本地Cache中,同时使用哈希函数为数据产生数字指纹(footprint),然后将数字指纹插入Single-Hash Bloom Filter。当收到用户请求时,就可以通过查询Single-Hash BloomFilter,来快速判断是否存储有用户需要的信息。
为了提高并行性,进一步提升速度,我们还可以将布隆过滤器均分为k个区间,每个区间长度为m/k,其长度用二进制表示的位数为b’,之后按照同上的方法计算G和每一个地址值,只是取其最后b’位而不是b位,且当hi>m/k时,令hi=hi-m/k。对元素x的插入和查询首先分别在第i个区间的第hi位并行进行,最后将得到的k个结果比较并取最小值。
图1是在保持集合元素个数n,每个元素被映射的地址数目k不变的条件下,改变Bloom filter长度m得到的标准Bloom filter,Less Hashing Bloom filter和本发明的Single-Hash Bloom filter的假阳性频率对比图。图2和图3则分别是改变n和k,保持其余两项不变时的假阳性频率对比。从三幅图中可以看出,Single-Hash Bloom filter的假阳性概率比其他两种略高,但是仍较为接近。
图4是3种Bloom filter的速度对比图,从中可以看出本发明的Single-HashBloom filter的速度要远高于其余两种,约是标准Bloom filter的2.74到4.38倍,是LessHashing Bloom filter的1.64到1.82倍。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
Claims (10)
1.一种基于改进的布隆过滤器的元素插入方法,其特征在于,包括以下步骤:
1)设布隆过滤器的长度是m比特,其所要表示的集合中有n个元素,对于每个元素映射到k个地址值;
2)在布隆过滤器中插入元素x时,首先计算32位的哈希函数h(x),然后求得一个中间结果G,该中间结果G的计算方法为:首先令G=h(x),然后将h(x)算术右移1位,2位….直到32-b位,得到32-b个结果,其中b为长度m的二进制表示的比特数目;然后将G与得到的32-b个结果依次进行按位异或,并取最后b位;
3)利用得到的中间结果G计算得到所述k个地址值,并将得到的所述k个地址值处的比特设为1。
2.如权利要求1所述的方法,其特征在于,在查询元素x时,首先采用步骤2)~3)计算k个地址值,然后检查是否所有k个地址处的比特都为1,若是,则表示元素x在该集合中出现,否则表示元素x在该集合中没有出现过。
3.如权利要求1或2所述的方法,其特征在于,步骤3)通过下式计算得到所述k个地址值:
其中0≤i≤k。
4.如权利要求3所述的方法,其特征在于,步骤3)在计算hi时加入一个随机的素数prime,即按下式计算所述k个地址值:
5.如权利要求1或2所述的方法,其特征在于,将布隆过滤器均分为k个区间,每个区间长度为m/k,其长度用二进制表示的位数为b’,之后按照同样的方法计算G和每一个地址值,只是取其最后b’位而不是b位,且当hi>m/k时,令hi=hi-m/k;对元素x的插入和查询首先分别在第i个区间的第hi位并行进行,最后将得到的k个结果比较并取最小值。
6.一种基于改进的布隆过滤器的元素插入方法,其特征在于,包括以下步骤:
1)设布隆过滤器的长度是m比特,其所要表示的集合中有n个元素,对于每个元素映射到k个地址值;
2)在布隆过滤器中插入元素x时,首先计算64位的哈希函数h(x),然后求得一个中间结果G,该中间结果G的计算方法为:首先令G=h(x),然后将h(x)算术右移1位,3位,5位….直到65-b位,其中b为长度m的二进制表示的比特数目;然后将G与得到的移位结果依次进行按位异或,并取最后b位;
3)利用得到的中间结果G计算得到所述k个地址值,并将得到的所述k个地址值处的比特设为1。
7.如权利要求6所述的方法,其特征在于,在查询元素x时,首先采用步骤2)~3)计算k个地址值,然后检查是否所有k个地址处的比特都为1,若是,则表示元素x在该集合中出现,否则表示元素x在该集合中没有出现过。
8.如权利要求6或7所述的方法,其特征在于,步骤3)通过下式计算得到所述k个地址值:
其中0≤i≤k。
9.如权利要求8所述的方法,其特征在于,步骤3)在计算hi时加入一个随机的素数prime,即按下式计算所述k个地址值:
10.如权利要求6或7所述的方法,其特征在于,将布隆过滤器均分为k个区间,每个区间长度为m/k,其长度用二进制表示的位数为b’,之后按照同样的方法计算G和每一个地址值,只是取其最后b’位而不是b位,且当hi>m/k时,令hi=hi-m/k;对元素x的插入和查询首先分别在第i个区间的第hi位并行进行,最后将得到的k个结果比较并取最小值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710086782.9A CN108460030B (zh) | 2017-02-17 | 2017-02-17 | 一种基于改进的布隆过滤器的集合元素判断方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710086782.9A CN108460030B (zh) | 2017-02-17 | 2017-02-17 | 一种基于改进的布隆过滤器的集合元素判断方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108460030A true CN108460030A (zh) | 2018-08-28 |
CN108460030B CN108460030B (zh) | 2022-01-11 |
Family
ID=63221659
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710086782.9A Active CN108460030B (zh) | 2017-02-17 | 2017-02-17 | 一种基于改进的布隆过滤器的集合元素判断方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108460030B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111930924A (zh) * | 2020-07-02 | 2020-11-13 | 上海微亿智造科技有限公司 | 基于布隆过滤器的数据查重系统及方法 |
CN112162975A (zh) * | 2020-09-25 | 2021-01-01 | 华南理工大学 | 基于单哈希均分布隆过滤器的重复数据删除技术实现方法 |
CN112199378A (zh) * | 2020-12-01 | 2021-01-08 | 北京快成科技股份公司 | Ip地址匹配方法及装置 |
CN113315705A (zh) * | 2021-04-26 | 2021-08-27 | 中国科学院计算机网络信息中心 | 基于单次哈希布隆过滤器的Flexible IP寻址方法及装置 |
CN113328947A (zh) * | 2021-04-26 | 2021-08-31 | 中国科学院计算机网络信息中心 | 基于应用可控前缀扩展布隆过滤器的可变长路由查找方法及装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101082923A (zh) * | 2007-07-18 | 2007-12-05 | 湖南大学 | 一种可扩展的布鲁姆过滤器查询方法及其元素插入方法 |
US7865608B1 (en) * | 2005-01-21 | 2011-01-04 | Oracle America, Inc. | Method and apparatus for fast and scalable matching of structured data streams |
CN102968467A (zh) * | 2012-11-10 | 2013-03-13 | 华中科技大学 | 一种多层Bloom Filter的优化方法及查询方法 |
CN103970744A (zh) * | 2013-01-25 | 2014-08-06 | 华中科技大学 | 一种可扩展的重复数据检测方法 |
CN104102714A (zh) * | 2014-07-16 | 2014-10-15 | 上海交通大学 | 基于累加器和布隆过滤器的外包数据查询验证方法及系统 |
CN105320654A (zh) * | 2014-05-28 | 2016-02-10 | 中国科学院深圳先进技术研究院 | 动态布隆过滤器和基于动态布隆过滤器的元素操作方法 |
CN106101257A (zh) * | 2016-07-07 | 2016-11-09 | 广东工业大学 | 一种基于布隆过滤器的云存储数据管理方法及装置 |
-
2017
- 2017-02-17 CN CN201710086782.9A patent/CN108460030B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7865608B1 (en) * | 2005-01-21 | 2011-01-04 | Oracle America, Inc. | Method and apparatus for fast and scalable matching of structured data streams |
CN101082923A (zh) * | 2007-07-18 | 2007-12-05 | 湖南大学 | 一种可扩展的布鲁姆过滤器查询方法及其元素插入方法 |
CN102968467A (zh) * | 2012-11-10 | 2013-03-13 | 华中科技大学 | 一种多层Bloom Filter的优化方法及查询方法 |
CN103970744A (zh) * | 2013-01-25 | 2014-08-06 | 华中科技大学 | 一种可扩展的重复数据检测方法 |
CN105320654A (zh) * | 2014-05-28 | 2016-02-10 | 中国科学院深圳先进技术研究院 | 动态布隆过滤器和基于动态布隆过滤器的元素操作方法 |
CN104102714A (zh) * | 2014-07-16 | 2014-10-15 | 上海交通大学 | 基于累加器和布隆过滤器的外包数据查询验证方法及系统 |
CN106101257A (zh) * | 2016-07-07 | 2016-11-09 | 广东工业大学 | 一种基于布隆过滤器的云存储数据管理方法及装置 |
Non-Patent Citations (2)
Title |
---|
ADAM KIRSCH ETAL.: ""Less hashing, same performance: building a better bloom filter"", 《ACM:PROCEEDINGS OF THE 14TH CONFERENCE ON ANNUAL EUROPEAN SYMPOSIUM》 * |
王鹏超 等: ""基于布隆过滤器的精确匹配算法设计与实现"", 《计算机科学》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111930924A (zh) * | 2020-07-02 | 2020-11-13 | 上海微亿智造科技有限公司 | 基于布隆过滤器的数据查重系统及方法 |
CN112162975A (zh) * | 2020-09-25 | 2021-01-01 | 华南理工大学 | 基于单哈希均分布隆过滤器的重复数据删除技术实现方法 |
CN112199378A (zh) * | 2020-12-01 | 2021-01-08 | 北京快成科技股份公司 | Ip地址匹配方法及装置 |
CN113315705A (zh) * | 2021-04-26 | 2021-08-27 | 中国科学院计算机网络信息中心 | 基于单次哈希布隆过滤器的Flexible IP寻址方法及装置 |
CN113328947A (zh) * | 2021-04-26 | 2021-08-31 | 中国科学院计算机网络信息中心 | 基于应用可控前缀扩展布隆过滤器的可变长路由查找方法及装置 |
CN113315705B (zh) * | 2021-04-26 | 2022-07-15 | 中国科学院计算机网络信息中心 | 基于单次哈希布隆过滤器的Flexible IP寻址方法及装置 |
CN113328947B (zh) * | 2021-04-26 | 2022-08-23 | 中国科学院计算机网络信息中心 | 基于应用可控前缀扩展布隆过滤器的可变长路由查找方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108460030B (zh) | 2022-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108460030A (zh) | 一种基于改进的布隆过滤器的集合元素判断方法 | |
CN106096023B (zh) | 数据读取方法、数据写入方法及数据服务器 | |
CN108769111A (zh) | 一种服务器连接方法、计算机可读存储介质及终端设备 | |
WO2018099107A1 (zh) | 一种哈希表管理的方法和装置、计算机存储介质 | |
CN103810244B (zh) | 一种基于数据分布的分布式数据存储系统的扩容方法 | |
JP6716727B2 (ja) | ストリーミングデータ分散処理方法及び装置 | |
CN109117275B (zh) | 基于数据分片的对账方法、装置、计算机设备及存储介质 | |
CN110599169B (zh) | 数据处理方法、装置、终端及介质 | |
US20090216723A1 (en) | Directory Partitioned System and Method | |
CN109410043B (zh) | 一种基于分层树状结构的区块链信息高效存储方法及装置 | |
EP3149621A1 (en) | Distance queries on massive networks | |
CN108334551A (zh) | 数据存储方法和系统、数据查询方法和系统 | |
CN114253979B (zh) | 一种报文处理方法、装置及电子设备 | |
CN104699946B (zh) | 一种游戏场景的管理方法及装置 | |
CN104933054B (zh) | 缓存资源文件的url存储方法及装置、缓存服务器 | |
CN109739433A (zh) | 数据处理的方法及终端设备 | |
Gou et al. | Single hash: Use one hash function to build faster hash based data structures | |
CN102378407B (zh) | 一种物联网中的对象名字解析系统及其解析方法 | |
CN109377383A (zh) | 产品数据同步方法、装置、计算机设备及存储介质 | |
CN105471893A (zh) | 一种分布式等值数据流连接方法 | |
CN117014318B (zh) | 多尺度网络节点间链路的添加方法、装置、设备及介质 | |
US11683316B2 (en) | Method and device for communication between microservices | |
CN105574076A (zh) | 一种基于Bloom Filter的键值对存储结构及方法 | |
CN111294285B (zh) | 一种网络数据的分发方法及负载均衡器 | |
CN105100072B (zh) | 一种网络节点监测方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |