[发明专利]基于布谷哈希和布隆过滤器的Hash建表方法有效
| 申请号: | 201810422766.7 | 申请日: | 2018-05-05 |
| 公开(公告)号: | CN108647289B | 公开(公告)日: | 2022-01-21 |
| 发明(设计)人: | 于洪;魏帅;黄雅静;杨镇西;沈剑良;宋克;吕平;刘勤让;张帆;陈博 | 申请(专利权)人: | 中国人民解放军战略支援部队信息工程大学;天津市滨海新区信息技术创新中心 |
| 主分类号: | G06F16/22 | 分类号: | G06F16/22 |
| 代理公司: | 郑州大通专利商标代理有限公司 41111 | 代理人: | 陈勇 |
| 地址: | 450000 河*** | 国省代码: | 河南;41 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 基于 布谷 过滤器 hash 方法 | ||
1.基于布谷哈希和布隆过滤器的Hash建表方法,其特征在于,所述方法将硬件存储空间划分为m个组,每组包含一个存储表和n个过滤表,即共有m个存储表,对应为ST(1)、ST(2)…存储表ST(m);共有m*n个过滤表,对应为FT(11)、FT(12)…FT(1n),FT(21)、FT(22)…FT(2n),…,FT(m1)、FT(m2)…FT(mn);所述存储表的长度为2k,宽度为k比特;所述过滤表的长度为2k,宽度为1比特;每个过滤表对应一个Hash函数,共有m*n个不同的Hash函数,分别为hash(11)、hash(12)…hash(1n),hash(21)、hash(22)…hash(2n),…,hash(m1)、hash(m2)…hash(mn);所述Hash函数用于把输入的数据转换为k比特的定长数据,不同的Hash函数输出数据的长度相同、数值不同;另外选取m*n个不同的Hash函数备用;定义一个max_insert值,如果对某次输入数据的操作次数超过所述max_insert值,则表示填表失败;包括以下步骤:
步骤1:初始化所有表项为0;
步骤2:对于每一个输入Hash_Input,使用第一组Hash函数计算其在存储表1中的插入位置ST(1)[addr(1i)],i∈[1,n],插入存储表1中,如果没有踢出数据,就对下一个输入执行步骤2,如果踢出了数据,执行步骤3;
所述步骤2包括:
步骤2.1:对Hash_Input采用hash(11) 进行计算,获得hash(11)对应位置地址addr(11),读取FT(11)对应位置地址FT(11)[addr(11)],判断FT(11)[addr(11)]是否为0,如果为0,则将FT(11)[addr(11)]置1,将Hash_Input填入ST(1)[addr(11)]中,填充完成,处理新的输入,否则执行步骤2.2;
步骤2.2:对Hash_Input采用hash(12) 进行计算,获得hash(12)对应位置地址addr(12),读取FT(11)及FT(12)对应位置地址FT(11)[addr(12)]及FT(12)[addr(12)],判断FT(11)[addr(12)]及FT(12)[addr(12)]是否为0,如果都为0,则将FT(12)[addr(12)]置1,将Hash_Input填入ST(1)[addr(12)]中,填充完成,处理新的输入,否则执行步骤2.3;
步骤2.3:依次类推,填充完成,处理新的输入,否则执行步骤2.4;
步骤2.4:对Hash_Input采用hash(1n) 进行计算,获得hash(1n)对应位置地址addr(1n),读取FT(11)至FT(1n)对应位置,判断FT(11)[addr(1n)]、FT(12)[addr(1n)]至FT(1n)[addr(1n)]是否为0,如果都为0,则将FT(1n)[addr(1n)]置1,将Hash_Input填入ST(1)[addr(1n)]中,填充完成,处理新的输入,否则,依然将Hash_Input填入ST(1)[addr(1n)]中,执行步骤3;
步骤3:将踢出数据变为新的Hash_Input,使用第二组Hash函数计算出其在存储表2中的插入位置ST(2)[addr(2i)],i∈[1,n],插入存储表2中,如果没有踢出数据,就对下一个输入执行步骤2,如果踢出了数据,执行步骤4;
所述步骤3包括:
步骤3.1:将原存于ST(1)[addr(1n)]中的数据作为新的Hash_Input,对Hash_Input采用hash(21) 进行计算,获得地址addr(21),读取FT(21)对应位置,判断FT(21)[addr(21)]是否为0,如果为0,则将FT(21)[addr(21)]置1,将Hash_Input填入ST(2)[addr(21)]中,填充完成,处理新的输入,否则执行步骤3.2;
步骤3.2:对Hash_Input采用hash(22) 进行计算,获得hash(22)对应位置地址addr(22),读取FT(21)及FT(22)对应位置,判断FT(21)[addr(22)]以及FT(22)[addr(22)]是否为0,如果都为0,则将FT(22)[addr(22)]置1,将Hash_Input填入ST(2)[addr(22)]中,填充完成,处理新的输入,否则执行步骤3.3;
步骤3.3:依次类推,填充完成,处理新的输入,否则执行步骤3.4;
步骤3.4:对Hash_Input采用hash(2n) 进行计算,获得hash(2n)对应位置地址addr(2n),读取FT(21)至FT(2n)对应位置,判断FT(21)[addr(2n)]、FT(22)[addr(2n)]至FT(2n)[addr(2n)]是否为0,如果都为0,则将FT(2n)[addr(2n)]置1,将Hash_Input填入ST(2)[addr(2n)]中,填充完成,处理新的输入,否则,依然将Hash_Input填入ST(2)[addr(2n)]中,执行步骤4;
步骤4:将原存于ST(2)[addr(2n)]中的数据变为新的Hash_Input,并依此法继续处理,若至ST(m)依然没有填充成功,将Hash_Input填入ST(m)[addr(mn)]中,将原存于ST(m)[addr(mn)]中的数据作为新的Hash_Input,执行步骤2;
步骤5:如果步骤2-步骤4重复的次数超过max_insert,则表示无法填充表项,使用备用的Hash函数替换现有Hash函数,执行步骤1;如果已经替换过Hash函数,则建表失败。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军战略支援部队信息工程大学;天津市滨海新区信息技术创新中心,未经中国人民解放军战略支援部队信息工程大学;天津市滨海新区信息技术创新中心许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810422766.7/1.html,转载请声明来源钻瓜专利网。





