CN101604337B - 一种哈希表项存储、查找装置及方法 - Google Patents
一种哈希表项存储、查找装置及方法 Download PDFInfo
- Publication number
- CN101604337B CN101604337B CN2009101581097A CN200910158109A CN101604337B CN 101604337 B CN101604337 B CN 101604337B CN 2009101581097 A CN2009101581097 A CN 2009101581097A CN 200910158109 A CN200910158109 A CN 200910158109A CN 101604337 B CN101604337 B CN 101604337B
- Authority
- CN
- China
- Prior art keywords
- hash
- sublist
- module
- list item
- current target
- 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.)
- Active
Links
Images
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种哈希表项存储、查找装置及方法,用以解决现有哈希表存储结构的查表需要时间长短跟表容量大小很难达到平衡的问题,本发明将大块的哈希表存储空间分拆成多个哈希子表存储空间,每个哈希子表对应N个哈希函数,在存储表项时,依次利用每张哈希子表对应的哈希函数计算哈希值,在该哈希子表中查找空位存入表项;在查找表项时,对所有哈希子表实行并行查找,以提高查找速度。本发明有效地解决了传统哈希表结构查表需要时间长短跟表空间大小很难达到平衡的问题,以极小的查找时间代价以及极高的表空间利用率实现全部表项存储而无表项遗留。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种哈希表项存储、查找装置及方法。
背景技术
在通信领域中,存在着多种的匹配算法,例如,对于精确匹配的查找,可以采用哈希算法。所述的哈希查找的过程就是用哈希函数对输入的查找键值(Key)进行缩位运算,再用计算得到的哈希值在哈希索引表中寻址,找到匹配项后读出对应项中存放的哈希索引(Hash Index),最后用哈希索引在直接地址映射表寻址,得到所需的查找结果。对于哈希查找的具体描述可以参考文献【1】“Christopher Martinez,Wei-Ming Lin,Parimal Patel著。Optimal XORhashing for a linearly distributed address lookup in computer networks。ANCS’05,203-210,2005”中的描述。
哈希算法是一种常见的快速查找算法。文献【2】“殷科,邓亚平,唐红著。基于哈希_tree的多维IP包分类算法。计算机工程与应用,2005.32”中描述了该算法的基本构成,它的基本思想是以线性表中每个元素的关键字k为自变量。通过一定的函数关系H(k),计算出对应的函数值来,并把这个值解释为一块连续存储空间的单元,将该元素存储到这个单元中。哈希算法将元素的存储位置和它的关键字之间建立一个确定的对应关系,查找时,不需要比较,一次哈希映射就可以查找所需元素。
在哈希函数中,对不同的关键字可能得到同一哈希地址,即key1≠key2,而H(key1)=H(key2),这种情况叫冲突(Collision)。一般来说,遇到冲突是很正常的事情,关键在于遇到冲突后怎么处理,以达到要求的查找目的。处理冲突,主要有以下两种方法:一是选择和改进比较好的哈希函数;二是选择比较合适的表项存储结构。
参考文献【3】“Yuan-Sun Chu,Po-Feng Lin,Jia-Huang Lin,Hui-Kai Su andMing-Jen Chen著。ASIC Design of Fast IP Lookup for Next Generation IPRouter。IEEE,2005”中给出了几种哈希函数的效率的比较,从其中可以看出,对于路由查找这类的应用,采用CRC(Cyclic Redundancy Checking,循环冗余码校验)类的哈希函数是比较适合的。关于CRC计算方法,可参考文献【4】“Philip Koopman,Tridib Chakravarty著。Cyclic Redundancy Code(CRC)Polynomial Selection For Embedded Networks。The International Conference onDependable Systems and Networks,DSN-2004”及【5】“Cyclic redundancy check。http://en.wikipedia.org/wiki/Cyclic_redundancy_check”中的描述。通过选取不同的CRC多项式,可以实现同一个位宽下的不同哈希函数。
在选择合适的表存储结构解决冲突问题方面,文献【6】“Hash Table。http://gpwiki.org/index.php/Hash_Table”中提供了一些方法,比如采用多维哈希表、冲突链、Double Hashing等。仿真实验结果表明,使用这些方法,在保证无表项遗留即所有表项都能存入的前提条件下,计算哈希值的次数跟需要的存储表空间存在对立的关系,也就是说如果想要以足够小的存储空间放下所有的表项,则需要进行足够多次数的哈希运算。这样就会造成对同一块表的多次访问,如果这里的哈希运算的次数是10,那么在查找时平均情况是需要查找5次才能找到需要的表项,而最坏情况是需要查找10次,由于表只有一张,所以查找只能顺序进行,这会严重影响查表的速度;另一方面,如果想要以足够少的计算次数就能找到存储空位,那么就要保证存储空间足够的大,空间利用率就会大大的降低,在这种方法下查找需要时间长短跟表容量大小很难达到平衡。
发明内容
本发明提供一种哈希表项存储、查找装置及方法,用以解决现有哈希表存储结构的查表需要时间长短跟表容量大小很难达到平衡的问题。
本发明所述技术方案如下:
一种哈希表项存储装置,包括主控逻辑模块、哈希表拆分模块、表项添加模块、若干个查找模块和与查找模块对应的若干个表项存储模块,其中,
主控逻辑模块,用于对哈希表项的存储过程进行控制;
哈希表拆分模块,用于在主控逻辑模块的控制下将所述哈希表拆分为若干张哈希子表,将拆分后得到的若干张哈希子表存入若干个表项存储模块中,每个表项存储模块存储一张或多张哈希子表,每张哈希子表对应N个哈希函数,N>=1;所述哈希表拆分模块还用于确定初始的目标哈希子表,以及在接收到表项添加模块发出的更新指令后,按照该更新指令的要求进行目标哈希子表的更新;
表项添加模块,用于依次利用当前的目标哈希子表对应的N个哈希函数计算待存储表项键值的哈希值,根据每次计算得到的哈希值在当前的目标哈希子表中查找空位,若查找到,则将所述待存储表项的信息存入该空位中,若根据计算得到的N个哈希值都没有找到空位,则判断当前的目标哈希子表是否为最后一张哈希子表,若不是,向哈希表拆分模块发送将当前的目标哈希子表更新为其下一张哈希子表的更新指令;
所述表项添加模块在判定当前的目标哈希子表为最后一张哈希子表时,继续判断当前的目标哈希子表的哈希函数更新次数是否大于预设门限,若是,向哈希表拆分模块发送将当前的目标哈希子表更新为其上一张哈希子表的更新指令,并再次执行判断当前的目标哈希子表的哈希函数更新次数是否大于预设门限的过程,若不是,将当前的目标哈希子表对应的N个哈希函数全部更新;
多个查找模块,用于接收表项添加模块发出的读写指令,根据指令中携带的表项存储模块的地址对相应表项存储模块中存储的哈希子表进行读写操作。
进一步地,所述装置还包括:
异常处理模块,用于响应主控逻辑模块的哈希表刷新请求,通过查找模块对表项存储模块进行清零和重新赋值操作。
进一步地,所述哈希子表对应的N个哈希函数为循环冗余码校验函数;所述若干张哈希子表对应的哈希函数之间采用不同的循环冗余码校验多项式。
一种哈希表项查找装置,用于存储所述哈希表项的哈希表由若干张哈希子表组成,每张哈希子表对应N个哈希函数,N>=1,所述哈希子表对应的哈希函数与存储表项时该哈希子表对应的哈希函数相同;所述装置包括主控逻辑模块、数据判决模块、若干个计算模块、若干个查找模块及与查找模块一一对应的若干个表项存储模块,其中,
主控逻辑模块,用于对哈希表项的查找过程进行控制;
多个计算模块,用于在主控逻辑模块的控制下利用每张哈希子表对应的第i个哈希函数并行计算需要查找的键值的哈希值;
多个查找模块,用于根据计算模块计算得到的哈希值在其各自对应的表项存储模块中并行地查找;
表项存储模块,用于存储哈希子表。
数据判决模块,用于将各个哈希子表的查表结果与需要查找的键值进行比较,判定是否存在匹配的表项,若存在,将该表项的信息作为最终查表结果,否则,判断当前的i值是否等于N,若是,向主控逻辑模块发送本次查找失败消息,否则,i=i+1。
一种哈希表存储方法,包括步骤:
A、将所述哈希表拆分为若干张哈希子表,每张哈希子表对应N个哈希函数,N>=1;
B、将第一张哈希子表作为当前的目标哈希子表;
C、依次利用当前的目标哈希子表对应的N个哈希函数计算待存储表项键值的哈希值,根据每次计算得到的哈希值在当前的目标哈希子表中查找空位,若查找到,则将所述待存储表项的信息存入该空位中,若根据计算得到的N个哈希值都没有找到空位,执行D;
D、判断当前的目标哈希子表是否为最后一张哈希子表,若是,执行步骤E,否则,将当前的目标哈希子表更新为其下一张哈希子表,返回步骤C;
E、判断当前的目标哈希子表的哈希函数更新次数是否大于预设门限,若是,将当前的目标哈希子表更新为其上一张哈希子表,重复执行本步骤,否则,将当前的目标哈希子表对应的N个哈希函数全部更新,返回步骤C。
进一步地,所述步骤C中,如果N>1,则取待存储表项的键值,利用当前的目标哈希子表对应的第1个哈希函数计算其哈希值,根据该哈希值在当前的目标哈希子表中查找空位,若查找到,则将所述待存储表项的信息存入该空位中,否则,换下一个哈希函数计算其哈希值,重复上述操作,如果直到第N个哈希函数都没有找到空位,则执行步骤D。
进一步地,所述步骤C中,在计算出待存储表项键值的哈希值后,根据当前的目标哈希子表的容量对该哈希值进行截取,以截取后的哈希值为索引在所述目标哈希子表中查找空位。
进一步地,所述哈希子表对应的哈希函数为循环冗余码校验函数;所述若干张哈希子表对应的哈希函数之间采用不同的循环冗余码校验多项式。
一种哈希表查找方法,所述哈希表由若干张哈希子表组成,每张哈希子表对应N个哈希函数,N>=1,所述哈希子表对应的哈希函数与存储表项时该哈希子表对应的哈希函数相同,所述方法包括步骤:
A、利用每张哈希子表对应的第i个哈希函数并行计算需要查找的键值的哈希值,i的初始值为1,根据计算得到的哈希值在其各自对应的哈希子表中并行查找;
B、将各个哈希子表的查表结果与需要查找的键值进行比较,判定是否存在匹配的表项,若存在,将该表项的信息作为最终查表结果,否则,执行下一步骤;
C、判断当前的i值是否等于N,若是,本次查找失败,流程结束,否则,将i值加1,返回步骤A。
进一步地,所述步骤A中,在计算出需要查找的键值的哈希值后,根据其各自对应的哈希子表的容量对该哈希值进行截取,以截取后的哈希值为索引在其各自对应的哈希子表中并行查找。
与现有技术相比,本发明具有如下有益效果:
本发明效地解决了传统哈希表结构查表需要时间长短跟表空间大小很难达到平衡的问题,以极小的查找时间代价以及极高的表空间利用率实现全部表项存储而无表项遗留,能够在表空间大小和查找效率方面获得比较好的均衡。
附图说明
图1为本发明所述哈希表项存储装置的一个较佳实施例的结构框图;
图2为本发明所述哈希表项查找装置的一个较佳实施例的结构框图;
图3为将本发明所述哈希表项存储装置及哈希表项查找装置结合后构成的装置的结构框图;
图4为本发明所述哈希表项存储方法的一个较佳实施例的流程图;
图5为本发明所述哈希表项查找方法的一个较佳实施例的流程图。
具体实施方式
本发明的主要技术构思是:将大块的哈希表存储空间分拆成多个哈希子表存储空间,每个哈希子表对应至少一个哈希函数,在存储表项时,依次利用每张哈希子表对应的哈希函数计算哈希值,在该哈希子表中查找空位存入表项;在查找表项时,对所有哈希子表实行并行查找,以提高查找速度。
下面结合各个附图对本发明的具体实现过程予以进一步详细的阐述。
实施例一
请参阅图1,该图为本发明所述哈希表项存储装置的一个较佳实施例的结构框图,该哈希表存储装置主要用于完成哈希表项的添加、删除或者刷新等操作。其主要包括主控逻辑模块、哈希表拆分模块、表项添加模块、统计模块、异常处理模块、若干个查找模块和与查找模块一一对应的若干个表项存储模块,其中,主控逻辑模块耦合至表项添加模块、哈希表拆分模块、统计模块和异常处理模块;所述表项添加模块、哈希表拆分模块、统计模块和异常处理模块均分别耦合至多个查找模块1~n,多个查找模块1~n分别耦合至多个表项存储模块1~n。其中各个模块的主要功能如下:
主控逻辑模块,是哈希表项存储装置的控制部件,用于对哈希表项的存储过程进行控制,主要实现算法启动,终止及任务调度等操作。其可以由硬件逻辑实现,如ASIC(专用集成电路)或者是FPGA(现场可编程逻辑门阵列)或者是其他可以实现逻辑函数功能的芯片。也可以通过运行在CPU(中央控制器)上的软件来实现,在这种实现方式下,表项添加模块、统计模块、哈希表拆分模块和异常处理模块均可以通过软件来实现。
哈希表拆分模块,用于在主控逻辑模块的控制下将所述哈希表拆分为若干张哈希子表,将其存入表项存储模块中,每张哈希子表对应N个哈希函数,N>=1,其中,若干张哈希子表的存储空间大小可以根据需要搭配选择。所述哈希表拆分模块还用于将第一张哈希子表设置为初始的目标哈希子表,在接收到表项存储模块发出的更新指令时,按照该更新指令的要求进行目标哈希子表的更新。
表项添加模块,用于依次利用当前的目标哈希子表对应的N个哈希函数计算待存储表项键值的哈希值,根据每次计算得到的哈希值在当前的目标哈希子表中查找空位,若查找到,则将所述待存储表项的信息存入该空位中,若根据计算得到的N个哈希值都没有找到空位,则判断当前的目标哈希子表是否为最后一张哈希子表,若不是,向哈希表拆分模块发送将当前的目标哈希子表更新为其下一张哈希子表的更新指令;
进一步地,所述表项添加模块在判定当前的目标哈希子表为最后一张哈希子表时,继续判断当前的目标哈希子表的哈希函数更新次数是否大于预设门限,若是,向哈希表拆分模块发送将当前的目标哈希子表更新为其上一张哈希子表的更新指令,否则,将当前的目标哈希子表对应的N个哈希函数全部更新。
上述哈希表拆分模块和表项添加模块协同工作,具体的说,在进行哈希表项存储时,表项拆分模块将其目标子表设定为第一张哈希子表,并将该表项传递给表项添加模块。表项添加模块依次根据第一张哈希子表对应的N个哈希函数之一,计算得到该条目的索引值K,并尝试将该表项存入所取的哈希函数对应的哈希子表中的对应于索引值K的位置。在进行哈希表项存储的时候,有可能遇到哈希冲突的情况,即两个不同的哈希表项经过计算得到同一张哈希子表的同一个索引值。在这种情况下,如果N大于1,则表项添加模块对当前的目标哈希子表利用下一哈希函数查找空位,重复上述操作,如果利用所有N个哈希函数在当前的目标哈希子表都没完成存入表项的工作,则返回失败消息给哈希表拆分模块,哈希表拆分模块则判断当前的目标哈希子表是否为最后一张哈希子表,若不是则将该表项的目标子表设置为下一张子表,传递给表项添加模块,重复上述过程;若已经是最后一张哈希子表则反馈失败消息给主控逻辑模块,通过主控逻辑模块调用异常处理模块来完成哈希表的刷新。表项添加模块可通过多个查找模块读取、修改或者删除表项存储模块中的内容。
多个查找模块,用于接收表项添加模块发出的读写指令,根据指令中携带的表项存储模块的地址对相应表项存储模块中存储的哈希子表进行读写操作。每个查找模块独立的耦合于一个表项存储模块,通过表项存储模块的地址总线和数据总线对表项存储模块中的数据进行访问和修改。多个查找模块接收表项添加模块、统计模块、哈希表拆分模块和异常处理模块发出的读写指令,将其转换成表项存储模块的地址,对表项存储模块中的存储数据进行操作。
多个表项存储模块,用于存储哈希子表,每个表项存储模块存储一张或多张哈希子表,其中每张哈希子表都是通过对所述哈希表进行拆分得到。每个表项存储模块具有独立的地址访问总线和独立的数据总线,其中对每一个模块而言,地址总线和数据总线可以复用,但是多个表项存储模块之间不复用。多个表项存储模块通过上述的独立的地址访问总线和独立的数据总线分别耦合于多个查找模块,多个查找模块可以通过发送地址来访问多个表项存储模块中对应于所发送地址处存储的数据。
所述的多个表项存储模块可以通过当前存在的各种数据存储技术来实现,如在需要少延时的应用场景下,可以用n个独立的高速SRAM芯片来作为多个表项存储模块,所述的高速SRAM芯片可以是ZBT SRAM,QDR SRAM,QDRII SRAM,QDRII+SRAM等各种常用的SRAM芯片;在需要大容量表项空间的情况下,可以用n个独立的高速DRAM芯片来作为多个表项存储模块,所述的高速DRAM芯片可以是SDR SRAM,DDR SRAM,DDRII SRAM,DDRIII SRAM等各种常用的SRAM芯片;在需要掉电保存数据的情况下,可以用n个独立的FLASH芯片来作为多个表项存储模块,所述的FLASH芯片可以是NAND FLASH,NOR FLASH,NV RAM或者其他各种常用的存储芯片;在海量数据的情况下,所述多个表项存储模块还可以用多个独立的硬盘,多个独立的磁盘存储阵列,或者是光盘驱动器等海量数据存储技术来实现。本领域的技术人员可以在不脱离本发明的精神和范围下任意选取多个表项存储模块的实现介质。
异常处理模块和统计模块用于完成系统监控和错误恢复等任务。如每次表项存储失败,统计模块均会将其计入存储失败记录。异常处理模块响应主控逻辑模块发出的哈希表刷新请求,通过多个查找模块对多个表项存储模块进行清零和重新赋值操作。
本实施例中,哈希子表对应的N个哈希函数可以是CRC函数也可以是其他函数,当采用CRC函数做为本发明中哈希子表对应的哈希函数时,若干张哈希子表对应的哈希函数之间可以采用不同的CRC多项式。
实施例二
请参阅图2,该图为本发明所述哈希表项查找装置的一个较佳实施例的结构框图,本装置查找的哈希表由若干张哈希子表组成,若干张哈希子表的存储空间大小可以根据需要搭配选择。每张哈希子表具有独立的地址控制线,可以同时被访问。每张哈希子表对应N个哈希函数,N>=1,每张哈希子表对应的哈希函数与存储表项时该哈希子表对应的哈希函数相同。本装置主要包括主控逻辑模块、数据判决模块、若干个计算模块1~n、若干个查找模块1~n以及与若干个查找模块一一对应的若干个表项存储模块1~n,其中,所述主控逻辑模块耦合至多个计算模块,以及数据判决模块;多个计算模块分别耦合至多个查找模块;多个查找模块分别耦合至多个表项存储模块。其中各个模块的主要功能如下:
主控逻辑模块,是哈希表项查找装置的控制部件,用于对哈希表项的查找过程进行控制,主要实现数据分发,结果收集等操作。其可以由硬件逻辑实现,如ASIC(专用集成电路)或者是FPGA(现场可编程逻辑门阵列)或者是其他可以实现逻辑函数功能的芯片;也可以通过运行在CPU(中央控制器)上的软件来实现。
多个计算模块,用于在主控逻辑模块的控制下利用每张哈希子表对应的第i个哈希函数并行计算需要查找的键值的哈希值,i的初始值为1。每个计算模块中包含N个不同的哈希函数。这里哈希函数可以采用各种已知的方法实现,如异或阵列或者类CRC函数,或者经过复杂的数学运算等等。哈希函数的选取准则是要尽可能的减少不同的键值经过哈希函数运算后获得的索引号冲突。查找过程中,主控逻辑模块将待查找的键值同时发送给多个计算模块,在多个计算模块中,对所分配到的键值同时进行N次哈希运算,采用N个不同的哈希函数,获得N个不同的索引。
多个查找模块,用于根据计算模块计算得到的哈希值在其各自对应的表项存储模块中并行地查找;每个查找模块独立的耦合于一个表项存储模块,通过表项存储模块的地址总线和数据总线对表项存储模块中的数据进行访问。每个查找模块接收计算模块生成的N个不同的索引,将其转换成表项存储模块的地址,读取该地址处的数据。这里可以存在索引值的扩充,加减偏移量或者截取等运算。在获取到对应于所述地址的数据后,查找模块将通过多个计算模块得到的索引值和多个表项存储模块获取的数据值一起传送给数据判决模块。
多个表项存储模块,用于存储哈希子表,每个表项存储模块存储一张哈希子表,其中每张哈希子表都是通过对所述哈希表进行拆分得到。每个表项存储模块具有独立的地址访问总线和独立的数据总线,其中对每一个模块而言,地址总线和数据总线可以复用,但是多个表项存储模块之间不复用。多个表项存储模块通过上述的独立的地址访问总线和独立的数据总线分别耦合于多个查找模块,多个查找模块可以通过发送地址来访问多个表项存储模块中对应于所发送地址处存储的数据。表项存储模块的实现方式与上述哈希表项查找装置中表项存储模块的实现方式相同,这里不再给予过多赘述。
数据判决模块,用于将各个哈希子表的查表结果与需要查找的键值进行比较,判定是否存在匹配的表项,若存在,将该表项的信息作为最终查表结果,否则,判断当前的i值是否等于N,若是,向主控逻辑模块发送本次查找失败消息,否则,将i值加1。
多个查找模块在获取了多个查找结果后,将结果传送至数据判决模块,数据判决模块根据主控逻辑模块传送过来的原始键值,比较多个查找结果中,哪一个是一次哈希命中(HIT),由于多个查找模块获取的多个查找结果来自于多个表项存储模块中存储的多个哈希子表,而所述哈希子表是通过对哈希表进行拆分得到的,因此,这当中不存在重复的查找结果,只有一个查找结果是可能的正确结果,或者返回的结果均与键值不符,本次哈希查找失败。在查找正确的情况下,数据判决模块将正确的一组数据中的索引值返回给主控逻辑模块,代表本次哈希查找的结果;在查找失败的情况下,数据判决模块将返回给主控逻辑模块一个无效索引值或者一个中断信号,通知主控逻辑模块本次查找失败。
本实施例中,哈希子表对应的N个哈希函数可以是CRC函数也可以是其他函数,当采用CRC函数做为本发明中哈希子表对应的哈希函数时,若干张哈希子表对应的哈希函数之间可以采用不同的CRC多项式。
实施例三
上述实施例一中的哈希表项存储装置与上述实施例二中的哈希表项查找装置可单独应用,也可将其结合起来进行应用,请参阅图3,该图为将本发明所述哈希表项存储装置及哈希表项查找装置结合后构成的装置的结构框图,结合后的装置中各个模块的功能为上述哈希表项存储装置中各模块的功能与上述哈希表项查找装置中各模块功能的结合,这里不再给予过多赘述。
实施例四
请参阅图4,该图为本发明所述哈希表项存储方法的一个较佳实施例的流程图,其主要包括如下步骤:
步骤S101、将哈希表拆分为M张哈希子表,每张哈希子表对应N个哈希函数,N>=1,其中,若干张哈希子表的存储空间大小可以根据需要搭配选择;
步骤S102、将第一张哈希子表作为当前的目标哈希子表;
步骤S103、取待存储表项的键值,利用当前的目标哈希子表对应的第i个哈希函数计算其哈希值,i的初始值为1;
步骤S104、根据计算得到的哈希值在当前的目标哈希子表中查找是否有空位,若有空位,则执行步骤S106,否则,执行步骤S105;
在步骤S103中计算出待存储表项键值的哈希值后,若当前的目标哈希子表的容量小于计算得到的哈希值的位数,则需要对该哈希值进行截取,以截取后的哈希值为索引在所述目标哈希子表中查找空位。
步骤S105、判断当前使用的哈希函数是否为该哈希子表对应的最后一个哈希函数,如果是,则执行步骤S107,否则,i=i+1,返回步骤S103;
步骤S106、将待存储表项的信息存入查找到的空位中。
步骤S107、判断当前的目标哈希子表是否为最后一张哈希子表,若是,执行步骤S109,否则,执行步骤S108;
步骤S108、将当前的目标哈希子表更新为其下一张哈希子表,返回步骤S103。
步骤S109、判断当前的目标哈希子表的哈希函数更新次数是否大于预设门限,若是,执行步骤S110,否则,执行步骤S111;
步骤S110、将当前的目标哈希子表更新为其上一张哈希子表,返回步骤S109;
步骤S111、将当前的目标哈希子表的哈希函数全部更新,返回步骤S103。
实施例五
请参阅图5,该图为本发明所述哈希表项查找方法的一个较佳实施例的流程图,本实施例中查找的哈希表由若干张哈希子表组成,若干张哈希子表的存储空间大小可以根据需要搭配选择。每张哈希子表具有独立的地址控制线,可以同时被访问。每张哈希子表对应N个哈希函数,N>=1,每张哈希子表对应的哈希函数与存储表项时该哈希子表对应的哈希函数相同。其主要包括如下步骤:
步骤S201、利用每张哈希子表对应的N个哈希函数中所对应的第i个哈希函数并行计算需要查找的键值的哈希值,i的初始值为1;
步骤S202、根据计算得到的哈希值在其各自对应的哈希子表中并行查找;
步骤S203、将各个哈希子表的查表结果与需要查找的键值进行比较,确定是否匹配,如果匹配则执行步骤204,否则,执行步骤205;
步骤S204、将该表项的信息作为最终查表结果;
步骤S205、判断是否已经比较到哈希子表对应的最后一个哈希函数,如果是,则表示无法查找到该表项,否则i=i+1,返回步骤S201。
若在哈希表存储过程中对待存储表项键值的哈希值进行了截取,则在本方法所述哈希表查找过程中,在步骤S201中计算出需要查找的键值的哈希值后,同样需要根据其各自对应的哈希子表的容量对该哈希值进行截取,以截取后的哈希值为索引在其各自对应的哈希子表中并行查找。
若在哈希表存储过程中,如果N大于1,则在查找过程中对每张哈希子表最多需要查找N次,直到找到匹配的表项。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种哈希表项存储装置,其特征在于,包括主控逻辑模块、哈希表拆分模块、表项添加模块、若干个查找模块和与查找模块对应的若干个表项存储模块,其中,
主控逻辑模块,用于对哈希表项的存储过程进行控制;
哈希表拆分模块,用于在主控逻辑模块的控制下将所述哈希表拆分为若干张哈希子表,将拆分后得到的若干张哈希子表存入若干个表项存储模块中,每个表项存储模块存储一张或多张哈希子表,每张哈希子表对应N个哈希函数,N>=1;所述哈希表拆分模块还用于确定初始的目标哈希子表,以及在接收到表项添加模块发出的更新指令后,按照该更新指令的要求进行目标哈希子表的更新;
表项添加模块,用于依次利用当前的目标哈希子表对应的N个哈希函数计算待存储表项键值的哈希值,根据每次计算得到的哈希值在当前的目标哈希子表中查找空位,若查找到,则将所述待存储表项的信息存入该空位中,若根据计算得到的N个哈希值都没有找到空位,则判断当前的目标哈希子表是否为最后一张哈希子表,若不是,向哈希表拆分模块发送将当前的目标哈希子表更新为其下一张哈希子表的更新指令;
所述表项添加模块在判定当前的目标哈希子表为最后一张哈希子表时,继续判断当前的目标哈希子表的哈希函数更新次数是否大于预设门限,若是,向哈希表拆分模块发送将当前的目标哈希子表更新为其上一张哈希子表的更新指令,并再次执行判断当前的目标哈希子表的哈希函数更新次数是否大于预设门限的过程,若不是,将当前的目标哈希子表对应的N个哈希函数全部更新;
多个查找模块,用于接收表项添加模块发出的读写指令,根据指令中携带的表项存储模块的地址对相应表项存储模块中存储的哈希子表进行读写操作。
2.如权利要求1所述的装置,其特征在于,还包括:
异常处理模块,用于响应主控逻辑模块的哈希表刷新请求,通过查找模块对表项存储模块进行清零和重新赋值操作。
3.如权利要求1或2所述的装置,其特征在于,所述哈希子表对应的N个哈希函数为循环冗余码校验函数;所述若干张哈希子表对应的哈希函数之间采用不同的循环冗余码校验多项式。
4.一种哈希表项查找装置,用于存储所述哈希表项的哈希表由若干张哈希子表组成,每张哈希子表对应N个哈希函数,N>=1,其特征在于,所述哈希子表对应的哈希函数与存储表项时该哈希子表对应的哈希函数相同;所述装置包括主控逻辑模块、数据判决模块、若干个计算模块、若干个查找模块及与查找模块一一对应的若干个表项存储模块,其中,
主控逻辑模块,用于对哈希表项的查找过程进行控制;
多个计算模块,用于在主控逻辑模块的控制下利用每张哈希子表对应的第i个哈希函数并行计算需要查找的键值的哈希值;
多个查找模块,用于根据计算模块计算得到的哈希值在其各自对应的表项存储模块中并行地查找;
表项存储模块,用于存储哈希子表。
数据判决模块,用于将各个哈希子表的查表结果与需要查找的键值进行比较,判定是否存在匹配的表项,若存在,将该表项的信息作为最终查表结果,否则,判断当前的i值是否等于N,若是,向主控逻辑模块发送本次查找失败消息,否则,i=i+1。
5.一种哈希表存储方法,其特征在于,包括步骤:
A、将所述哈希表拆分为若干张哈希子表,每张哈希子表对应N个哈希函数,N>=1;
B、将第一张哈希子表作为当前的目标哈希子表;
C、依次利用当前的目标哈希子表对应的N个哈希函数计算待存储表项键值的哈希值,根据每次计算得到的哈希值在当前的目标哈希子表中查找空位,若查找到,则将所述待存储表项的信息存入该空位中,若根据计算得到的N个哈希值都没有找到空位,执行步骤D;
D、判断当前的目标哈希子表是否为最后一张哈希子表,若是,执行步骤E,否则,将当前的目标哈希子表更新为其下一张哈希子表,返回步骤C;
E、判断当前的目标哈希子表的哈希函数更新次数是否大于预设门限,若是,将当前的目标哈希子表更新为其上一张哈希子表,重复执行本步骤,否则,将当前的目标哈希子表对应的N个哈希函数全部更新,返回步骤C。
6.如权利要求5所述的方法,其特征在于,所述步骤C中,如果N>1,则取待存储表项的键值,利用当前的目标哈希子表对应的第1个哈希函数计算其哈希值,根据该哈希值在当前的目标哈希子表中查找空位,若查找到,则将所述待存储表项的信息存入该空位中,否则,换下一个哈希函数计算其哈希值,重复上述操作,如果直到第N个哈希函数都没有找到空位,则执行步骤D。
7.如权利要求5或6所述的方法,其特征在于,所述步骤C中,在计算出待存储表项键值的哈希值后,根据当前的目标哈希子表的容量对该哈希值进行截取,以截取后的哈希值为索引在所述目标哈希子表中查找空位。
8.如权利要求5所述的方法,其特征在于,所述哈希子表对应的哈希函数为循环冗余码校验函数;所述若干张哈希子表对应的哈希函数之间采用不同的循环冗余码校验多项式。
9.一种哈希表查找方法,所述哈希表由若干张哈希子表组成,每张哈希子表对应N个哈希函数,N>=1,其特征在于,所述哈希子表对应的哈希函数与存储表项时该哈希子表对应的哈希函数相同,所述方法包括步骤:
A、利用每张哈希子表对应的第i个哈希函数并行计算需要查找的键值的哈希值,i的初始值为1,根据计算得到的哈希值在其各自对应的哈希子表中并行查找;
B、将各个哈希子表的查表结果与需要查找的键值进行比较,判定是否存在匹配的表项,若存在,将该表项的信息作为最终查表结果,否则,执行下一步骤;
C、判断当前的i值是否等于N,若是,本次查找失败,流程结束,否则,将i值加1,返回步骤A。
10.如权利要求9所述的方法,其特征在于,所述步骤A中,在计算出需要查找的键值的哈希值后,根据其各自对应的哈希子表的容量对该哈希值进行截取,以截取后的哈希值为索引在其各自对应的哈希子表中并行查找。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101581097A CN101604337B (zh) | 2009-07-13 | 2009-07-13 | 一种哈希表项存储、查找装置及方法 |
PCT/CN2009/073935 WO2011006311A1 (zh) | 2009-07-13 | 2009-09-15 | 哈希表项存储、查找装置及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101581097A CN101604337B (zh) | 2009-07-13 | 2009-07-13 | 一种哈希表项存储、查找装置及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101604337A CN101604337A (zh) | 2009-12-16 |
CN101604337B true CN101604337B (zh) | 2011-08-24 |
Family
ID=41470066
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009101581097A Active CN101604337B (zh) | 2009-07-13 | 2009-07-13 | 一种哈希表项存储、查找装置及方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN101604337B (zh) |
WO (1) | WO2011006311A1 (zh) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692651B (zh) * | 2009-09-27 | 2014-12-31 | 中兴通讯股份有限公司 | 一种哈希查找表的方法和装置 |
CN102609509B (zh) * | 2010-04-26 | 2015-09-30 | 华为技术有限公司 | 哈希数据处理方法和装置 |
JP5610227B2 (ja) * | 2011-05-18 | 2014-10-22 | 株式会社日立製作所 | 計算機及び識別子管理方法 |
WO2012159480A1 (zh) * | 2011-05-25 | 2012-11-29 | 中兴通讯股份有限公司 | 哈希表的表项添加、删除、查找方法及哈希表存储装置 |
FR2995029A1 (fr) | 2012-09-06 | 2014-03-07 | Systemes Moteurs | Procede de fabrication d'un collecteur d'admission integrant un echangeur de chaleur et collecteur correspondant |
CN102937993B (zh) * | 2012-11-09 | 2016-01-06 | 小米科技有限责任公司 | 一种用于访问关键字的方法及装置 |
CN104036054A (zh) * | 2014-07-08 | 2014-09-10 | 携程计算机技术(上海)有限公司 | 目标地查找方法及系统 |
CN104158744B (zh) * | 2014-07-09 | 2017-07-11 | 中国电子科技集团公司第三十二研究所 | 用于网络处理器的建表和查找方法 |
CN106302172A (zh) * | 2015-05-18 | 2017-01-04 | 深圳市中兴微电子技术有限公司 | 同时支持哈希查找和路由查找的存储、查找方法和装置 |
CN106709889A (zh) * | 2017-01-09 | 2017-05-24 | 中国科学院自动化研究所 | 并行视频图像对比度增强方法和装置 |
US11468781B2 (en) * | 2017-08-11 | 2022-10-11 | The Boeing Company | Simulation of an asset including message playback using nested hash tables |
CN108170203B (zh) * | 2018-02-02 | 2020-06-16 | 清华大学 | 用于可重构处理系统的查表算子及其配置方法 |
CN109189792A (zh) * | 2018-09-12 | 2019-01-11 | 天津芯海创科技有限公司 | 一种并行Hash查表架构和方法 |
CN110061902B (zh) * | 2019-03-12 | 2022-07-15 | 平安科技(深圳)有限公司 | 一种定时发送消息的方法、装置及存储介质 |
CN111723266A (zh) * | 2019-03-19 | 2020-09-29 | 北京沃东天骏信息技术有限公司 | 海量数据处理方法和装置 |
CN111177198B (zh) * | 2019-12-27 | 2023-06-16 | 芯启源(南京)半导体科技有限公司 | 一种用于芯片的内容查找方法 |
CN111459938B (zh) * | 2020-03-30 | 2023-02-28 | 烽火通信科技股份有限公司 | 一种表项处理方法、查表方法及系统 |
CN111625534A (zh) * | 2020-04-09 | 2020-09-04 | 中国人民解放军战略支援部队信息工程大学 | 用于哈希运算的数据结构及基于该结构的哈希表存储、查询方法 |
CN111460510B (zh) * | 2020-04-17 | 2022-04-12 | 支付宝(杭州)信息技术有限公司 | 基于隐私保护确定相同业务数据的方法及装置 |
CN113641871B (zh) * | 2021-10-18 | 2022-02-08 | 北京医百科技有限公司 | 一种无锁散列方法、装置、设备及介质 |
CN117349483B (zh) * | 2023-12-05 | 2024-04-09 | 杭州行芯科技有限公司 | 一种寄生参数的查找方法、装置、电子设备及存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1912870A (zh) * | 2006-09-05 | 2007-02-14 | 四川南山之桥微电子有限公司 | 一种哈希表查表方法 |
CN100470550C (zh) * | 2007-04-02 | 2009-03-18 | 华为技术有限公司 | 一种信息存储的方法、信息查找的方法及引擎装置 |
-
2009
- 2009-07-13 CN CN2009101581097A patent/CN101604337B/zh active Active
- 2009-09-15 WO PCT/CN2009/073935 patent/WO2011006311A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
CN101604337A (zh) | 2009-12-16 |
WO2011006311A1 (zh) | 2011-01-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101604337B (zh) | 一种哈希表项存储、查找装置及方法 | |
US10990479B2 (en) | Efficient packing of compressed data in storage system implementing data striping | |
US8625604B2 (en) | Hash-based prefix-compressed trie for IP route lookup | |
CN104866502B (zh) | 数据匹配的方法及装置 | |
CN106066896B (zh) | 一种应用感知的大数据重复删除存储系统及方法 | |
CN106990915B (zh) | 一种基于存储介质类型和加权配额的存储资源管理方法 | |
US20160132541A1 (en) | Efficient implementations for mapreduce systems | |
CN105242881A (zh) | 分布式存储系统及其数据读写方法 | |
CN101247349A (zh) | 一种网络流量快速分配方法 | |
US20080065704A1 (en) | Data and replica placement using r-out-of-k hash functions | |
CN100578469C (zh) | 存储、查询方法及存储控制器和查询系统 | |
CN101923558A (zh) | 基于(d,k)摩尔图的存储网络结构及数据读写方法 | |
Ibrahim et al. | Intelligent data placement mechanism for replicas distribution in cloud storage systems | |
CN103942343A (zh) | 一种面向哈希连接的数据存储优化方法 | |
US9672239B1 (en) | Efficient content addressable memory (CAM) architecture | |
CN104111924A (zh) | 一种数据库系统 | |
CN105447166A (zh) | 一种基于关键字查找信息的方法及系统 | |
CN104254839A (zh) | 用于分割单链表以供分配存储器元素的系统和方法 | |
CN105577806A (zh) | 一种分布式缓存方法及系统 | |
US20150058438A1 (en) | System and method providing hierarchical cache for big data applications | |
US9667719B1 (en) | Parallel storage system with multi-tier hardware accelerated partitioned key-value storage | |
CN110191057B (zh) | 路由查找方法及路由设备 | |
CN103581024A (zh) | Mac地址硬件与软件相结合的学习方法及装置 | |
CN110221778A (zh) | 酒店数据的处理方法、系统、存储介质以及电子设备 | |
Li et al. | Deterministic and efficient hash table lookup using discriminated vectors |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |