CN102682116B - 基于哈希表的表项处理方法及其装置 - Google Patents
基于哈希表的表项处理方法及其装置 Download PDFInfo
- Publication number
- CN102682116B CN102682116B CN201210147244.3A CN201210147244A CN102682116B CN 102682116 B CN102682116 B CN 102682116B CN 201210147244 A CN201210147244 A CN 201210147244A CN 102682116 B CN102682116 B CN 102682116B
- Authority
- CN
- China
- Prior art keywords
- hash
- list
- list item
- conflict
- stored
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种基于哈希表的表项处理方法及其装置,其方法包括步骤:在表项存储时,将待存储表项按照顺序排布方式,存储于结果表中;利用索引表的两重哈希函数,计算所述待存储表项的键值的哈希值;将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置。本发明在保证了较少的访问次数和较快的查询速度的同时,有效提高了业务表项条目存储量,增加了哈希表所能支持业务的容量,使哈希表的空间利用率高,并且还降低了冲突发生的概率,使哈希表的性能与容量之间达到平衡。
Description
技术领域
本发明涉及到通信技术领域,特别涉及到基于哈希表的表项处理方法及其装置。
背景技术
在通信技术领域中,常常采用哈希算法进行业务表项的精确匹配查询。采用哈希函数对业务表项条目的键值进行哈希运算,得到的计算结果值与哈希表中的存储空间相对应,即通过哈希运算结果寻址,以实现对表项的存储与查询。
目前的哈希存储与查询方法中,普遍存在的问题是性能与容量之间的矛盾。在哈希运算时,虽然各个表项的键值不同,但是经哈希函数计算获得的运算结果却可能相同,这将导致存储空间发生冲突。一方面,为了尽量减少冲突,保证查询性能,即一次命中率,传统哈希表结构在表项存储时采用哈希方式排布,即通过哈希函数获得的存储地址往往不是连续的,因而哈希表的空间利用率不高,在表项存储时会造成非常大的存储空间浪费,所能存储的表项条目不多,容量指标无法满足。另一方面,为了提高查找速度,传统的哈希表结构大多通过一次哈希计算结果来索引到哈希索引表进行查找,但这将大大增加冲突的概率。
发明内容
本发明的主要目的为提供一种提高存储容量、减少冲突概率的基于哈希表的表项处理方法及其装置。
本发明提出一种基于哈希表的表项处理方法,包括步骤:
在表项存储时,将待存储表项按照顺序排布方式,存储于结果表中;
利用索引表的两重哈希函数,计算所述待存储表项的键值的哈希值;
将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置。
优选地,所述利用索引表的两重哈希函数,计算所述待存储表项的键值哈希值;将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置的步骤具体包括:
利用当前索引表的两重哈希函数,计算所述待存储表项的键值的当前哈希值;
在当前哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针存储于当前索引表中空闲的位置;
在当前哈希值有冲突时,利用下一索引表的两重哈希函数,计算所述待存储表项的键值的下一哈希值;
在下一哈希值无冲突时,将下一哈希值和所述待存储表项所在结果表的地址指针存储于下一索引表中空闲的位置。
优选地,所述利用当前索引表的两重哈希函数,计算所述待存储表项的键值的当前哈希值;在当前哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针存储于当前索引表中空闲的位置的步骤具体包括:
利用当前索引表的第一重哈希函数,对所述待存储表项的键值进行哈希计算,在当前索引表中获得对应的索引;
利用当前索引表的第二重哈希函数,计算所述待存储表项的键值的当前哈希值;
在当前哈希值与对应的索引中各槽位存储的哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针,存储于对应的索引中空闲的槽位。
优选地,所述在当前哈希值有冲突时,利用下一索引表的两重哈希函数,计算所述待存储表项的键值的下一哈希值;在下一哈希值无冲突时,将下一哈希值和所述待存储表项所在结果表的地址指针存储于下一索引表中空闲的位置的步骤具体包括:
在当前哈希值与对应的索引中一槽位存储的哈希值发生冲突时,将冲突槽位中存储的冲突表项所在结果表的地址指针取出,并在所述冲突槽位中设置冲突标识;
利用下一索引表的第一重哈希函数,分别对所述待存储表项的键值和冲突表项的键值进行哈希计算,在下一索引表中分别获得对应的索引;
利用下一索引表的第二重哈希函数,分别计算所述待存储表项的键值和冲突表项的键值的下一哈希值;
在所述待存储表项的下一哈希值与对应的索引中各槽位存储的哈希值无冲突时,将所述待存储表项的下一哈希值和所在结果表的地址指针,存储于对应的索引中空闲的槽位;
在所述冲突表项的下一哈希值与对应的索引中各槽位存储的哈希值无冲突时,将所述冲突表项的下一哈希值和所在结果表的地址指针,存储于对应的索引中空闲的槽位。
优选地,所述在当前哈希值与对应的索引中一槽位存储的哈希值发生冲突时,将冲突槽位中存储的冲突表项所在结果表的地址指针取出,并在所述冲突槽位中设置冲突标识的步骤之后还包括:
在当前索引表为最后一张索引表时,将所述待存储表项和冲突表项所在结果表的地址指针分别存储于冲突链表中,并将冲突链表指针存储于最后一张索引表的冲突槽位中。
优选地,所述将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置的步骤之后还包括:
在表项查询时,利用索引表的两重哈希函数,计算待查询键值的哈希值;
在所述索引表中,查找所述哈希值所在位置存储的地址指针;
读取所述地址指针指向的结果表中存储的表项。
优选地,所述在表项查询时,利用索引表的两重哈希函数,计算待查询键值的哈希值;在所述索引表中查找所述哈希值所在位置存储的地址指针;读取所述地址指针指向的结果表中存储的表项的步骤具体包括:
利用各索引表的第一重哈希函数,对所述待查询键值进行哈希计算,在所述索引表中查询对应的索引;
利用各索引表的第二重哈希函数,计算所述待查询键值的哈希值,在所述索引中查询所述哈希值对应的槽位;
当对应的槽位存储的地址指针有效时,读取所述地址指针指向的结果表中存储的表项;
当所有对应的槽位存储的地址指针均无效,且最后一张哈希表中对应的槽位中设置有冲突标记时,查询最后一张哈希表中对应的槽位存储的冲突链表指针;
查询所述冲突链表指针指向的冲突链表中存储的地址指针;
读取所述地址指针指向的结果表中存储的表项。
优选地,所述当对应的槽位存储的地址指针有效时,读取所述地址指针指向的结果表中存储的表项的步骤具体包括:
当存在多个有效的地址指针时,比较各有效的地址指针所在索引表的优先级;
查询优先级最高的索引表存储的有效的地址指针;
读取所述地址指针指向的结果表中存储的表项。
本发明还提出一种基于哈希表的表项处理装置,包括:
存储模块,用于在表项存储时,将待存储表项按照顺序排布方式,存储于结果表中;利用索引表的两重哈希函数,计算所述待存储表项的键值的哈希值;将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置。
优选地,所述存储模块具体用于:
利用当前索引表的两重哈希函数,计算所述待存储表项的键值的当前哈希值;
在当前哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针存储于当前索引表中空闲的位置;
在当前哈希值有冲突时,利用下一索引表的两重哈希函数,计算所述待存储表项的键值的下一哈希值;
在下一哈希值无冲突时,将下一哈希值和所述待存储表项所在结果表的地址指针存储于下一索引表中空闲的位置。
优选地,所述存储模块具体包括:
第一哈希运算子模块,用于利用当前索引表的第一重哈希函数,对所述待存储表项的键值进行哈希计算,在当前索引表中获得对应的索引;
第二哈希运算子模块,用于利用当前索引表的第二重哈希函数,计算所述待存储表项的键值的当前哈希值;
地址指针存储子模块,用于在当前哈希值与对应的索引中各槽位存储的哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针,存储于对应的索引中空闲的槽位。
优选地,所述存储模块具体还包括:
冲突处理子模块,用于在当前哈希值与对应的索引中一槽位存储的哈希值发生冲突时,将冲突槽位中存储的冲突表项所在结果表的地址指针取出,并在所述冲突槽位中设置冲突标识;
所述第一哈希运算子模块还用于,利用下一索引表的第一重哈希函数,分别对所述待存储表项的键值和冲突表项的键值进行哈希计算,在下一索引表中分别获得对应的索引;
所述第二哈希运算子模块还用于,利用下一索引表的第二重哈希函数,分别计算所述待存储表项的键值和冲突表项的键值的下一哈希值;
所述地址指针存储子模块还用于,在所述待存储表项的下一哈希值与对应的索引中各槽位存储的哈希值无冲突时,将所述待存储表项的下一哈希值和所在结果表的地址指针,存储于对应的索引中空闲的槽位;在所述冲突表项的下一哈希值与对应的索引中各槽位存储的哈希值无冲突时,将所述冲突表项的下一哈希值和所在结果表的地址指针,存储于对应的索引中空闲的槽位。
优选地,所述存储模块具体还包括:
冲突链表存储子模块,用于在当前索引表为最后一张索引表时,将所述待存储表项和冲突表项所在结果表的地址指针分别存储于冲突链表中,并将冲突链表指针存储于最后一张索引表的冲突槽位中。
优选地,所述基于哈希表的表项处理装置,还包括查询模块,用于在表项查询时,利用索引表的两重哈希函数,计算待查询键值在所述索引表中的哈希值;在所述索引表中,查找所述哈希值所在位置存储的地址指针;读取所述地址指针指向的结果表中存储的表项。
优选地,所述查询模块具体包括:
第一哈希查询子模块,用于利用各索引表的第一重哈希函数,对所述待查询键值进行哈希计算,在所述索引表中查询对应的索引;
第二哈希查询子模块,用于利用所述索引表的第二重哈希函数,计算所述待查询键值的哈希值,在所述索引中查询所述哈希值对应的槽位;
表项读取子模块,用于当对应的槽位存储的地址指针有效时,读取所述地址指针指向的结果表中存储的表项;
冲突链表读取子模块,用于当所有对应的槽位存储的地址指针均无效,且最后一张哈希表中对应的槽位中设置有冲突标记时,查询最后一张哈希表中对应的槽位存储的冲突链表指针;查询所述冲突链表指针指向的冲突链表中存储的地址指针;读取所述地址指针指向的结果表中存储的表项。
优选地,所述查询模块具体还包括:
优先级比较子模块,用于当存在多个有效的地址指针时,比较各有效的地址指针所在索引表的优先级;
所述表项读取子模块还用于,根据优先级比较结果,查询优先级最高的索引表存储的有效的地址指针;读取所述地址指针指向的结果表中存储的表项。
本发明在保证了较少的访问次数和较快的查询速度的同时,有效提高了业务表项条目存储量,增加了哈希表所能支持业务的容量,使哈希表的空间利用率高,并且还降低了冲突发生的概率,使哈希表的性能与容量之间达到平衡。
附图说明
图1为本发明第一实施例的基于哈希表的表项处理方法中表项存储的步骤流程图;
图2为本发明第二实施例的基于哈希表的表项处理方法中表项存储的步骤流程图;
图3为本发明第三实施例的基于哈希表的表项处理方法中表项存储的步骤流程图;
图4为本发明第四实施例的基于哈希表的表项处理方法中表项存储的步骤流程图;
图5为本发明第五实施例的基于哈希表的表项处理方法中表项存储的步骤流程图;
图6为本发明第六实施例的基于哈希表的表项处理方法中表项查询的步骤流程图;
图7为本发明第七实施例的基于哈希表的表项处理方法中表项查询的步骤流程图;
图8为本发明第八实施例的基于哈希表的表项处理方法中表项查询的步骤流程图;
图9为本发明第九实施例的基于哈希表的表项处理方法中表项查询的步骤流程图;
图10为本发明第一实施例中基于哈希表的表项处理装置的结构示意图;
图11为本发明第二实施例的基于哈希表的表项处理装置中存储模块的结构示意图;
图12为本发明第三实施例的基于哈希表的表项处理装置中存储模块的结构示意图;
图13为本发明第四实施例中基于哈希表的表项处理装置的结构示意图;
图14为本发明第五实施例的基于哈希表的表项处理装置中查询模块的结构示意图;
图15为本发明第六实施例的基于哈希表的表项处理装置中查询模块的结构示意图;
图16为本发明第七实施例的基于哈希表的表项处理装置中查询模块的结构示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,图1为本发明第一实施例的基于哈希表的表项处理方法中表项存储的步骤流程图,该实施例提到的基于哈希表的表项处理方法,包括:
步骤S101,在表项存储时,将待存储表项按照顺序排布方式,存储于结果表中;
步骤S102,利用索引表的两重哈希函数,计算待存储表项的键值的哈希值;
步骤S103,将哈希值和待存储表项所在结果表的地址指针存储于索引表中空闲的位置。
本实施例将索引表与结果表独立开来,索引表的结构采用哈希方式排布,结果表的结构采用顺序排布方式,大大提高了哈希表所能支持业务的容量。同时,本实施例采用了多张索引表进行索引地址存储,针对每一张索引表,采用两重哈希函数,第一重为m级哈希运算,用来对索引表的各项索引进行地址索引,第二重为n级哈希运算,用来对各项索引中包含的若干个地址指针存储位置进行区分。键值在经过第一重哈希运算后,冲突概率为p1,经过第二重哈希运算后,冲突概率为p2,键值在同时经过双重的哈希运算后,冲突的概率为p1×p2,由于冲突概率p1和p2均小于1,因此双重哈希运算后的冲突概率将大大降低。本实施例在保证了较少的访问次数和较快的查询速度的同时,有效提高了业务表项条目存储量,增加了哈希表所能支持业务的容量,使哈希表的空间利用率高,并且还降低了冲突发生的概率,使哈希表的性能与容量之间达到平衡。
如图2所示,图2为本发明第二实施例的基于哈希表的表项处理方法中表项存储的步骤流程图。
步骤S201,利用第i张索引表的两重哈希函数,计算待存储表项的键值K的第i个哈希值;
本实施例利用当前索引表的两重哈希函数,计算待存储表项的键值的当前哈希值,可有效降低冲突发生概率。
步骤S202,判断第i个哈希值是否有冲突,如果否,则执行步骤S203;如果是,则执行步骤S204;
步骤S203,将第i个哈希值和待存储表项所在结果表的地址指针存储于第i张索引表中空闲的位置;
本实施例在当前哈希值无冲突时,将当前哈希值和待存储表项所在结果表的地址指针存储于当前索引表中空闲的位置。由于索引表与结果表结构不同,索引表的结构采用哈希排布方式存储结果表的地址指针,结果表的结构采用顺序排布方式存储表项,采用顺序排布方式可保证每一个存储空间均被利用,避免存储空间浪费,同时也提高了哈希表所能支持业务的容量。
步骤S204,i加1,返回步骤S201。
本实施例在当前哈希值有冲突时,利用下一索引表的两重哈希函数,计算待存储表项的键值的下一哈希值;在下一哈希值无冲突时,将下一哈希值和待存储表项所在结果表的地址指针存储于下一索引表中空闲的位置。由于本实施例采用了多张索引表进行地址指针存储,并利用哈希值作为地址指针在索引表中存储位置的标识ID。当第i个哈希值有重复,即说明标识ID有冲突,在第i+1张索引表中为地址指针寻找空闲的存储位置,以实现对冲突的合理处理,为每一个业务表项条目所在结果表的地址指针都分配到合适的存储空间。其中,由于发生冲突的比例明显小于未发生冲突的比例,因此,第一张索引表的容量通常较大,即越靠前的索引表容量越大。
如图3所示,图3为本发明第三实施例的基于哈希表的表项处理方法中表项存储的步骤流程图。
步骤S301,利用第i张索引表的第一重哈希函数Fi(X),对待存储表项的键值K进行哈希计算,在第i张索引表中获得Fi(K)对应的索引;
步骤S302,利用第i张索引表的第二重哈希函数Hi(X),计算待存储表项的键值K的第i个哈希值Hi(K);
本实施例利用当前索引表的第一重哈希函数,对待存储表项的键值进行哈希计算,在当前索引表中获得对应的索引;利用当前索引表的第二重哈希函数,计算待存储表项的键值的当前哈希值。每张索引表对应于各自的两重哈希函数;每张索引表中包含有多条索引,通过第一重哈希函数对键值进行哈希运算,获得的运算结果对应于一条索引;每条索引又包含多个槽位,通过第二重哈希函数对键值进行哈希运算,获得的运算结果可作为用于存储地址指针的槽位的标识ID。本实施例通过两重哈希函数运算,使发生冲突的概率将远小于通过一次哈希函数运算获得的地址。
步骤S303,判断Hi(K)与对应的索引中各槽位存储的哈希值是否有冲突,如果否,则执行步骤S304;如果是,则执行步骤S305;
本实施例的每个槽位中包含有多个需要信息,例如,包括:槽位有效指示标记,当槽位有效指示标记为1时,表示该槽位指向的数据表中已存储有业务表项条目;槽位标识ID,对应于哈希值,即采用第二重哈希函数对键值进行哈希运算后的结果值;指针信息,用于存储结果表的地址指针,指向结果表中对应的存储位置;冲突指示标记,当冲突指示标记为1时,表示该槽位存在冲突,本实施例的指针信息的最后一个比特位可以复用为冲突指示标记。
步骤S304,将Hi(K)和待存储表项所在结果表的地址指针,存储于第i张索引表对应的索引中空闲的槽位。
步骤S305,将冲突槽位中存储的冲突表项所在结果表的地址指针取出,并在冲突槽位中设置冲突标识;
本实施例在当前哈希值与对应的索引中各槽位存储的哈希值无冲突时,将当前哈希值和待存储表项所在结果表的地址指针,存储于对应的索引中空闲的槽位;在当前哈希值与对应的索引中一槽位存储的哈希值发生冲突时,将冲突槽位中存储的冲突表项所在结果表的地址指针取出,并在冲突槽位中设置冲突标识。本实施例在冲突的情况发生时,为避免在表项查询时查询到错误的表项结果,置冲突的槽位的地址信息为空,将冲突槽位存储的地址指针取出后,重新寻找空闲的存储空间,同时还将该槽位的冲突指示标记置为1,以供表项查询时直接跳过该槽位指向的结果表,减少存储器访问次数,提高查找时间和效率。此外,由于本实施例对冲突的槽位均设置有冲突标记,为了避免过多槽位被置为冲突不可用而造成大量废弃空间,本实施例在删除表项时,需要进行相应的空间回溯操作,即对所删除的表项对应的冲突槽位回收,重置冲突标记,以免造成大量空间浪费。
步骤S306,利用第i+1张索引表的第一重哈希函数Fi+1(X),分别对待存储表项的键值K和冲突表项的键值K’进行哈希计算,在第i+1张索引表中分别获得Fi+1(K)和Fi+1(K’)对应的索引;
步骤S307,利用第i+1张索引表的第二重哈希函数Hi+1(X),分别计算待存储表项的键值K的第i+1个哈希值Hi+1(K)和冲突表项的键值K’的第i+1个哈希值Hi+1(K’);
本实施例利用下一索引表的第一重哈希函数,分别对待存储表项的键值和冲突表项的键值进行哈希计算,在下一索引表中分别获得对应的索引;利用下一索引表的第二重哈希函数,分别计算待存储表项的键值和冲突表项的键值的下一哈希值。
步骤S308,分别判断Hi+1(K)和Hi+1(K’)与对应的索引中各槽位存储的哈希值是否有冲突,如果否,则执行步骤S309;如果是,则执行步骤S310;
步骤S309,将Hi+1(K)和待存储表项所在结果表的地址指针,存储于第i+1张索引表中对应的索引中空闲的槽位;将Hi+1(K’)和冲突表项所在结果表的地址指针,存储于第i+1张索引表中对应的索引中空闲的槽位;
步骤S310,i加1,返回步骤S305。
本实施例在待存储表项的下一哈希值与对应的索引中各槽位存储的哈希值无冲突时,将待存储表项的下一哈希值和所在结果表的地址指针,存储于对应的索引中空闲的槽位;在冲突表项的下一哈希值与对应的索引中各槽位存储的哈希值无冲突时,将冲突表项的下一哈希值和所在结果表的地址指针,存储于对应的索引中空闲的槽位。当第i+1个哈希值仍有冲突时,取出第i+1张索引表对应的冲突槽位存储的地址指针,重新判断第i+2个哈希值是否有冲突,以此循环,直至找到无冲突的哈希值。本实施例采用多张索引表进行地址存储,合理处理冲突状况,为每一个业务表项条目所在结果表的地址指针都分配到合适的索引表存储空间,有效保证了表项及其地址指针存储的完备性。
如图4所示,图4为本发明第四实施例的基于哈希表的表项处理方法中表项存储的步骤流程图。
步骤S305之后还包括:
步骤S311,判断第i张索引表是否为最后一张索引表,如果是,则执行步骤S312;如果否,则执行步骤306;
步骤S312,将冲突链表指针存储于最后一张索引表的冲突槽位中;
步骤S313,将待存储表项和冲突表项所在结果表的地址指针分别存储于冲突链表中。
本实施例对于在所有索引表中都无法找到合适存储位置的地址指针,将其存放在冲突链表中,保证了所有表项所在结果表的地址指针都可分配到合适的存储空间,有效提高了表项及其地址指针存储的完备性。
如图5所示,图5为本发明第五实施例的基于哈希表的表项处理方法中表项存储的步骤流程图。
步骤S301之后还包括:
步骤S314,判断第i张索引表的对应索引中是否有空闲的槽位,如果是,则执行步骤S302;如果否,则执行步骤311。
本实施例的冲突状况还包括槽位是否全满,对于当前索引表中的槽位指向的结果表已全部装满的情况,不在进行第二重哈希函数运算,直接跳到下一索引表,有效提高了存储速度和存储效率。
如图6所示,图6为本发明第六实施例的基于哈希表的表项处理方法中表项查询的步骤流程图。
步骤S103之后还包括:
步骤S104,在表项查询时,利用索引表的两重哈希函数,计算待查询键值的哈希值;
步骤S105,在索引表中,查找哈希值所在位置存储的地址指针;
步骤S106,读取地址指针指向的结果表中存储的表项。
本实施例仅采用两重哈希函数运算,即可找到匹配的表项存储位置,减少了访问存储器的次数,有效保证了较快的表项查询速度。
如图7所示,图7为本发明第七实施例的基于哈希表的表项处理方法中表项查询的步骤流程图。
步骤S401,利用各索引表的第一重哈希函数,对待查询键值进行哈希计算,在索引表中查询对应的索引;
步骤S402,利用各索引表的第二重哈希函数,计算待查询键值的哈希值,在索引中查询哈希值对应的槽位;
步骤S403,判断对应的槽位存储的地址指针是否有效,如果是,则执行步骤S404;如果否,则执行步骤S405;
步骤S404,读取地址指针指向的结果表中存储的表项;
步骤S405,在最后一张哈希表中对应的槽位中设置有冲突标记时,查询最后一张哈希表中对应的槽位存储的冲突链表指针;
步骤S406,查询冲突链表指针指向的冲突链表中存储的地址指针;
步骤S407,读取地址指针指向的结果表中存储的表项。
本实施例通过两重哈希函数查找匹配的表项,减少了访问存储器的次数,提高了查询速度与效率,便于硬件与存储器之间接口的实现。本实施例可以采用所有索引表的哈希函数运算同时进行的方式查找匹配表项,以节省查找时间,提高查找效率。此外,本实施例在表项查询时,可按照顺序查找方式,即首先对第一张索引表进行查找,如果找到有效的地址指针,则不再进行后续索引表的哈希函数运算,减少了运算量,同样能够实现提高查询速度与效率的目的。为确保表项查找的完备性,当各索引表中均找不到有效的地址指针时,则在冲突链表中进行查询,避免了表项查询的遗漏。
如图8所示,图8为本发明第八实施例的基于哈希表的表项处理方法中表项查询的步骤流程图。
步骤S501,利用各索引表的第一重哈希函数,对待查询键值进行哈希计算,在索引表中查询对应的索引;
步骤S502,利用各索引表的第二重哈希函数,计算待查询键值的哈希值,在索引中查询哈希值对应的槽位;
步骤S503,判断对应的槽位存储的地址指针是否有效,如果否,则执行步骤S504;如果是,则执行步骤S507;
步骤S504,在最后一张哈希表中对应的槽位中设置有冲突标记时,查询最后一张哈希表中对应的槽位存储的冲突链表指针;
步骤S505,查询冲突链表指针指向的冲突链表中存储的地址指针;
步骤S506,读取地址指针指向的结果表中存储的表项。
步骤S507,判断是否只存在一个有效的地址指针,如果是,则执行步骤S508;如果否,则执行步骤S509;
步骤S508,读取地址指针指向的结果表中存储的表项;
步骤S509,比较各匹配的表项对应的索引表的优先级;
步骤S510,查询优先级最高的索引表存储的有效的地址指针;
步骤S511,读取地址指针指向的结果表中存储的表项。。
本实施例的索引表存在明显的优先级顺序,由于在对表项所在结果表的地址指针存储时,首先在第一张索引表中查找空闲的存储位置,当第一张索引表中无空闲存储空间,或发生哈希值冲突,即标识ID冲突时,才在下一张索引表中查找空闲的存储位置,因此,第一张索引表的优先级最高,且通常情况下,大多数表项所在结果表的地址指针均存储在第一张索引表中,越往后的索引表优先级越低。本实施例通过对索引表优先级的比较,读取优先级最高的索引表对应的地址指针指向的结果表存储的表项,确保了业务表项条目查询的准确性和可靠性,保证了表项查询的一次命中率。
如图9所示,图9为本发明第九实施例的基于哈希表的表项处理方法中表项查询的步骤流程图。
步骤S601,利用各索引表的第一重哈希函数,对待查询键值进行哈希计算,在索引表中查询对应的索引;
步骤S602,利用各索引表的第二重哈希函数,计算待查询键值的哈希值,在索引中查询哈希值对应的槽位;
步骤S603,判断对应的槽位存储的地址指针是否有效,如果是,则执行步骤S604;如果否,则执行步骤S605;
步骤S604,读取地址指针指向的结果表中存储的表项;
步骤S605,判断最后一张哈希表中对应的槽位中是否设置有冲突标记,如果是,则执行步骤S606;如果否,则执行步骤S609;
步骤S606,查询最后一张哈希表中对应的槽位存储的冲突链表指针;
步骤S607,查询冲突链表指针指向的冲突链表中存储的地址指针;
步骤S608,读取地址指针指向的结果表中存储的表项。
步骤S609,读取结果表中指定位存储的无结果反馈信息。
本实施例中,由于在对表项所在结果表的地址指针存储时,对于在所有索引表中都无法找到合适存储位置的地址指针,则存储在冲突链表中,同时还在最后一张索引表的冲突槽位中标记冲突链表指针,因此,在表项查询时,通过判断最后一张索引表的冲突槽位中是否设置有冲突链表指针,来判断本次表项查询是否有结果。例如,当最后一张索引表的冲突槽位中设置有冲突链表指针,则说明本次表项查询有结果表项,且该结果表项所在结果表的地址指针因找不到合适的存储位置,而被存储在冲突链表中;否则,本次表项查询没有结果,反馈查询无结果的信息。本实施例通过对冲突链表进行读取,避免在表项查询时漏掉表项,确保表项查询的完备性;同时,在无结果的情况下,通过反馈无结果信息,避免了将下一次查询结果当作本次查询结果而发生错误的情况发生,确保了表项查询的可靠性。
如图10所示,图10为本发明第一实施例中基于哈希表的表项处理装置的结构示意图,该实施例提到的基于哈希表的表项处理装置,包括:
存储模块10,用于在表项存储时,将待存储表项按照顺序排布方式,存储于结果表中;利用索引表的两重哈希函数,计算待存储表项的键值的哈希值;将哈希值和待存储表项所在结果表的地址指针存储于索引表中空闲的位置。
本实施例将索引表与结果表独立开来,索引表的结构采用哈希方式排布,结果表的结构采用顺序排布方式,大大提高了哈希表所能支持业务的容量。同时,本实施例存储模块10采用了多张索引表进行索引地址存储,针对每一张索引表,采用两重哈希函数,第一重为m级哈希运算,用来对索引表的各项索引进行地址索引,第二重为n级哈希运算,用来对各项索引中包含的若干个地址指针存储位置进行区分。键值在经过第一重哈希运算后,冲突概率为p1,经过第二重哈希运算后,冲突概率为p2,键值在同时经过双重的哈希运算后,冲突的概率为p1×p2,由于冲突概率p1和p2均小于1,因此双重哈希运算后的冲突概率将大大降低。
本实施例在保证了较少的访问次数和较快的查询速度的同时,有效提高了业务表项条目存储量,增加了哈希表所能支持业务的容量,使哈希表的空间利用率高,并且还降低了冲突发生的概率,使哈希表的性能与容量之间达到平衡。
本发明实施例中,存储模块10具体用于:
利用当前索引表的两重哈希函数,计算待存储表项的键值的当前哈希值;
在当前哈希值无冲突时,将当前哈希值和待存储表项所在结果表的地址指针存储于当前索引表中空闲的位置;
在当前哈希值有冲突时,利用下一索引表的两重哈希函数,计算待存储表项的键值的下一哈希值;
在下一哈希值无冲突时,将下一哈希值和待存储表项所在结果表的地址指针存储于下一索引表中空闲的位置。
本实施例中由于索引表与结果表结构不同,索引表的结构采用哈希排布方式存储结果表的地址指针,结果表的结构采用顺序排布方式存储表项,存储模块10采用顺序排布方式存储表项,可保证每一个存储空间均被利用,避免存储空间浪费,同时也提高了哈希表所能支持业务的容量。此外,由于存储模块10采用了多张索引表进行地址指针存储,并利用哈希值作为地址指针在索引表中存储位置的标识ID。当第i个哈希值有重复,即说明标识ID有冲突,在第i+1张索引表中为地址指针寻找空闲的存储位置,以实现对冲突的合理处理,为每一个业务表项条目所在结果表的地址指针都分配到合适的存储空间。其中,由于发生冲突的比例明显小于未发生冲突的比例,因此,第一张索引表的容量通常较大,即越靠前的索引表容量越大。
如图11所示,图11为本发明第二实施例的基于哈希表的表项处理装置中存储模块的结构示意图,存储模块10具体包括:
第一哈希运算子模块11,用于利用当前索引表的第一重哈希函数,对待存储表项的键值进行哈希计算,在当前索引表中获得对应的索引;
第二哈希运算子模块12,用于利用当前索引表的第二重哈希函数,计算待存储表项的键值的当前哈希值;
地址指针存储子模块13,用于在当前哈希值与对应的索引中各槽位存储的哈希值无冲突时,将当前哈希值和待存储表项所在结果表的地址指针,存储于对应的索引中空闲的槽位。
冲突处理子模块14,用于在当前哈希值与对应的索引中一槽位存储的哈希值发生冲突时,将冲突槽位中存储的冲突表项所在结果表的地址指针取出,并在冲突槽位中设置冲突标识;
第一哈希运算子模块11还用于,利用下一索引表的第一重哈希函数,分别对待存储表项的键值和冲突表项的键值进行哈希计算,在下一索引表中分别获得对应的索引;
第二哈希运算子模块12还用于,利用下一索引表的第二重哈希函数,分别计算待存储表项的键值和冲突表项的键值的下一哈希值;
地址指针存储子模块13还用于,在待存储表项的下一哈希值与对应的索引中各槽位存储的哈希值无冲突时,将待存储表项的下一哈希值和所在结果表的地址指针,存储于对应的索引中空闲的槽位;在冲突表项的下一哈希值与对应的索引中各槽位存储的哈希值无冲突时,将冲突表项的下一哈希值和所在结果表的地址指针,存储于对应的索引中空闲的槽位。本实施例的索引表包括多条索引,第一哈希运算子模块11通过第一重哈希函数对键值进行哈希运算,获得的运算结果对应于一条索引;每条索引又包含多个槽位,第二哈希运算子模块12通过第二重哈希函数对键值进行哈希运算,获得的运算结果可作为用于存储地址指针的槽位的标识ID。本实施例通过两重哈希函数运算,使发生冲突的概率将远小于通过一次哈希函数运算获得的地址。每个槽位中包含有多个需要信息,例如,包括:槽位有效指示标记,当槽位有效指示标记为1时,表示该槽位指向的数据表中已存储有业务表项条目;槽位标识ID,对应于哈希值,即采用第二重哈希函数对键值进行哈希运算后的结果值;指针信息,用于存储结果表的地址指针,指向结果表中对应的存储位置;冲突指示标记,当冲突指示标记为1时,表示该槽位存在冲突,本实施例的指针信息的最后一个比特位可以复用为冲突指示标记。在冲突的情况发生时,为避免在表项查询时查询到错误的表项结果,冲突处理子模块14置冲突的槽位的地址信息为空,即将冲突槽位存储的地址指针取出后,通过第一哈希运算子模块11和第二哈希运算子模块12,重新寻找空闲的存储空间。同时,冲突处理子模块14还将该槽位的冲突指示标记置为1,以供表项查询时直接跳过该槽位指向的结果表,减少存储器访问次数,提高查找时间和效率。此外,由于本实施例对冲突的槽位均设置有冲突标记,为了避免过多槽位被置为冲突不可用而造成大量废弃空间,本实施例在删除表项时,需要进行相应的空间回溯操作,即对所删除的表项对应的冲突槽位回收,重置冲突标记,以免造成大量空间浪费。当第i+1个哈希值仍有冲突时,冲突处理子模块14取出第i+1张索引表对应的冲突槽位存储的地址指针,通过第一哈希运算子模块11和第二哈希运算子模块12,重新判断第i+2个哈希值是否有冲突,以此循环,直至找到无冲突的哈希值。本实施例采用多张索引表进行地址存储,合理处理冲突状况,为每一个业务表项条目所在结果表的地址指针都分配到合适的索引表存储空间,有效保证了表项及其地址指针存储的完备性。
本发明实施例中,冲突处理子模块14还用于,在当前索引表的对应索引中无空闲的槽位时,输出当前索引表槽位满的信息至第一哈希运算子模块11,供第一哈希运算子模块11利用下一索引表的第一重哈希函数,对待存储表项的键值进行哈希计算,在下一索引表中获得对应的索引。即对于当前索引表中的槽位已全部装满的情况,不再进行第二重哈希函数运算,直接跳到下一索引表,有效提高了存储速度和存储效率。
如图12所示,图12为本发明第三实施例的基于哈希表的表项处理装置中存储模块的结构示意图,存储模块10具体还包括:
冲突链表存储子模块15,用于在当前索引表为最后一张索引表时,将待存储表项和冲突表项所在结果表的地址指针分别存储于冲突链表中,并将冲突链表指针存储于最后一张索引表的冲突槽位中。
本实施例对于在所有索引表中都无法找到合适存储位置的地址指针,通过冲突链表存储子模块15将其存放在冲突链表中,保证了所有表项所在结果表的地址指针都可分配到合适的存储空间,有效提高了表项及其地址指针存储的完备性。
如图13所示,图13为本发明第四实施例中基于哈希表的表项处理装置的结构示意图,该实施例提到的基于哈希表的表项处理装置,还包括:
查询模块20,用于在表项查询时,利用索引表的两重哈希函数,计算待查询键值在索引表中的哈希值;在索引表中,查找哈希值所在位置存储的地址指针;读取地址指针指向的结果表中存储的表项。
本实施例的查询模块20仅采用两重哈希函数运算,即可找到匹配的表项存储位置,减少了访问存储器的次数,有效保证了较快的表项查询速度。
如图14所示,图14为本发明第五实施例的基于哈希表的表项处理装置中查询模块的结构示意图,查询模块20具体包括:
第一哈希查询子模块21,用于利用各索引表的第一重哈希函数,对待查询键值进行哈希计算,在索引表中查询对应的索引;
第二哈希查询子模块22,用于利用各索引表的第二重哈希函数,计算待查询键值的哈希值,在索引中查询哈希值对应的槽位;
表项读取子模块23,用于当对应的槽位存储的地址指针有效时,读取地址指针指向的结果表中存储的表项;
冲突链表读取子模块24,用于当所有对应的槽位存储的地址指针均无效,且最后一张哈希表中对应的槽位中设置有冲突标记时,查询最后一张哈希表中对应的槽位存储的冲突链表指针;查询冲突链表指针指向的冲突链表中存储的地址指针;读取地址指针指向的结果表中存储的表项。
本实施例通过第一哈希查询子模块21和第二哈希查询子模块22进行两重哈希函数查找匹配的表项,减少了访问存储器的次数,提高了查询速度与效率,便于硬件与存储器之间接口的实现。本实施例可以采用所有索引表的哈希函数运算同时进行的方式查找匹配表项,以节省查找时间,提高查找效率。此外,本实施例在表项查询时,可按照顺序查找方式,即首先对第一张索引表进行查找,如果找到有效的地址指针,则不再进行后续索引表的哈希函数运算,减少了运算量,同样能够实现提高查询速度与效率的目的。为确保表项查找的完备性,当各索引表中均找不到有效的地址指针时,则通过冲突链表读取子模块24在冲突链表中进行查询,避免了表项查询的遗漏。
如图15所示,图15为本发明第六实施例的基于哈希表的表项处理装置中查询模块的结构示意图,查询模块20具体还包括:
优先级比较子模块25,用于当存在多个有效的地址指针时,比较各有效的地址指针所在索引表的优先级;
表项读取子模块23还用于,根据优先级比较结果,查询优先级最高的索引表存储的有效的地址指针;读取地址指针指向的结果表中存储的表项。
本实施例的索引表存在明显的优先级顺序,由于在对表项所在结果表的地址指针存储时,首先在第一张索引表中查找空闲的存储位置,当第一张索引表中无空闲存储空间,或发生哈希值冲突时,即标识ID冲突,才在下一张索引表中查找空闲的存储位置,因此,第一张索引表的优先级最高,且通常情况下,大多数表项所在结果表的地址指针均存储在第一张索引表中,越往后的索引表优先级越低。本实施例通过优先级比较子模块25对索引表优先级的比较,表项读取子模块23根据优先级比较结果,读取优先级最高的索引表对应的地址指针指向的结果表存储的表项,确保了业务表项条目查询的准确性和可靠性,保证了表项查询的一次命中率。
如图16所示,图16为本发明第七实施例的基于哈希表的表项处理装置中查询模块的结构示意图,查询模块20具体还包括:
无结果反馈子模块26,用于在最后一张索引表的特定槽位中没有冲突链表指针时,读取结果表中指定位存储的无结果反馈信息。
本实施例中,由于在对表项所在结果表的地址指针存储时,对于在所有索引表中都无法找到合适存储位置的地址指针,则存储在冲突链表中,同时还在最后一张索引表的冲突槽位中标记冲突链表指针,因此,在表项查询时,通过判断最后一张索引表的冲突槽位中是否设置有冲突链表指针,来判断本次表项查询是否有结果。例如,当最后一张索引表的冲突槽位中设置有冲突链表指针,则说明本次表项查询有结果表项,且该结果表项所在结果表的地址指针因找不到合适的存储位置,而被存储在冲突链表中;否则,本次表项查询没有结果,无结果反馈子模块26反馈查询无结果的信息。本实施例通过对冲突链表进行读取,避免在表项查询时漏掉表项,确保表项查询的完备性;同时,在无结果的情况下,通过反馈无结果信息,避免了将下一次查询结果当作本次查询结果而发生错误的情况发生,确保了表项查询的可靠性。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (14)
1.一种基于哈希表的表项处理方法,其特征在于,包括步骤:
在表项存储时,将待存储表项按照顺序排布方式,存储于结果表中;
利用索引表的两重哈希函数,计算所述待存储表项的键值的哈希值;
将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置;
所述利用索引表的两重哈希函数,计算所述待存储表项的键值哈希值;将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置的步骤具体包括:
利用当前索引表的两重哈希函数,计算所述待存储表项的键值的当前哈希值;
在当前哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针存储于当前索引表中空闲的位置;
在当前哈希值有冲突时,利用下一索引表的两重哈希函数,计算所述待存储表项的键值的下一哈希值;
在下一哈希值无冲突时,将下一哈希值和所述待存储表项所在结果表的地址指针存储于下一索引表中空闲的位置。
2.根据权利要求1所述的基于哈希表的表项处理方法,其特征在于,所述利用当前索引表的两重哈希函数,计算所述待存储表项的键值的当前哈希值;在当前哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针存储于当前索引表中空闲的位置的步骤具体包括:
利用当前索引表的第一重哈希函数,对所述待存储表项的键值进行哈希计算,在当前索引表中获得对应的索引;
利用当前索引表的第二重哈希函数,计算所述待存储表项的键值的当前哈希值;
在当前哈希值与对应的索引中各槽位存储的哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针,存储于对应的索引中空闲的槽位。
3.根据权利要求2所述的基于哈希表的表项处理方法,其特征在于,所述在当前哈希值有冲突时,利用下一索引表的两重哈希函数,计算所述待存储表项的键值的下一哈希值;在下一哈希值无冲突时,将下一哈希值和所述待存储表项所在结果表的地址指针存储于下一索引表中空闲的位置的步骤具体包括:
在当前哈希值与对应的索引中一槽位存储的哈希值发生冲突时,将冲突槽位中存储的冲突表项所在结果表的地址指针取出,并在所述冲突槽位中设置冲突标识;
利用下一索引表的第一重哈希函数,分别对所述待存储表项的键值和冲突表项的键值进行哈希计算,在下一索引表中分别获得对应的索引;
利用下一索引表的第二重哈希函数,分别计算所述待存储表项的键值和冲突表项的键值的下一哈希值;
在所述待存储表项的下一哈希值与对应的索引中各槽位存储的哈希值无冲突时,将所述待存储表项的下一哈希值和所在结果表的地址指针,存储于对应的索引中空闲的槽位;
在所述冲突表项的下一哈希值与对应的索引中各槽位存储的哈希值无冲突时,将所述冲突表项的下一哈希值和所在结果表的地址指针,存储于对应的索引中空闲的槽位。
4.根据权利要求3所述的基于哈希表的表项处理方法,其特征在于,所述在当前哈希值与对应的索引中一槽位存储的哈希值发生冲突时,将冲突槽位中存储的冲突表项所在结果表的地址指针取出,并在所述冲突槽位中设置冲突标识的步骤之后还包括:
在当前索引表为最后一张索引表时,将所述待存储表项和冲突表项所在结果表的地址指针分别存储于冲突链表中,并将冲突链表指针存储于最后一张索引表的冲突槽位中。
5.根据权利要求4所述的基于哈希表的表项处理方法,其特征在于,所述将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置的步骤之后还包括:
在表项查询时,利用索引表的两重哈希函数,计算待查询键值的哈希值;
在所述索引表中,查找所述哈希值所在位置存储的地址指针;
读取所述地址指针指向的结果表中存储的表项。
6.根据权利要求5所述的基于哈希表的表项处理方法,其特征在于,所述在表项查询时,利用索引表的两重哈希函数,计算待查询键值的哈希值;在所述索引表中查找所述哈希值所在位置存储的地址指针;读取所述地址指针指向的结果表中存储的表项的步骤具体包括:
利用各索引表的第一重哈希函数,对所述待查询键值进行哈希计算,在所述索引表中查询对应的索引;
利用各索引表的第二重哈希函数,计算所述待查询键值的哈希值,在所述索引中查询所述哈希值对应的槽位;
当对应的槽位存储的地址指针有效时,读取所述地址指针指向的结果表中存储的表项;
当所有对应的槽位存储的地址指针均无效,且最后一张哈希表中对应的槽位中设置有冲突标记时,查询最后一张哈希表中对应的槽位存储的冲突链表指针;
查询所述冲突链表指针指向的冲突链表中存储的地址指针;
读取所述地址指针指向的结果表中存储的表项。
7.根据权利要求6所述的基于哈希表的表项处理方法,其特征在于,所述当对应的槽位存储的地址指针有效时,读取所述地址指针指向的结果表中存储的表项的步骤具体包括:
当存在多个有效的地址指针时,比较各有效的地址指针所在索引表的优先级;
查询优先级最高的索引表存储的有效的地址指针;
读取所述地址指针指向的结果表中存储的表项。
8.一种基于哈希表的表项处理装置,其特征在于,包括:
存储模块,用于在表项存储时,将待存储表项按照顺序排布方式,存储于结果表中;利用索引表的两重哈希函数,计算所述待存储表项的键值的哈希值;将所述哈希值和所述待存储表项所在结果表的地址指针存储于所述索引表中空闲的位置;
所述存储模块具体用于:
利用当前索引表的两重哈希函数,计算所述待存储表项的键值的当前哈希值;
在当前哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针存储于当前索引表中空闲的位置;
在当前哈希值有冲突时,利用下一索引表的两重哈希函数,计算所述待存储表项的键值的下一哈希值;
在下一哈希值无冲突时,将下一哈希值和所述待存储表项所在结果表的地址指针存储于下一索引表中空闲的位置。
9.根据权利要求8所述的基于哈希表的表项处理装置,其特征在于,所述存储模块具体包括:
第一哈希运算子模块,用于利用当前索引表的第一重哈希函数,对所述待存储表项的键值进行哈希计算,在当前索引表中获得对应的索引;
第二哈希运算子模块,用于利用当前索引表的第二重哈希函数,计算所述待存储表项的键值的当前哈希值;
地址指针存储子模块,用于在当前哈希值与对应的索引中各槽位存储的哈希值无冲突时,将当前哈希值和所述待存储表项所在结果表的地址指针,存储于对应的索引中空闲的槽位。
10.根据权利要求9所述的基于哈希表的表项处理装置,其特征在于,所述存储模块具体还包括:
冲突处理子模块,用于在当前哈希值与对应的索引中一槽位存储的哈希值发生冲突时,将冲突槽位中存储的冲突表项所在结果表的地址指针取出,并在所述冲突槽位中设置冲突标识;
所述第一哈希运算子模块还用于,利用下一索引表的第一重哈希函数,分别对所述待存储表项的键值和冲突表项的键值进行哈希计算,在下一索引表中分别获得对应的索引;
所述第二哈希运算子模块还用于,利用下一索引表的第二重哈希函数,分别计算所述待存储表项的键值和冲突表项的键值的下一哈希值;
所述地址指针存储子模块还用于,在所述待存储表项的下一哈希值与对应的索引中各槽位存储的哈希值无冲突时,将所述待存储表项的下一哈希值和所在结果表的地址指针,存储于对应的索引中空闲的槽位;在所述冲突表项的下一哈希值与对应的索引中各槽位存储的哈希值无冲突时,将所述冲突表项的下一哈希值和所在结果表的地址指针,存储于对应的索引中空闲的槽位。
11.根据权利要求10所述的基于哈希表的表项处理装置,其特征在于,所述存储模块具体还包括:
冲突链表存储子模块,用于在当前索引表为最后一张索引表时,将所述待存储表项和冲突表项所在结果表的地址指针分别存储于冲突链表中,并将冲突链表指针存储于最后一张索引表的冲突槽位中。
12.根据权利要求11所述的基于哈希表的表项处理装置,其特征在于,还包括查询模块,用于在表项查询时,利用索引表的两重哈希函数,计算待查询键值在所述索引表中的哈希值;在所述索引表中,查找所述哈希值所在位置存储的地址指针;读取所述地址指针指向的结果表中存储的表项。
13.根据权利要求12所述的基于哈希表的表项处理装置,其特征在于,所述查询模块具体包括:
第一哈希查询子模块,用于利用各索引表的第一重哈希函数,对所述待查询键值进行哈希计算,在所述索引表中查询对应的索引;
第二哈希查询子模块,用于利用各索引表的第二重哈希函数,计算所述待查询键值的哈希值,在所述索引中查询所述哈希值对应的槽位;
表项读取子模块,用于当对应的槽位存储的地址指针有效时,读取所述地址指针指向的结果表中存储的表项;
冲突链表读取子模块,用于当所有对应的槽位存储的地址指针均无效,且最后一张哈希表中对应的槽位中设置有冲突标记时,查询最后一张哈希表中对应的槽位存储的冲突链表指针;查询所述冲突链表指针指向的冲突链表中存储的地址指针;读取所述地址指针指向的结果表中存储的表项。
14.根据权利要求13所述的基于哈希表的表项处理装置,其特征在于,所述查询模块具体还包括:
优先级比较子模块,用于当存在多个有效的地址指针时,比较各有效的地址指针所在索引表的优先级;
所述表项读取子模块还用于,根据优先级比较结果,查询优先级最高的索引表存储的有效的地址指针;读取所述地址指针指向的结果表中存储的表项。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210147244.3A CN102682116B (zh) | 2012-05-14 | 2012-05-14 | 基于哈希表的表项处理方法及其装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210147244.3A CN102682116B (zh) | 2012-05-14 | 2012-05-14 | 基于哈希表的表项处理方法及其装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102682116A CN102682116A (zh) | 2012-09-19 |
CN102682116B true CN102682116B (zh) | 2014-06-11 |
Family
ID=46814041
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210147244.3A Active CN102682116B (zh) | 2012-05-14 | 2012-05-14 | 基于哈希表的表项处理方法及其装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102682116B (zh) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102937993B (zh) * | 2012-11-09 | 2016-01-06 | 小米科技有限责任公司 | 一种用于访问关键字的方法及装置 |
CN103001878B (zh) * | 2012-11-26 | 2018-02-16 | 中兴通讯股份有限公司 | Mac地址哈希冲突的确定方法及装置 |
CN103186668B (zh) * | 2013-03-11 | 2016-02-10 | 北京京东世纪贸易有限公司 | 基于键值数据库的数据处理方法与装置以及数据存储系统 |
CN103226591B (zh) * | 2013-04-15 | 2016-08-31 | 厦门亿联网络技术股份有限公司 | 一种支持多关键字快速访问方法和装置 |
CN104158744B (zh) * | 2014-07-09 | 2017-07-11 | 中国电子科技集团公司第三十二研究所 | 用于网络处理器的建表和查找方法 |
WO2017054208A1 (zh) * | 2015-09-30 | 2017-04-06 | 华为技术有限公司 | 一种空口资源的确定及指示方法、装置 |
CN105516393A (zh) * | 2015-12-31 | 2016-04-20 | 赛尔网络有限公司 | 一种多阶段多维ip地址分类方法及装置 |
CN105516367B (zh) * | 2016-02-02 | 2018-02-13 | 北京百度网讯科技有限公司 | 分布式数据存储系统、方法和装置 |
CN106776464B (zh) * | 2016-11-10 | 2020-03-10 | 杭州华为数字技术有限公司 | 一种函数地址的获取方法以及电子设备 |
CN108664518B (zh) * | 2017-03-31 | 2021-12-07 | 深圳市中兴微电子技术有限公司 | 一种实现查表处理的方法及装置 |
CN109947762A (zh) * | 2017-08-16 | 2019-06-28 | 深圳市中兴微电子技术有限公司 | 一种哈希表管理方法及装置、计算机可读存储介质 |
CN107679212A (zh) * | 2017-10-17 | 2018-02-09 | 安徽慧视金瞳科技有限公司 | 一种应用于跳跃表数据结构的数据查询优化方法 |
CN109947669A (zh) * | 2017-12-21 | 2019-06-28 | 北京忆恒创源科技有限公司 | Kv存储设备的地址转换方法与系统 |
CN109104407B (zh) * | 2018-06-29 | 2020-10-02 | 国网湖南省电力有限公司 | 一种基于特征检索的网络日志在线跟踪方法及系统 |
CN110069496A (zh) * | 2019-03-20 | 2019-07-30 | 韶关学院 | 一种新型链式哈希表构建方法及装置 |
CN110334251B (zh) * | 2019-07-01 | 2021-10-19 | 南京邮电大学 | 一种有效解决rehash冲突的元素序列生成方法 |
CN112783904B (zh) * | 2019-11-07 | 2024-07-16 | 北京沃东天骏信息技术有限公司 | 一种更新索引数据的方法和装置 |
CN111124312B (zh) * | 2019-12-23 | 2023-10-31 | 第四范式(北京)技术有限公司 | 数据去重的方法及其装置 |
CN111190930B (zh) * | 2019-12-29 | 2023-11-28 | 杭州拓深科技有限公司 | 融合哈希和分块的消防设备历史数据定位系统及定位方法 |
CN111431806B (zh) * | 2020-03-18 | 2022-07-08 | 北京京安佳新技术有限公司 | 一种流表处理方法和设备 |
CN111651372A (zh) * | 2020-05-13 | 2020-09-11 | 湖北三江航天万峰科技发展有限公司 | 一种基于哈希查找的Flash检索方法及存储介质 |
CN113674805A (zh) * | 2020-05-15 | 2021-11-19 | 甄伟哲 | 一种基于哈希算法的优化高通量生物医学实验平台 |
CN112632079B (zh) * | 2020-12-30 | 2023-07-21 | 联想未来通信科技(重庆)有限公司 | 一种数据流标识的查询方法及装置 |
CN113010477B (zh) * | 2021-03-23 | 2023-09-12 | 中兴通讯股份有限公司 | 持久内存文件系统元数据的检索方法和装置、存储结构 |
CN113779320B (zh) * | 2021-08-18 | 2024-02-27 | 北京计算机技术及应用研究所 | 一种表项存储地址冲突的解决方法 |
WO2024197808A1 (zh) * | 2023-03-31 | 2024-10-03 | 新华三技术有限公司 | 存储mac地址表项 |
CN116633752A (zh) * | 2023-04-07 | 2023-08-22 | 南京和子祥企业管理有限公司 | 一种基于大数据的分析管理系统 |
CN116450656B (zh) * | 2023-06-16 | 2023-08-22 | 北京数巅科技有限公司 | 数据处理方法、装置、设备及存储介质 |
CN117609235A (zh) * | 2023-11-29 | 2024-02-27 | 中科驭数(北京)科技有限公司 | 哈希表中的索引数据回收和分配方法及装置 |
CN117349483B (zh) * | 2023-12-05 | 2024-04-09 | 杭州行芯科技有限公司 | 一种寄生参数的查找方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6775281B1 (en) * | 1999-09-30 | 2004-08-10 | Mosaid Technologies, Inc. | Method and apparatus for a four-way hash table |
CN101692651A (zh) * | 2009-09-27 | 2010-04-07 | 中兴通讯股份有限公司 | 一种哈希查找表的方法和装置 |
CN102194002A (zh) * | 2011-05-25 | 2011-09-21 | 中兴通讯股份有限公司 | 哈希表的表项添加、删除、查找方法及哈希表存储装置 |
-
2012
- 2012-05-14 CN CN201210147244.3A patent/CN102682116B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6775281B1 (en) * | 1999-09-30 | 2004-08-10 | Mosaid Technologies, Inc. | Method and apparatus for a four-way hash table |
CN101692651A (zh) * | 2009-09-27 | 2010-04-07 | 中兴通讯股份有限公司 | 一种哈希查找表的方法和装置 |
CN102194002A (zh) * | 2011-05-25 | 2011-09-21 | 中兴通讯股份有限公司 | 哈希表的表项添加、删除、查找方法及哈希表存储装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102682116A (zh) | 2012-09-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102682116B (zh) | 基于哈希表的表项处理方法及其装置 | |
CN108153757B (zh) | 一种哈希表管理的方法和装置 | |
CN102890675B (zh) | 一种数据存储和查找的方法及装置 | |
US8938603B2 (en) | Cache system optimized for cache miss detection | |
CN107783980B (zh) | 索引数据生成及数据查询方法及装置、存储和查询系统 | |
CN100445999C (zh) | 一种数据存储及搜索方法 | |
CN103942209B (zh) | 数据处理方法 | |
CN113961514B (zh) | 数据查询方法及装置 | |
US8812492B2 (en) | Automatic and dynamic design of cache groups | |
CN108848244A (zh) | 一种分页显示的方法及装置 | |
CN101887310B (zh) | 一种输入状态及键盘样式的切换方法和装置 | |
CN104246765A (zh) | 图像检索装置、图像检索方法、程序以及计算机可读取的存储介质 | |
CN103942221B (zh) | 检索方法及设备 | |
CN101594319A (zh) | 表项查找方法和装置 | |
EP2544414A1 (en) | Method and device for storing routing table entry | |
US7676457B2 (en) | Automatic index based query optimization | |
CN102117340A (zh) | 一种动态数据存储方法 | |
CN101267381A (zh) | 哈希表操作方法及装置 | |
CN104408183B (zh) | 数据系统的数据导入方法和装置 | |
CN108920105A (zh) | 基于社区结构的图数据分布式存储方法及装置 | |
CN103973571A (zh) | 网络处理器及其路由查找方法 | |
CN102129473A (zh) | 一种静态数据检索方法 | |
CN110908996A (zh) | 一种数据处理的方法和装置 | |
CN100487697C (zh) | 一种应用改进的哈希方法进行查找的方法 | |
CN103020300B (zh) | 一种信息检索方法和设备 |
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 |