CN100487697C - 一种应用改进的哈希方法进行查找的方法 - Google Patents
一种应用改进的哈希方法进行查找的方法 Download PDFInfo
- Publication number
- CN100487697C CN100487697C CNB2006100084483A CN200610008448A CN100487697C CN 100487697 C CN100487697 C CN 100487697C CN B2006100084483 A CNB2006100084483 A CN B2006100084483A CN 200610008448 A CN200610008448 A CN 200610008448A CN 100487697 C CN100487697 C CN 100487697C
- Authority
- CN
- China
- Prior art keywords
- key
- page
- subclauses
- hash
- clauses
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明旨在提供应用改进哈希方法进行查找的方法,涉及网络通讯领域。所述方法包括以下步骤:对关键码进行哈希操作得到关键码在哈希关键码表中对应的一个关键码页面地址;根据关键码页面地址读取关键码页面;在当前关键码页面中查找一个关键码条目的关键码等于查找用的关键码,如果找到了匹配的关键码条目,根据匹配到的关键码条目的结果指针读取实际存储条目。本发明克服了现有技术访问内存次数变化大的缺点,对于解决语音、图像等信息在网络中传送的“抖动”问题十分有利,同时也提高了内存的利用效率。
Description
技术领域
本发明涉及使用HASH(哈希)技术的计算机领域,尤其涉及使用HASH技术的网络通信领域。
背景技术
HASH方法是在计算机领域进行信息检索和存储的一种常用方法,常用的HASH方法有直接定址法、数字分析法、除留余数法和乘余取整法等。
HASH方法在表项的存储位置与它的关键码(KEY)之间建立一个确定的对应函数关系Hash(),使得每个关键码与结构中的一个唯一的存储位置相对应(Address=Hash(Rec.key))。在HASH方法中使用的转换函数叫做HASH函数,而按此种方法构造出来的表或者结构就叫做HASH表。
使用HASH方法进行查找不必进行多次关键码的比较,因此查找速度比较快,可以直接到达或逼近具有此关键码的表项的实际存放地址。在一些网络处理系统(如路由器系统等)中常常使用HASH方法来存储和检索对应的转发表信息。
一般来说,HASH函数是一个压缩映像函数。通常关键码集合比HASH表地址集合大的多,因此有可能经过HASH函数的计算,把不同的关键码映射到同一个HASH地址上,这就产生了HASH冲突,为此必须再找一个地址来存放冲突的表项,这就是如何解决冲突问题。
处理HASH冲突的一种常用解决办法是线性探查法。在线性探查法中,当发生HASH冲突时,从冲突表项对应的存储位置依次往后进行查找,直到找到一个为空的位置存放发生冲突的表项。线性探查法容易产生“堆积”问题,即不同探查序列的关键码占据了可利用的空桶,使得为寻找某一关键码需要经历不同的探查序列的元素,导致查找时间增加。
另一种常用的解决HASH冲突的方法是多HASH法。第一个HASH函数Hash1()按表项的关键码计算表项所在的存放位置H1=Hash1(),一旦发生冲突,利用不同于第一个HASH函数的第二个HASH函数Hash2()计算该表项的“下一个”存放位置。有可能某些关键码使用第二个HASH函数得到的存放位置也是相同的,此时需要继续使用第三个HASH函数Hash3()计算该表项的“下一个”存放位置。如此重复进行,直到所有的HASH冲突被解决为止。
相比其他很多解决HASH冲突的方法,多HASH法是比较简单,高效,而且适用于大多数应用的方法,但是多HASH法应用在网络通信领域存在一定的问题。在网络通讯应用中,“抖动”是和“时延“同等重要的一个参数,例如,声音和图像记录可以作为数据在因特网上进行传输,通过路由器由发送地转发到目的地。如果路由器设备使用多HASH法来定位数据报文的目的地和转发数据报文,大多数数据报文(70%~80%)可以通过一次内存访问定位目的地,但是,20%~30%的数据报文需要进行再一次内存访问,而且,有不少情况下还需要三次,四次甚至是五次对内存的访问,内存访问次数的不确定性极大地影响性能,将导致数据报文传送抖动太大,声音不连续,时断时续。
因此,需要一种改进的哈希方法及其应用,既具有比较高的查找性能,又对绝大多数的报文具有固定的查找次数以降低网络抖动,同时还需要具有较高的内存利用率。
发明内容
本发明所要解决的技术问题是:克服现有技术中存在的哈希方法需要访问的内存次数变化大的问题和缺陷,提供了应用改进哈希方法进行查找的方法。
一种应用改进哈希方法进行存储的方法,包括以下步骤:
步骤A:使用一个哈希函数对关键码进行哈希操作,得到关键码在哈希关键码表中对应的一个关键码页面地址,以及根据所述关键码页面地址读取关键码页面;
步骤B1:在当前关键码页面中寻找一个空闲的关键码记录条目;
步骤B2:如果找到了某个空闲关键码条目,将关键码写入,转步骤C;
步骤B3:如果没有找到可用的空闲关键码条目,检查下一个关键码页面指针是否为空,如果为空,转步骤B4,如果不为空转步骤B6;
步骤B4:分配一个新的关键码页面,将新关键码页面地址作为当前关键码页面的下一个关键码页面指针;
步骤B5:在新的关键码页面中寻找一个空闲的关键码记录条目,转步骤C;
步骤B6:根据下一个关键码页面指针读取下一个关键码页面,转步骤B1;
步骤C:在关键码条目中写入一个对应的结果指针,该指针和关键码对应,并指向实际存储条目。
一种应用改进哈希方法进行查找的方法,包括以下步骤:
步骤a:使用一个哈希函数对关键码进行哈希操作,得到关键码在哈希关键码表中对应的一个关键码页面地址;
步骤b:根据关键码页面地址读取关键码页面;
步骤c1:在当前关键码页面查找是否存在一个关键码条目的关键码等于查找用的关键码;
步骤c2:如果找到了匹配的关键码条目,转步骤d,否则转步骤c3;
步骤c3:检查当前关键码页面的下一个关键码页面指针是否为空,如果为空,查找失败,否则转步骤c4;
步骤c4:根据下一个关键码页面指针读取下一个关键码页面,转步骤c1;
步骤d:根据匹配到的关键码条目的结果指针读取实际存储条目。
有益效果:采用本发明方法,对于大多数情况下的HASH查找只需要两次内存访问,第一次内存访问为读取关键码页面,第二次内存访问为读取实际存储条目,与现有技术相比,克服了访问内存次数变化大的缺点,对于解决语音、图像等信息在网络中传送的“抖动”问题十分有利,同时也提高了内存的利用效率。
附图说明
图1是按照本发明方法进行存储和查找所需要的数据结构图;
图2是按照本发明方法进行存储的流程图;
图3是按照本发明方法进行查找的流程图。
具体实施方式
下面结合附图对技术方案的实施作进一步的详细描述。
如图1所示,本发明改进的HASH方法应用的数据结构包括:
HASH关键码表10:由一系列HASH关键码页面11构成的存储空间表。
关键码页面11:是存放一系列关键码等信息的一个存储块,包含一定数量的关键码条目12和指向下一个关键码页面的指针17,在本实施例中假设一个关键码页面11包含8个关键码条目。
关键码条目12:包含有效标志位13、关键码14和结果指针15。
有效标志位13:标识当前关键码条目是否有效,为0表示当前关键码条目无效,是一个空闲条目,为1标识当前关键码条目有效。
关键码14:存放的是关键码,用于和查找的关键码进行比较确定匹配条目。
结果指针15:指向该关键码对应的实际存储条目18。
有效标志位16:表示下一个关键码页面指针17是否有效,为0标识无效,为1标识有效。
下一个关键码页面指针17:如果当前关键码页面的所有关键码条目都被占用,有可能需要分配下一个关键码页面,此时将下一个关键码页面的地址作为当前关键码页面的“下一个关键码页面指针17”。
实际存储条目18:存放查找所需要的实际信息,比如转发信息等。
下一个关键码页面19:和关键码页面11一样,是存放一系列关键码等信息的一个存储块。
如图2所示,应用本发明进行信息存储,包括以下步骤:
步骤201:使用一个HASH函数对关键码进行HASH操作,得到关键码在HASH关键码表中对应的一个关键码页面地址;
步骤202:根据关键码页面地址,读取对应关键码页面内容;
步骤203:取当前关键码页面第一个关键码条目;
步骤204:判断当前关键码条目的有效标志位是否为0,如果为0,转步骤205,如果不为0,转步骤209;
步骤205:将匹配到的关键码条目的有效标志位设为1,表示有效;
步骤206:将查找用的关键码写入匹配到的关键码条目中;
步骤207:分配一片内存用于存放实际存储条目;
步骤208:将实际存储条目对应的内存地址写入匹配的关键码条目的结果指针域,转步骤216;
步骤209:判断当前关键码页面是否还存在下一个关键码条目,如果存在,转步骤210,如果不存在,转步骤211;
步骤210:取下一个关键码条目,转步骤204;
步骤211:判断当前关键码页面的下一个关键码页面指针是否为空,如果不为空,转步骤212,如果为空,转步骤213;
步骤212:根据下一个关键码页面指针读取下一个关键码页面内容,转步骤203;
步骤213:重新分配一个关键码页面内存块;
步骤214:将新关键码页面地址写入当前关键码页面的下一个关键码页面指针域;
步骤215:将新关键页面作为当前关键码页面,转步骤203;
步骤216:结束。
如图3所示,应用本发明进行信息查找,包括以下步骤:
步骤301:使用一个HASH函数对关键码进行HASH操作,得到关键码在HASH关键码表中对应的一个关键码页面地址;
步骤302:根据关键码页面地址,读取对应关键码页面内容;
步骤303:取当前关键码页面第一个关键码条目;
步骤304:判断当前关键码条目的有效标志位是否为1并且当前关键码条目的关键码和查找用的关键码相等,如果相等,转步骤305,如果不相等,转步骤306;
步骤305:根据当前关键码条目的结果指针读取实际存储条目结果内容,转步骤311;
步骤306:判断当前页面是否还有下一个关键码条目,如果有,转步骤307,如果没有,转步骤308;
步骤307:取下一个关键码条目,转步骤304;
步骤308:判断当前关键码页面的下一个关键码页面指针是否为空,如果为空,转步骤310,如果不为空,转步骤309;
步骤309:根据下一个关键码页面指针读取下一个关键码页面的内容,转步骤303;
步骤310:匹配失败;
步骤311:结束。
下面例子中假定一个IPV6转发表具有512,000个条目,分别采用现有的多HASH法和本发明的改进HASH方法来实现,从例子中可以看出本发明的内存利用率比常用的HASH方法内存利用率要高。
假设每个转发条目的关键码为128bits(16bytes),对应的实际存储条目信息大小和实际的应用相关,假定为32bytes。
现有的多HASH法实现:
为了性能要求,一个好的HASH函数通常要求第一次HASH命中率为70%~80%,假定为80%,那么第一级HASH表需要装载的关键码数目为409,600。
另外,由于进行HASH查找时,冲突非常高,而且不可预期,因此如果需要取得比较好的查找效率,通常都要求装载因子(实际占用的记录条目数/分配的最大记录条目数)为1/4。这样第一级HASH表需要分配的条目数为2,048,000。
剩余20%(102,400)的关键码需要使用第二级HASH函数进行再次HASH,按照前面的计算方法,第二级HASH表需要分配的条目数为(102,400*80%)/(1/5)=409,600。
再有20,480(102,400*20%)个关键码需要使用第三级HASH函数进行HASH,按照前面的计算方法,第三级HASH表需要分配的条目数为(20,480*80%)/(1/5)=81,920。
为了解决所有的HASH冲突,后面还需要第四级,第五级HASH函数等等,这样采用多HASH法至少需要的内存为:(2,048,000+409,600+81,920)*(16+32)bytes=1.22*108bytes。
本发明的改进HASH法实现:
正如前面所述,当第一次进行HASH运算发生冲突时,按照本发明,此时并不需要将该关键码再一次用另一个HASH函数运算以获取新的存储地址,而是将该关键码也放入第一次HASH运算得到的关键码页面中,只不过在该关键码页面另外寻找一个空闲的关键码条目行。
每个关键码页面可以存放多个关键码条目行,这对于内存空间的分配利用率非常有益。在通常的HASH方法中,由于冲突是无法进行预测的,为了使得降低冲突发生的概率,一个好的HASH方法通常要求装载因子(填充的条目数/分配的总条目数)为1/4,也就是说内存利用率只有20%。在本发明中,由于一个关键码页面可以存放多个关键码条目(本例中假设为8个),因此关键码页面的个数可以只为总关键码个数的1/4,这样可以使得装载因子达到70%~90%,而且进行2次内存查找(一次内存访问为读取关键码页面,另一次内存访问为根据匹配的关键码条目的结果指针读入实际存储条目信息)的命中率可以达到98%。
由此,第一级关键码页面数目只需要为128,000(1/4的关键码数目),需要重新分配下一个关键码页面(此时进行HASH查找时需要增加一次对内存的访问以将下一个关键码页面内容读入内存中)的数目为(512,000*2%)*(1/4)=2560。
当然可能还需要分配第三级的关键码页面,但是这样的比率只占总关键码数目的0.04%(2%*2%)。
考虑每个关键码条目有效标志位和结果指针总共取为18bits(3bytes),每个关键码页面包含8个关键码条目,每个关键码页面的下一个关键码页面指针也为18bits(3bytes),那么每个关键码页面的大小为:8*(3bytes+16btes)+3bytes=155bytes。
采用本发明需要的内存分为两部分:
实际存储条目需要内存:512,000*32bytes=0.16*108bytes
关键码页面需要内存:(128,000+2560)*155bytes=0.2*108bytes
总共需要内存为:0.16*108+0.2*108=0.36*108bytes<<1.22*108bytes
从上例可以看出,与传统HASH相比,本发明具有几个重要的特征和优点:本发明的查找方法使得查找一个关键码在绝大多数情况只需要2次内存访问,这对于使用HASH方法来进行查找的系统具有稳定的性能十分重要,使得系统不会发生抖动;另外,本发明在查找性能相对也比较高的条件下,内存空间利用率得到很大的提高。
Claims (2)
1.一种应用改进哈希方法进行存储的方法,其特征在于,包括以下步骤:
步骤A:使用一个哈希函数对关键码进行哈希操作,得到关键码在哈希关键码表中对应的一个关键码页面地址,以及根据所述关键码页面地址读取关键码页面;
步骤B1:在当前关键码页面中寻找一个空闲的关键码记录条目;
步骤B2:如果找到了某个空闲关键码条目,将关键码写入,转步骤C;
步骤B3:如果没有找到可用的空闲关键码条目,检查下一个关键码页面指针是否为空,如果为空,转步骤B4,如果不为空转步骤B6;
步骤B4:分配一个新的关键码页面,将新关键码页面地址作为当前关键码页面的下一个关键码页面指针;
步骤B5:在新的关键码页面中寻找一个空闲的关键码记录条目,转步骤C;
步骤B6:根据下一个关键码页面指针读取下一个关键码页面,转步骤B1;
步骤C:在关键码条目中写入一个对应的结果指针,该指针和关键码对应,并指向实际存储条目。
2 一种应用改进哈希方法进行查找的方法,其特征在于,包括以下步骤:
步骤a:使用一个哈希函数对关键码进行哈希操作,得到关键码在哈希关键码表中对应的一个关键码页面地址;
步骤b:根据关键码页面地址读取关键码页面;
步骤c1:在当前关键码页面查找是否存在一个关键码条目的关键码等于查找用的关键码;
步骤c2:如果找到了匹配的关键码条目,转步骤d,否则转步骤c3;
步骤c3:检查当前关键码页面的下一个关键码页面指针是否为空,如果为空,查找失败,否则转步骤c4;
步骤c4:根据下一个关键码页面指针读取下一个关键码页面,转步骤c1;
步骤d:根据匹配到的关键码条目的结果指针读取实际存储条目。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100084483A CN100487697C (zh) | 2006-01-22 | 2006-01-22 | 一种应用改进的哈希方法进行查找的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100084483A CN100487697C (zh) | 2006-01-22 | 2006-01-22 | 一种应用改进的哈希方法进行查找的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101004741A CN101004741A (zh) | 2007-07-25 |
CN100487697C true CN100487697C (zh) | 2009-05-13 |
Family
ID=38703886
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006100084483A Expired - Fee Related CN100487697C (zh) | 2006-01-22 | 2006-01-22 | 一种应用改进的哈希方法进行查找的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100487697C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101655861B (zh) * | 2009-09-08 | 2011-06-01 | 中国科学院计算技术研究所 | 基于双计数布鲁姆过滤器的哈希方法和哈希装置 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101887457B (zh) * | 2010-07-02 | 2012-10-03 | 杭州电子科技大学 | 基于内容的复制图像检测方法 |
CN109542908B (zh) * | 2018-11-23 | 2019-08-13 | 中科驭数(北京)科技有限公司 | key-value数据库中的数据压缩方法、存储方法、访问方法和系统 |
CN110177106A (zh) * | 2019-05-31 | 2019-08-27 | 贵州精准健康数据有限公司 | 医疗影像数据传输系统 |
CN111953682A (zh) * | 2020-08-11 | 2020-11-17 | 北京八分量信息科技有限公司 | 银行云计算门户网站页面的防篡改方法、装置及相关产品 |
-
2006
- 2006-01-22 CN CNB2006100084483A patent/CN100487697C/zh not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101655861B (zh) * | 2009-09-08 | 2011-06-01 | 中国科学院计算技术研究所 | 基于双计数布鲁姆过滤器的哈希方法和哈希装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101004741A (zh) | 2007-07-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101354726B (zh) | 一种机群文件系统的内存元数据管理方法 | |
US8099421B2 (en) | File system, and method for storing and searching for file by the same | |
CN100468402C (zh) | 一种数据存储及查询方法 | |
CN100550847C (zh) | 一种解决Hash冲突的方法及装置 | |
CN101141389B (zh) | 增强多位Trie树查找方法和装置 | |
CN103544261B (zh) | 一种海量结构化日志数据全局索引管理方法及装置 | |
CN104090897B (zh) | 访问元数据的方法、服务器及系统 | |
US20020138648A1 (en) | Hash compensation architecture and method for network address lookup | |
CN100487697C (zh) | 一种应用改进的哈希方法进行查找的方法 | |
CN101655861A (zh) | 基于双计数布鲁姆过滤器的哈希方法和哈希装置 | |
CN102739622A (zh) | 一种可扩展的数据存储系统 | |
CN100486212C (zh) | 一种提高路由表容量的方法 | |
CN112947860A (zh) | 一种分布式数据副本的分级存储与调度方法 | |
CN102542041A (zh) | 栅格数据处理方法及系统 | |
CN102736986A (zh) | 一种内容可寻址存储器及其检索数据的方法 | |
US8468297B2 (en) | Content addressable memory system | |
CN101963993B (zh) | 一种数据库单表记录快速查找的方法 | |
US20070260579A1 (en) | Method of designing query classification component for multilevel dbms | |
US9697898B2 (en) | Content addressable memory with an ordered sequence | |
CN110109931B (zh) | 一种用于防止rac实例间数据访问发生冲突的方法及系统 | |
CN103581024A (zh) | Mac地址硬件与软件相结合的学习方法及装置 | |
CN107133334B (zh) | 基于高带宽存储系统的数据同步方法 | |
CN102984071B (zh) | 分段地址路由的路由表组织方法及查找路由的方法 | |
CN111541617B (zh) | 一种用于高速大规模并发数据流的数据流表处理方法及装置 | |
CN103902693A (zh) | 一种读优化的内存数据库t树索引结构的方法 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090513 Termination date: 20150122 |
|
EXPY | Termination of patent right or utility model |