CN101267381A - 哈希表操作方法及装置 - Google Patents
哈希表操作方法及装置 Download PDFInfo
- Publication number
- CN101267381A CN101267381A CNA2007100643684A CN200710064368A CN101267381A CN 101267381 A CN101267381 A CN 101267381A CN A2007100643684 A CNA2007100643684 A CN A2007100643684A CN 200710064368 A CN200710064368 A CN 200710064368A CN 101267381 A CN101267381 A CN 101267381A
- Authority
- CN
- China
- Prior art keywords
- list item
- index
- index value
- hash
- target data
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种HASH表操作方法,包括:根据HASH索引值检索索引字段所对应的表项;检索到相应的表项后,从索引当前的位置读取N个表项,N为大于1的整数;当所述N个表项中不存在与索引字段匹配的目标数据时,则继续从索引当前的位置读取N个表项,直至查找到与索引字段匹配的目标数据为止。本发明还公开一种采用所述HASH表操作方法的装置。本发明提供的HASH表操作方法及装置,不仅能够解决数据查找中的HASH冲突,而且,与现有的顺序挖掘法和其他方法相比,具有更高的查找效率,占用的存储空间也不会随着冲突的增加而增大。
Description
技术领域
本发明涉及利用哈希(HASH)表进行数据管理的技术领域,尤其涉及一种HASH表操作方法及装置。
背景技术
HASH表是应用得非常广泛的数据结构,它解决了在有限程序空间内容纳总数有限,但索引取值范围非常大的数据项的设计要求。以IPv4版本的核心路由器的设计为例,对采用HASH表进行数据索引的方法进行说明,该方法包括:
a、分配存储空间,预先存储256K个路由表项,这些表项的其索引值为0~256K-1;
b、采用HASH算法,将32bit的网际协议(IP)地址转换为18bit的HASH索引值;
c、使用HASH索引值,从步骤a中分配的空间里面检索到对应的路由表项。
可以看出,在上述分配的存储空间中可以存储256K个有效路由表项,而不必使用42亿个路由表项空间来存储仅仅256K个有效路由表项。但是在上述的设计中,显然存在重大缺陷,即:步骤b的HASH转换是“多对一”的,而不是一一映射,按平均计算的话有多达64K个IP地址经过转换之后将得到相同的HASH索引值,这时,步骤c查到的路由表项可能并非希望得到的路由表项,这种现象称之为“HASH冲突”。
一种解决HASH冲突的方法,包括:
在步骤b中,将32bit的IP地址转换为18bit的HASH索引值的同时,在每个路由表项中存储未经HASH算法转换的IP地址;
在步骤c检索到相应的路由表项后,将该路由表项中的IP地址与本次索引所用的IP地址对比,如果相同,查找结束;否则读取并查找相邻的下一个路由表项,再次重复IP地址的比对过程,如此循环,直至找到匹配的路由表项。图1是执行该方法的示意图,该方法称为顺序挖掘法,其中,各表项从低端到高端进行排列,当需要增加额外的表项时,将从已有表项的最高端向后增加额外表项,并对额外表项也进行从低端到高端的排列。解决HASH冲突的其他方法还有结合链表的顺序挖掘法、跳跃挖掘法等等,这里不再逐一说明。
采用顺序挖掘法解决HASH冲突,不仅降低数据查找的效率,而且由于顺序挖掘法只能向一个方向挖掘,一旦在该方向的末端出现冲突或者整个HASH表中存在较多冲突,则只能通过增加存储空间来解决冲突,从而导致存储空间随着冲突的增加而增大。
发明内容
有鉴于此,本发明解决的技术问题是提供一种HASH表操作方法及装置,不仅可以解决HASH表查找中的HASH冲突,而且与现有的顺序挖掘法相比,本发明具有更高的查找效率。
为此,本发明提供的技术方案如下:
一种HASH表操作方法,包括:
根据HASH索引值检索索引字段所对应的表项;
检索到相应的表项后,从索引当前的位置读取N个表项,N为大于1的整数;
当所述N个表项中不存在与索引字段匹配的目标数据时,则继续从索引当前的位置读取N个表项,直至查找到与索引字段匹配的目标数据为止。
其中,检索到相应的表项后,根据索引当前的位置确定表项的读取方向,在所述读取方向读取连续N个表项。
其中,在索引当前的位置大于表项空间的一半时,向表项的低端读取表项;否则,向表项的高端读取表项。
其中,按下述步骤建立表项:
将目标数据中的索引字段转换为HASH索引值,将相应的目标数据和所述索引字段存储在该索引值对应的当前表项中;
当前表项已被占用时,判断所述索引值是否大于表项空间的一半;
所述索引值大于表项空间的一半时,从该索引值向表项的低端存储相应的目标数据和所述索引字段;
所述索引值不大于表项空间的一半时,从该索引值向表项的高端存储相应的目标数据和所述索引字段。
其中,从索引当前的位置向表项的高端或低端读取连续N个表项。
其中,进一步包括:当读取到表项的最高端或最低端时,回绕到表项的最低端或最高端,继续读取表项。
其中,按下述步骤建立表项:
将目标数据中的索引字段转换为HASH索引值,将相应的目标数据和所述索引字段存储在该索引值对应的当前表项中;
当前表项已被占用时,从该索引值向表项的高端或低端存储相应的目标数据和所述索引字段;
当索引指向的位置到达表项的最高端或最低端时,将索引指向的位置回绕到表项的最低端或最高端。
其中,所述索引字段包括:网际协议IP地址、介质接入控制MAC地址、或具有使用规律可用于索引获取其他信息的编码。
基于上述方法,本发明还提出一种HASH表操作装置,包括:检索单元、表项读取单元和查询单元;
所述检索单元用于根据HASH索引值检索索引字段所对应的表项,在检索到相应的表项后触发表项读取单元读取表项;
所述表项读取单元用于根据检索单元或查询单元的触发,从索引当前的位置读取N个表项,N为大于1的整数;
所述查询单元用于查询表项读取单元读取的N个表项中是否存在与索引字段匹配的目标数据,如果不存在,则触发表项读取单元继续读取表项。
其中,所述表项读取单元包括:
定向单元,用于在检索单元触发时,根据索引当前的位置确定表项的读取方向;
读取单元,用于在定向单元所确定的方向读取连续N个表项。
其中,所述定向单元在检索单元触发时,判断索引当前的位置是否大于表项空间的一半;在索引当前的位置大于表项空间的一半时,确定表项的低端为读取方向;否则,确定表项的高端为读取方向。
其中,还包括:
第一转换建立单元,用于将目标数据中的索引字段转换为HASH索引值,将相应的目标数据和所述索引数据存储在该索引值对应的当前表项中;
判断单元,用于在当前表项已被占用时,判断所述索引值是否大于表项空间的一半;
第一表项建立单元,用于在所述索引值大于表项空间的一半时,从该索引值向表项的低端存储相应的目标数据和所述索引数据;在所述索引值不大于表项空间的一半时,从该索引值向表项的高端存储相应的目标数据和所述索引数据。
其中,所述表项读取单元从索引当前的位置向表项的高端或低端读取连续N个表项,当读取到表项的最高端或最低端时,回绕到表项的最低端或最高端,继续读取表项。
其中,还包括:
回绕单元,用于在表项读取单元读取到表项的最高端或最低端时,通知表项读取单元回绕到表项的最低端或最高端继续读取表项。
其中,还包括:
第二转换建立单元,用于将目标数据中的索引字段转换为HASH索引值,将相应的目标数据和所述索引字段存储在该索引值对应的当前表项中;
第二表项建立单元,用于在当前表项已被占用时,从该索引值向表项的高端或低端存储相应的目标数据和所述索引字段;当索引指向的位置到达表项的最高端或最低端时,将索引指向的位置回绕到表项的最低端或最高端。
其中,所述索引字段包括:网际协议IP地址、介质接入控制MAC地址、或具有使用规律可用于索引获取其他信息的编码。
由于在本发明中,根据HASH索引值检索到索引字段所对应的表项后,一次性从索引当前的位置读取N个表项(N为大于1的整数),从而在出现HASH冲突时有效降低了访问外部存储单元的次数,提高了HASH表的查找效率。而且,N个相关的表项在地址上相邻,只需要发出一个起始地址以及N个表项的大小之和,就可以一次性将这N个表项读入,其速度远高于逐一读入单个表项。这些都是现有的顺序挖掘法和其他方法所不具备的优点。
可以看出,采用本发明提供的HASH表操作方法及装置,不仅能够解决数据查找中的HASH冲突,而且,与现有的顺序挖掘法和其他方法相比本发明具有更高的查找效率,占用的存储空间也不会随着冲突的增加而增大。
附图说明
图1是执行现有的顺序挖掘法的示意图;
图2是本发明方法实施例1的流程图;
图3是本发明方法实施例2的流程图;
图4是实施本发明实施例2的示意图;
图5是本发明提供的装置的示意图。
具体实施方式
在对本发明的技术方案进行说明之前,需要对现有解决HASH冲突的方法进行分析,以获知影响该方法效率的因素在哪里。
前面已经介绍过,采用HASH表进行数据索引的方法包括:
a、分配存储空间,预先存储256K个表项,这些表项的其索引值为0~256K-1;
b、采用HASH算法,将32bit的IP地址转换为18bit的HASH索引值;
c、使用HASH索引值,从步骤a中分配的空间里面检索到对应的表项。
其中,步骤a是在数据查找之前完成的,不影响查找效率,后期对HASH表的修改相对于查找次数来说也是很少的,所以步骤a不影响数据查找的效率。步骤b的IP地址到HASH索引值的转换是无法避免的,而且好的HASH转换算法将会大大减少冲突概率,因此付出代价是值得的,况且这种转换一般都能在中央处理单元(CPU)内部完成,不需要与外设交互,对性能的影响不大。步骤c的查找需要访问外部存储设备,CPU对外部存储设备的访问需要先向外部存储设备读取表项的起始地址和表项的大小,然后从外部存储设备中将表项数据读入CPU,整个过程需要多次总线操作。此外,两次访问之间还会有延时,使得操作更加缓慢。可以看出,CPU对外部存储设备的访问,其本身就是慢速过程,如果出现冲突,则需要多次访问外部存储设备,数据查找的效率将会明显的降低。
通过上述分析可知,可以通过减少对外部存储设备的访问,提高HASH表查找的效率。
本发明的核心思想在于,将目标数据中的索引字段转换为HASH索引值,根据HASH索引值建立相应的表项;根据HASH索引值检索索引字段所对应的表项;检索到相应的表项后,从索引当前的位置读取N个表项,N为大于1的整数;当所述N个表项中不存在与索引字段匹配的目标数据时,则继续从索引当前的位置读取N个表项,直至查找到与索引字段匹配的目标数据为止。
下面结合实施例1,对本发明所提供的HASH表操作方法做具体说明,图2是实施例1的流程图。
在步骤201中,分配表项空间,设置每次读取的表项的个数N。
在步骤202中,采用HASH算法,将IP地址转换为HASH索引值,并在每个表项中存储未经HASH算法转换的IP地址。
其中,在将IP地址转换为HASH索引值后,将相应的数据和所述IP地址存储在该索引值对应的当前表项中,以建立表项;如果当前表项已经被占用,则判断该索引值是否大于表项空间的一半;
所述索引值如果大于表项空间的一半,则从该索引值向表项的低端,即在当前表项的前一个表项,存储相应的数据和所述IP地址;如果前一个表项也已经被占用,则再向表项的低端查找,直至找到未被占用的低端表项,在该低端表项存储相应的数据和所述IP地址,即建立表项;
所述索引值如果不大于表项空间的一半,则从该索引值向表项的高端,即在当前表项的后一个表项,存储相应的数据和所述IP地址;如果后一个表项也已经被占用,则再向表项的高端查找,直至找到未被占用的高端表项,建立表项。
在步骤203中,针对某个IP地址,使用HASH索引值,从步骤201中分配的空间里面检索到该IP地址所对应的表项。
在步骤204中,判断索引当前指向的位置是否大于表项空间的一半,如果大于,则执行步骤205;否则,执行步骤206。
在步骤205中,从索引当前指向的位置,一次性向表项的低端读取连续N个表项,执行步骤207。
在步骤206中,从索引当前指向的位置,一次性向表项的高端读取连续N个表项,执行步骤207。
在步骤205或步骤206中,假设索引当前指向的位置为M,当从M向表项的低端或表项的高端读取连续N个表项后,索引当前指向的位置也将相应地修改为M-N或M+N。
在步骤207中,将各表项中的IP地址与本次索引所用的IP地址进行比对,以获知各表项中是否存在与本次索引所用的IP地址相同的IP地址。
当各表项中存在与本次索引所用的IP地址相同的IP地址时,表示存在与索引用的IP地址匹配的表项,即,存在与索引用的IP地址匹配的目标数据,此时,在步骤208中,结束本次查找过程。
当各表项中不存在与本次索引所用的IP地址相同的IP地址时,表示不存在与索引用的IP地址匹配的表项,即,不存在与索引用的IP地址匹配的目标数据,此时,在步骤209中,从索引当前指向的位置,继续向原方向一次性读取连续N个表项,执行步骤207。
可以看出,为减少对外部存储设备的访问,实施例1所述的方法采用一次性从外部存储设备中读取若干个表项的方法,避免了出现冲突时产生大量的外存访问。而且,若干个相关的表项在地址上相邻,只需要发出一个起始地址以及若干个表项的大小之和,就可以一次性将这几个表项读入CPU,其速度远高于逐个读入单个表项。这些都是现有的顺序挖掘法和其他方法所不具备的优点。
另外,在实施例1中,将表项空间平均分为两部分。在HASH索引值大于表项空间的一半时,从高端向低端读取表项;在HASH索引值小于或等于表项空间的一半时,从低端向高端读取表项。这样,外部存储设备总的存储空间不会随着冲突的增加而增加,而且降低了外部存储设备的管理难度,该优点对于嵌入式系统的设计是非常有利的。
在实施例1中,假设需要容纳256K个表项,而为实现能从表项的高、低端相向查找,则至少要分配512K的表项空间。这是因为冲突有可能集中在256K-1的位置,以致整个表项空间的低端完全空白,而高端全部占用,或者反之。粗略看来,采用本发明实施例1所述的方法与现有的顺序挖掘法和其他方法相比,没有任何节省外部存储设备的存储空间的优势。
实际上,为减少HASH冲突的概率,无论采取何种算法,出现大量冲突之后必然会导致效率的降低,因此所有的实际应用设计中都会为HASH表预留比较大的空间,否则将会随着实际有效表项的不断增加性能急剧恶化。
例如,为容纳256K实际有效的表项,总表项的存储空间会设计成1M表项甚至更大。在这种情况下,采用本发明实施例1所述的方法,总表项的存储空间只需要占用1M的表项空间,而现有的方法则需要占用1M+256K的表项空间。在现有的方法中,额外占用的表项空间是绝对的,无论总表项空间扩展到多大,都还需要占用额外的表项空间。而且,额外占用表项空间也增加了存储器管理(指针、数组)的复杂程度。
通过上述分析可以看出,采用本发明实施例1所述的方法,在外部存储设备的存储空间占用和存储管理等方面也有明显的优势。
实施例1虽然是以IPv4版本的核心路由器设计为例进行说明的,但本领域技术人员可以很明显地看出,本发明不局限于实施例1中的核心路由器设计,还能应用于其他的应用场合,这里不再重复举例说明。
本发明还提出另一种HASH表的操作方法。下面,结合实施例2对该方法做具体说明,图3是实施例2的流程图。
在步骤301中,分配表项空间,并设置每次读取的表项的个数N。
在步骤302中,采用HASH算法,将IP地址转换为HASH索引值,并在每个表项中存储未经HASH算法转换的IP地址。
其中,在将IP地址转换为HASH索引值后,将相应的数据和所述IP地址存储在该索引值对应的当前表项中;如果当前表项已经被占用,则从该索引值向表项的低端,即在当前表项的前一个表项,存储相应的数据和所述IP地址;如果前一个表项也已经被占用,则再向表项的低端查找,直至找到未被占用的低端表项,在该低端表项存储相应的数据和所述IP地址,即建立表项;当索引指向的位置到达表项的最低端时,将索引指向的位置回绕到表项的最高端,从而形成环形的存储方式。
或者,在将IP地址转换为HASH索引值后,如果该索引值对应的当前表项已经被占用,则从该索引值向表项的高端,即在当前表项的后一个表项,存储相应的数据和所述IP地址;如果后一个表项也已经被占用,则再向表项的高端查找,直至找到未被占用的高端表项,建立表项;当索引指向的位置到达表项的最高端时,将索引指向的位置回绕到表项的最低端,从而形成环形的存储方式。
在步骤303中,针对某个IP地址,使用HASH索引值,从步骤301中分配的表项空间里面检索到该IP地址所对应的表项。
在步骤304中,从索引当前指向的位置,一次性向表项的高端读取连续N个表项。
当索引指向的位置到达表项的最高端时,将索引指向的位置回绕到表项的最低端,从而形成环形的查找方式。
其中,假设索引当前指向的位置为M,当从M向表项的高端读取连续N个表项后,索引当前指向的位置也将相应地修改为M+N。
在步骤305中,将各表项中的IP地址与本次索引所用的IP地址进行比对,以获知各表项中是否存在与本次索引所用的IP地址相同的IP地址。
当各表项中存在与本次索引所用的IP地址相同的IP地址时,表示存在与索引用的IP地址匹配的表项,即,存在与索引用的IP地址匹配的目标数据,此时,在步骤306中,结束本次查找过程。
当各表项中不存在与本次索引所用的IP地址相同的IP地址时,表示不存在与索引用的IP地址匹配的表项,即,不存在与索引用的IP地址匹配的目标数据,此时,执行步骤304。
图4是执行实施例2所述方法的示意图。
可以看出,为减少对外部存储设备的访问,实施例2仍然采用一次性从外部存储设备中读取若干个表项的方法,避免了出现冲突时产生大量的外存访问。
在实施例2所述的方法中,采用了环形回绕的方式查找表项,假设需要存储256K个表项,则只要分配256K个表项空间即可。与实施例1中采用从高、低端相向查找表项的方式相比,采用环形回绕的方式查找表项,其好处在于,可以进一步节省外部存储设备的存储空间。
本领域技术人员可以看出,虽然在实施例2所述的方法中,采用从低端向高端读取表项的方式,实际上,也可以采用从高端向低端读取表项的方式,这里不再重复举例说明。
基于上述HASH表操作方法,本发明还提供相应的HASH表操作装置,图5是该装置的示意图,该装置包括:检索单元51、表项读取单元52、查询单元53。其中,表项读取单元52包括定向单元521和读取单元522。该装置还可以包括:转换建立单元541、判断单元542和表项建立单元543。
表项空间由装置外部的存储单元提供,利用转换建立单元541,可以将索引数据转换为HASH索引值,将相应的目标数据和所述索引数据存储在该索引值对应的当前表项中。
如果当前表项已经被占用,则利用判断单元542判断所述索引值是否大于表项空间的一半。
所述索引值如果大于表项空间的一半,则表项建立单元543将从该索引值向表项的低端,即在当前表项的前一个表项,存储相应的数据和所述索引IP地址;如果前一个表项也已经被占用,则再向表项的低端查找,直至找到未被占用的低端表项,在该低端表项存储相应的数据和所述IP地址,即建立表项;
所述索引值如果不大于表项空间的一半,则表项建立单元543将从该索引值向表项的高端存储相应的数据和所述IP地址;如果后一个表项也已经被占用,则再向表项的高端查找,直至找到未被占用的高端表项,建立表项。
当需要检索某个IP地址所对应的表项时,检索单元51可以根据该IP地址,采用HASH索引值,在所述表项空间中检索该IP地址所对应的表项。检索单元51检索到该IP地址所对应的表项后,将触发表项读取单元52从所述表项空间中读取表项。
表项读取单元52受到检索单元51或查询单元53的触发后,将在所述表项空间中从索引当前的位置读取N个表项,N为大于1的整数。
受到检索单元51的触发读取表项时,表项读取单元52中的定向单元521,将根据索引当前的位置确定表项的读取方向;读取单元522,将在定向单元521所确定的方向读取连续N个表项。
其中,在检索单元触发时,定向单元522将判断索引当前的位置是否大于所述表项空间的一半;在索引当前的位置大于所述表项空间的一半时,确定表项的低端为读取方向;否则,确定表项的高端为读取方向。
定向单元521确定表项的读取方向后,读取单元522将按确定的方向,从索引当前指向的位置向表项的高端或低端一次性读取连续N个表项;读取单元522受到查询单元53的触发后,仍然按定向单元521确定的方向,从索引当前指向的位置向表项的高端或低端一次性读取连续N个表项。
这里需要指出的是,假设索引当前指向的位置为M,当从M向表项的低端或高端读取连续N个表项后,索引当前指向的位置也将相应地修改为M-N或M+N。
查询单元53用于查询表项读取单元52读取的N个表项中是否存在与所述IP地址相同的IP地址,如果不存在,则触发表项读取单元52中的读取单元522继续从所述表项空间中读取表项;否则,结束本次HASH表查找,不触发表项读取单元52。
可以看出,为减少对外部存储设备的访问,图5所示的装置采用一次性从外部存储设备中读取若干个表项的方法,避免了出现冲突时产生大量的外存访问。而且,若干个相关的表项在地址上相邻,只需要发出一个起始地址以及若干个表项的大小之和,就可以一次性将这几个表项读入装置,其速度远高于逐个读入单个表项。这些都是现有的顺序挖掘法和其他方法所不具备的优点。
另外,在图5所示的装置中,将表项空间平均分为两部分。在HASH索引值大于表项空间的一半时,从高端向低端读取表项;在HASH索引值小于或等于表项空间的一半时,从低端向高端读取表项。这样,外部存储设备总的存储空间不会随着冲突的增加而增加,而且降低了外部存储设备的管理难度,该优点对于嵌入式系统的设计是非常有利的。
在图5所示的装置中,假设需要容纳256K个表项,而为实现能从表项的高、低端相向查找,则至少要提供512K的表项空间。这是因为冲突有可能集中在256K-1的位置,以致整个表项空间的低端完全空白,而高端全部占用,或者反之。粗略看来,采用图5所示的装置没有任何节省外部存储设备的存储空间的优势。
实际上,为减少HASH冲突的概率,无论采取何种算法,出现大量冲突之后必然会导致效率的降低,因此所有的实际应用设计中都会为HASH表预留比较大的空间,否则将会随着实际有效表项的不断增加性能急剧恶化。
例如,为容纳256K实际有效的表项,总表项的存储空间会设计成1M表项甚至更大。在这种情况下,采用本发明图5所示的装置,总表项的存储空间只需要占用1M的表项空间,而现有的方法则需要占用1M+256K的表项空间。在现有的方法中,额外占用的表项空间是绝对的,无论总表项空间扩展到多大,都还需要占用额外的表项空间。而且,额外占用表项空间也增加了存储器管理(指针、数组)的复杂程度。
通过上述分析可以看出,采用本发明图5所示的装置,在外部存储单元的存储空间占用和存储管理等方面也有明显的优势。
与图5所示的装置中,表项读取单元52利用定向单元521和读取单元522实现从高、低端相向的方式查找表项。在实际应用中,表项读取单元52也可以采用其他方式查找表项。
例如,表项读取单元52在受到检索单元51或查询单元53的触发后,可以从索引当前的位置直接向表项的高端或低端读取连续N个表项。此时,所述装置还可以包括一个回绕单元,用于在表项读取单元52读取到表项的最高端或最低端时,通知表项读取单元52回绕到表项的最低端或最高端继续读取表项。
采用了环形回绕的方式查找表项,假设需要存储256K个表项,则只要分配256K个表项空间即可。与采用从高、低端相向查找表项的方式相比,采用环形回绕的方式查找表项,其好处在于,可以进一步节省外部存储单元的存储空间。
采用了环形回绕的方式查找表项,也需要相应地采用环形回绕的方式建立表项,此时,图5所示装置中的转换建立单元541、判断单元542和表项建立单元543将被转换建立单元和表项建立单元取代。
转换建立单元用于将索引数据转换为HASH索引值,将相应的目标数据和所述索引数据存储在该索引值对应的当前表项中。
当前表项如果已经被占用,则表项建立单元从该索引值向表项的高端或低端存储相应的数据和所述IP地址;当索引指向的位置到达表项的最高端或最低端时,将索引指向的位置回绕到表项的最低端或最高端。
还需要说明的是,虽然前述实施例中都以IP地址为例,但是HASH表查找在很多技术领域中都得到应用,比如三层的IP地址、二层的介质接入控制(MAC)地址,甚至还包括身份证号、书刊文件编号、货物条码号等各种具体应用中所使用的有规律的、可用于索引获取其他信息的编码。只要采用HASH表进行查找,都可以采用本发明提供的方法及装置。
以上所述的实施例仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (16)
1. 一种哈希HASH表操作方法,其特征在于,包括:
根据HASH索引值检索索引字段所对应的表项;
检索到相应的表项后,从索引当前的位置读取N个表项,N为大于1的整数;
当所述N个表项中不存在与索引字段匹配的目标数据时,则继续从索引当前的位置读取N个表项,直至查找到与索引字段匹配的目标数据为止。
2. 如权利要求1所述的HASH表操作方法,其特征在于,检索到相应的表项后,根据索引当前的位置确定表项的读取方向,在所述读取方向读取连续N个表项。
3. 如权利要求2所述的HASH表操作方法,其特征在于,在索引当前的位置大于表项空间的一半时,向表项的低端读取表项;否则,向表项的高端读取表项。
4. 如权利要求3所述的HASH表操作方法,其特征在于,按下述步骤建立表项:
将目标数据中的索引字段转换为HASH索引值,将相应的目标数据和所述索引字段存储在该索引值对应的当前表项中;
当前表项已被占用时,判断所述索引值是否大于表项空间的一半;
所述索引值大于表项空间的一半时,从该索引值向表项的低端存储相应的目标数据和所述索引字段;
所述索引值不大于表项空间的一半时,从该索引值向表项的高端存储相应的目标数据和所述索引字段。
5. 如权利要求1所述的HASH表操作方法,其特征在于,从索引当前的位置向表项的高端或低端读取连续N个表项。
6. 如权利要求5所述的HASH表操作方法,其特征在于,进一步包括:当读取到表项的最高端或最低端时,回绕到表项的最低端或最高端,继续读取表项。
7. 如权利要求6所述的HASH表操作方法,其特征在于,按下述步骤建立表项:
将目标数据中的索引字段转换为HASH索引值,将相应的目标数据和所述索引字段存储在该索引值对应的当前表项中;
当前表项已被占用时,从该索引值向表项的高端或低端存储相应的目标数据和所述索引字段;
当索引指向的位置到达表项的最高端或最低端时,将索引指向的位置回绕到表项的最低端或最高端。
8. 如权利要求1至7任意一项所述的HASH表操作方法,其特征在于,所述索引字段包括:网际协议IP地址、介质接入控制MAC地址、或具有使用规律可用于索引获取其他信息的编码。
9. 一种HASH表操作装置,其特征在于,包括:检索单元、表项读取单元和查询单元;
所述检索单元用于根据HASH索引值检索索引字段所对应的表项,在检索到相应的表项后触发表项读取单元读取表项;
所述表项读取单元用于根据检索单元或查询单元的触发,从索引当前的位置读取N个表项,N为大于1的整数;
所述查询单元用于查询表项读取单元读取的N个表项中是否存在与索引字段匹配的目标数据,如果不存在,则触发表项读取单元继续读取表项。
10. 如权利要求9所述的HASH表操作装置,其特征在于,所述表项读取单元包括:
定向单元,用于在检索单元触发时,根据索引当前的位置确定表项的读取方向;
读取单元,用于在定向单元所确定的方向读取连续N个表项。
11. 如权利要求10所述的HASH表操作装置,其特征在于,所述定向单元在检索单元触发时,判断索引当前的位置是否大于表项空间的一半;在索引当前的位置大于表项空间的一半时,确定表项的低端为读取方向;否则,确定表项的高端为读取方向。
12. 如权利要求11所述的HASH表操作装置,其特征在于,还包括:
第一转换建立单元,用于将目标数据中的索引字段转换为HASH索引值,将相应的目标数据和所述索引数据存储在该索引值对应的当前表项中;
判断单元,用于在当前表项已被占用时,判断所述索引值是否大于表项空间的一半;
第一表项建立单元,用于在所述索引值大于表项空间的一半时,从该索引值向表项的低端存储相应的目标数据和所述索引数据;在所述索引值不大于表项空间的一半时,从该索引值向表项的高端存储相应的目标数据和所述索引数据。
13. 如权利要求9所述的HASH表操作装置,其特征在于,所述表项读取单元从索引当前的位置向表项的高端或低端读取连续N个表项,当读取到表项的最高端或最低端时,回绕到表项的最低端或最高端,继续读取表项。
14. 如权利要求13所述的HASH表操作装置,其特征在于,还包括:
回绕单元,用于在表项读取单元读取到表项的最高端或最低端时,通知表项读取单元回绕到表项的最低端或最高端继续读取表项。
15. 如权利要求14所述的HASH表操作装置,其特征在于,还包括:
第二转换建立单元,用于将目标数据中的索引字段转换为HASH索引值,将相应的目标数据和所述索引字段存储在该索引值对应的当前表项中;
第二表项建立单元,用于在当前表项已被占用时,从该索引值向表项的高端或低端存储相应的目标数据和所述索引字段;当索引指向的位置到达表项的最高端或最低端时,将索引指向的位置回绕到表项的最低端或最高端。
16. 如权利要求9至15任意一项所述的HASH表操作装置,其特征在于,所述索引字段包括:网际协议IP地址、介质接入控制MAC地址、或具有使用规律可用于索引获取其他信息的编码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007100643684A CN101267381B (zh) | 2007-03-13 | 2007-03-13 | 哈希表操作方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007100643684A CN101267381B (zh) | 2007-03-13 | 2007-03-13 | 哈希表操作方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101267381A true CN101267381A (zh) | 2008-09-17 |
CN101267381B CN101267381B (zh) | 2010-12-29 |
Family
ID=39989525
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007100643684A Active CN101267381B (zh) | 2007-03-13 | 2007-03-13 | 哈希表操作方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101267381B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101540723B (zh) * | 2009-04-20 | 2011-07-06 | 杭州华三通信技术有限公司 | 一种流表查找方法和装置 |
CN103425725A (zh) * | 2012-05-20 | 2013-12-04 | 国际商业机器公司 | 散列冲突降低系统 |
CN105320775A (zh) * | 2015-11-11 | 2016-02-10 | 中科曙光信息技术无锡有限公司 | 数据的存取方法和装置 |
CN105912679A (zh) * | 2016-04-13 | 2016-08-31 | 广州华多网络科技有限公司 | 一种数据查询的方法和装置 |
CN106547755A (zh) * | 2015-09-17 | 2017-03-29 | 北京国双科技有限公司 | 一种基于片键的数据处理方法及装置 |
CN106878185A (zh) * | 2017-04-13 | 2017-06-20 | 济南浪潮高新科技投资发展有限公司 | 一种报文ip地址匹配电路及方法 |
WO2018120109A1 (zh) * | 2016-12-30 | 2018-07-05 | 华为技术有限公司 | 数据处理的方法和装置 |
CN109947762A (zh) * | 2017-08-16 | 2019-06-28 | 深圳市中兴微电子技术有限公司 | 一种哈希表管理方法及装置、计算机可读存储介质 |
CN112193278A (zh) * | 2019-07-08 | 2021-01-08 | 中车唐山机车车辆有限公司 | 列车网络管理系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1184775C (zh) * | 2002-02-07 | 2005-01-12 | 华为技术有限公司 | 多哈希函数的虚通道标识/虚通路标识的查找方法 |
CN1319325C (zh) * | 2003-04-16 | 2007-05-30 | 华为技术有限公司 | 一种采用哈希链表查找路由表项的方法 |
CN1912870A (zh) * | 2006-09-05 | 2007-02-14 | 四川南山之桥微电子有限公司 | 一种哈希表查表方法 |
-
2007
- 2007-03-13 CN CN2007100643684A patent/CN101267381B/zh active Active
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101540723B (zh) * | 2009-04-20 | 2011-07-06 | 杭州华三通信技术有限公司 | 一种流表查找方法和装置 |
CN103425725A (zh) * | 2012-05-20 | 2013-12-04 | 国际商业机器公司 | 散列冲突降低系统 |
CN103425725B (zh) * | 2012-05-20 | 2017-04-12 | 国际商业机器公司 | 散列冲突降低系统 |
CN106547755A (zh) * | 2015-09-17 | 2017-03-29 | 北京国双科技有限公司 | 一种基于片键的数据处理方法及装置 |
CN105320775A (zh) * | 2015-11-11 | 2016-02-10 | 中科曙光信息技术无锡有限公司 | 数据的存取方法和装置 |
CN105320775B (zh) * | 2015-11-11 | 2019-05-14 | 中科曙光信息技术无锡有限公司 | 数据的存取方法和装置 |
CN105912679A (zh) * | 2016-04-13 | 2016-08-31 | 广州华多网络科技有限公司 | 一种数据查询的方法和装置 |
WO2018120109A1 (zh) * | 2016-12-30 | 2018-07-05 | 华为技术有限公司 | 数据处理的方法和装置 |
CN106878185A (zh) * | 2017-04-13 | 2017-06-20 | 济南浪潮高新科技投资发展有限公司 | 一种报文ip地址匹配电路及方法 |
CN106878185B (zh) * | 2017-04-13 | 2020-04-07 | 浪潮集团有限公司 | 一种报文ip地址匹配电路及方法 |
CN109947762A (zh) * | 2017-08-16 | 2019-06-28 | 深圳市中兴微电子技术有限公司 | 一种哈希表管理方法及装置、计算机可读存储介质 |
CN112193278A (zh) * | 2019-07-08 | 2021-01-08 | 中车唐山机车车辆有限公司 | 列车网络管理系统 |
Also Published As
Publication number | Publication date |
---|---|
CN101267381B (zh) | 2010-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101267381B (zh) | 哈希表操作方法及装置 | |
CN100498767C (zh) | 高性能散列系统 | |
CN101141389B (zh) | 增强多位Trie树查找方法和装置 | |
CN100470550C (zh) | 一种信息存储的方法、信息查找的方法及引擎装置 | |
CN101577662B (zh) | 一种基于树形数据结构的最长前缀匹配方法和装置 | |
CN100432959C (zh) | 压缩高速缓存内数据的机制 | |
US7809701B2 (en) | Method and system for performing exact match searches using multiple hash tables | |
US7953077B2 (en) | Network processor with single interface supporting tree search engine and CAM | |
US9262500B2 (en) | Memory system including key-value store | |
CN102035727B (zh) | 一种路由的处理方法和设备 | |
CN106326475B (zh) | 一种高效的静态哈希表实现方法及系统 | |
US20030037055A1 (en) | Large database search using CAM and hash | |
US20080281773A1 (en) | Data storage method and data storage structure | |
US20040015494A1 (en) | Multi-bit patricia trees | |
KR102316271B1 (ko) | 데이터 저장장치의 주소 맵핑 테이블 운용 방법 | |
US20140358886A1 (en) | Internal search engines architecture | |
CN102622434A (zh) | 数据存储方法、查找方法及装置 | |
US11782895B2 (en) | Cuckoo hashing including accessing hash tables using affinity table | |
CN103778120A (zh) | 全局文件标识生成方法、生成装置及相应的分布式文件系统 | |
CN113392040B (zh) | 一种地址映射方法、装置、设备 | |
CN100487697C (zh) | 一种应用改进的哈希方法进行查找的方法 | |
CN102662631B (zh) | 间接分支指令处理方法和装置 | |
CN101622790B (zh) | 用于压缩程序指令的压缩条目最优选择的方法和系统 | |
Abu-Ghazaleh et al. | Performance of Dynamically Resizing Message Fields for Differential Serialization of SOAP Messages. | |
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 |