CN1929451A - 一种解决Hash冲突的方法及装置 - Google Patents
一种解决Hash冲突的方法及装置 Download PDFInfo
- Publication number
- CN1929451A CN1929451A CNA2006101525784A CN200610152578A CN1929451A CN 1929451 A CN1929451 A CN 1929451A CN A2006101525784 A CNA2006101525784 A CN A2006101525784A CN 200610152578 A CN200610152578 A CN 200610152578A CN 1929451 A CN1929451 A CN 1929451A
- Authority
- CN
- China
- Prior art keywords
- address
- hash
- list item
- conflict
- operation result
- 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
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/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种解决Hash冲突的方法及装置,属于网络通信领域。为了解决现有技术中hash冲突、查找时间过长及不对冲突地址进行维护的问题,本发明提供了一种解决Hash冲突的方法,所述方法包括将需要存储的信息进行哈希运算,根据运算结果在哈希表中找到对应的表项,然后将所述信息的运算结果存储在该表项中,并在哈希表中设置指向该表项指针的步骤。本发明还提供了一种解决Hash冲突的装置,包括哈希运算模块、判断模块、地址申请模块、信息存储模块和指针设置模块。采用本发明提供的技术方案有效地解决了Hash冲突问题,采用标准的FIFO接口,节约了带宽,可以实现查找表的线速转发。
Description
技术领域
本发明涉及网络通信领域,特别涉及一种解决Hash冲突的方法及装置。
背景技术
在以太网中,MAC地址往往需要自动学习老化技术,由于MAC地址有48bit,在实际使用过程中不可能为每个地址都分配一个表项,因此在具体应用中常通过Hash算法实现,也就是按照一定的规则,将48bit的MAC地址转化为十几bit的低位地址,然后将实际要转发的内容存放到低位地址对应的存储器(memory)中。
Hash算法是一种高速查表算法,它通过Hash函数建立起从关键字集合到Hash索引之间的映射,在理想情况下,可以实现复杂度为0(1)的查找性能。Hash表查找方法的优点是:查找快速、存储空间利用率高。缺点是:查找的时间不固定,冲突越多查找的时间越长。
Hash函数所建立的从关键字集合到Hash索引之间的映射是多对一的映射,必然存在Hash冲突,即不同的关键字最后产生相同的索引。当发生冲突后,Hash查找的性能将严重降低。
Hash算法包括两方面的内容:一是Hash函数;二是冲突解决方案。
如何处理冲突是构造Hash表的关键之一。采用不同的冲突处理方法就可以得到不同的Hash表。处理冲突的主要方法有:开放定址法、再哈希法、链地址法、建立公共溢出区等。
处理哈希冲突常用的解决方法是再哈希法,即产生地址冲突时计算另一个哈希函数地址,直到冲突不再发生。这种方法不易产生聚集——即用第一个哈希函数求得的地址有冲突的值经过不同的哈希函数再哈希后再有冲突的几率相对较小。
参加图1,是再哈希法常见的表项结构图,共有4个哈希表,按优先次序分为1~4级,大小分别为32K、16K、8K、8K。每个表的操作完全相同,都是用4个不同哈希函数进行再哈希来处理冲突。依次用Hash_code_1、Hash_code_2、Hash_code_3、Hash_code_4对第1个表进行查找都有冲突时,再取哈希地址的低14位(访问16K空间)对第2个表进行查找,如果同样都有冲突时再取哈希地址的低13位(访问8K空间)对第3个表进行查找,如此类推,如果4个表的4个哈希地址都冲突,表明该连接无法建立(相应于CPU建链操作)或不存在(相应于业务查找操作),查找模块返回相应的响应以便查询。
再哈希法的缺点是:当找不到匹配表项时,查找次数就变成最恶劣的查找16次,尤其是增加和删除连接的时候。
对于增加连接来说,有3种可能结果:1、该连接已经存在于哈希表中,增加连接失败;2、哈希表冲突,没有冲突地址,增加连接失败;3、找到冲突地址,增加连接成功。因此增加连接时要依次比较全部4个表的16个哈希地址,看是否已经存在相同的KEY值,如果存在相同连接就返回,不再进行比较,如果找到第一个冲突地址,就把该地址保存起来,比较完16个哈希地址后,如果不存在相同的连接就向第一个冲突地址***连接。比较完后,设置响应寄存器为相应的状态以便CPU读取命令的执行状况。
对于删除连接来说,有2种可能结果:1、找到匹配,将匹配地址的内容清零,删除该连接,并设置响应寄存器为成功;2、找不到匹配,删除连接失败,设置响应寄存器为失败。同样当找不到匹配地址,删除连接失败时,此刻查找就变成了最恶劣的16次查找。
现有技术直接对ZBT SRAM(Zero-Bus Turnaround Static Random Access Memory,零总线延迟静态随机存储器)进行调用查找地址。当需要一个地址时从ZBT SRAM读一个地址出来,当释放掉一个冲突地址时,再将此地址写入ZBT SRAM中。当主程序没有取到地址时,需要等待几个时钟周期,这时查找往往达不到线速。
发明内容
本发明为了解决现有技术中Hash冲突、查找时间过长及不对冲突地址进行维护的问题,提供了一种解决Hash冲突的方法及装置。所述技术方案如下:
本发明提供了一种解决Hash冲突的方法,所述方法包括以下步骤:
步骤A:将需要存储的信息进行哈希运算,根据运算结果在哈希表中找到对应的表项,所述哈希表由链表头、指针和链表尾组成;
步骤B:当所述运算结果对应的链表头中存有内容时,判断所述链表头中的内容与所述运算结果是否相同,如果相同,则不做处理;否则,申请一个空闲地址,将所述运算结果存储在该空闲地址对应的表项中,并在哈希表中设置指向该表项的指针;
步骤C:当所述运算结果对应的链表头为空时,直接将所述运算结果存储在该链表头。
所述步骤B具体包括:
步骤B1:当所述运算结果对应的链表头中存有内容时,判断所述链表头中的内容与所述运算结果是否相同,如果相同,执行步骤B2;否则,执行步骤B3;
步骤B2:对所述运算结果不做处理;
步骤B3:判断所述链表头中是否有指向下一个地址的指针,如果有,执行步骤B4,否则,申请一个空闲地址,将所述运算结果填入所申请的空闲地址对应的表项中,并在所述链表头设置指向该空闲地址的指针;
步骤B4:按照表项中的指针找到下一个地址对应的表项,并判断该表项中存储的内容与所述运算结果是否相同,如果相同,不做处理;否则申请一个空闲地址,将所述运算结果填入所申请的空闲地址对应的表项中,并在所述表项中设置指向该空闲地址的指针。
所述的空闲地址是利用读先进先出队列模块和写先进先出队列模块进行存储和传递的。
所述方法还包括:
步骤D:对读先进先出队列模块和写先进先出队列模块中的空闲地址进行维护。
所述步骤D具体包括:
步骤D1:检测读先进先出队列模块和写先进先出队列模块,如果当前检测的是读先进先出队列模块,执行步骤D2;否则,执行步骤D3;
步骤D2:判断读先进先出队列模块中冲突地址个数是否小于预设值,如果小于,从写先进先出队列模块中读取冲突地址放入读先进先出队列模块中,或者从冲突空闲地址空间读取冲突地址放入读先进先出队列模块中;
步骤D3:判断写先进先出队列模块中是否能再放入预设值个冲突地址,如果不能,则将写先进先出队列模块中的地址读入读先进先出队列模块中,或者将写先进先出队列模块中的地址读入冲突空闲地址空间。
所述预设值为4。
所述方法还包括:
步骤E:有需要删除的信息时,对该需要删除的信息进行哈希运算,得到运算结果,然后根据该运算结果在哈希表中找到相应的表项,释放该表项,并把释放后的表项所在地址写在冲突空闲地址空间中。
所述步骤E具体包括:
步骤E1:当所述哈希表中有信息需要删除时,对需要删除的信息进行哈希运算,得到运算结果,根据所述运算结果在哈希表中找到相应的表项,释放该表项;
步骤E2:判断当前表项中是否有指向下一个表项的指针,如果有,修改当前表项的上一个表项的指针为当前表项的指针,或者如果所述当前表项为链表头,则将指针指向的下一个表项的内容放到该链表头;否则,将当前表项的上一个表项的指针删除;
步骤E3:将当前表项所在地址写入冲突空闲地址空间中。
本发明还提供了一种解决Hash冲突的装置,所述装置包括以下模块:
哈希运算模块,用于将需要存储的信息进行哈希运算,得到运算结果;
判断模块,用于用所述运算结果查哈希表,判断查到的表项是否为空以及是否存有指向下一个地址的指针;
地址申请模块,用于当所述运算结果对应的链表头中存有内容时,判断所述链表头中的内容与哈希运算模块中的运算结果是否相同,如果相同,则不做处理;否则,申请一个空闲地址;
信息存储模块,用于将所述运算结果存储在哈希表对应的表项中或者新申请的空闲地址对应的表项中;
指针设置模块,用于当申请一个空闲地址时,在哈希表中设置指向该地址的指针。
所述装置还包括:
删除链表模块,用于有需要删除的信息时,对该需要删除的信息进行哈希运算,得到运算结果,然后根据该运算结果在哈希表中找到相应的表项,释放该表项,并把释放后的表项所在地址写在冲突空闲地址空间中。
所述装置还包括:
读先进先出队列模块,用于为添加链表出现冲突时,提供空闲地址;
写先进先出队列模块,用于存储删除链表时释放的地址;
先进先出队列接口控制模块,用于调节读先进先出队列模块和写先进先出队列模块中空闲地址的个数。
本发明的技术方案带来的有益效果是:
1、通过链表法存储冲突地址,有效地解决了Hash冲突问题;
2、冲突地址池的维护采用标准FIFO(First In First Out,先进先出队列)接口,节约了带宽,可以实现查找表的线速转发。
3、内部地址维护和外面的添加和删除链表可以并行执行,FIFO起到一个缓冲的作用,因此外部的操作可以简单地完成。
附图说明
图1是现有技术中再哈希法的表项结构示意图;
图2是本发明提供的链表法的Hash结构框图;
图3是本发明提供的冲突地址维护的示意图;
图4是本发明实施例1提供的添加链表方法流程图;
图5是本发明实施例2提供的删除链表方法流程图;
图6是本发明实施例3提供的冲突地址维护的方法流程图;
图7是本发明实施例4提供的解决Hash冲突的装置示意图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明,但不作为对本发明的限定。
本发明提供了一种解决Hash冲突的方法及装置,通过采用链表法解决Hash冲突,然后对链表法产生的冲突地址进行维护,达到更好地进行地址传递的目的。
本发明采用链表法解决路由查找转发时的Hash冲突,即采用16k链表头空间加上8k冲突地址空间来存储链表,链表放在外接的ZBT SRAM中。
该链表的结构参见图2,其中hash(key1)=hash(key2)=hash(key3)=hash(key4)指关键字key1、key2、key3、key4经Hash运算后的结果相同,hash(key5)=hash(key6)=hash(key7)指关键字key5、key6、key7经Hash运算后的结果相同,还有一个关键字key8,将上述关键字进行链表添加后的结果参见图2所示的哈希表。
参见图3,冲突地址的维护示意图,冲突空闲地址空间以冲突地址池为例,其中SRAM转为FIFO接口控制模块负责将SRAM接口转为FIFO接口,生成两个16×13bit的基于LUT(LookUp Table,查找表)同步FIFO模块,两个FIFO模块分别为读FIFO模块和写FIFO模块,读FIFO模块与添加链表模块相连,写FIFO模块与删除链表模块相连。
实施例1
参加图4,一种添加链表的方法,该方法包括以下步骤:
步骤101:将需要存储的信息进行哈希运算,按运算后的结果查哈希表,找到该运算结果对应的链表头。这里的哈希表是由链表头、指针和链表尾组成。
步骤102:判断该链表头是否为空,如果为空,执行步骤103;否则,执行步骤104;
步骤103:将需要存储的信息的运算结果填入该链表头。
步骤104:判断链表头中存储的内容是否和需要存储的信息的运算结果相同,如果相同,执行步骤105;否则,执行步骤106。
步骤105:对需要存储的信息的运算结果不做处理。
步骤106:判断该链表头中是否有指向下一个地址的指针,如果有,执行步骤107,否则,执行步骤111。
步骤107:按照链表头中的指针找到下一个地址对应的表项,判断该表项中的内容与需要存储的信息的运算结果是否相同,如果相同,执行步骤105,否则,执行步骤108。
步骤108:判断该表项中是否有指向下一个地址的指针。如果有,执行步骤109,否则,执行步骤110。
步骤109:继续向下查找,直到查到的表项中没有与要存储的信息的运算结果相同的内容和指向下一个地址的指针,然后向冲突空闲地址空间的读FIFO模块申请一个空闲地址,将需要存储的信息的运算结果填入所申请的空闲地址对应的表项中,并在该表项中设置指向该空闲地址的指针;
其中,空闲地址存储于冲突地址空间,并通过读FIFO模块和写FIFO模块进行传递。
步骤110:直接向冲突空闲地址空间的读FIFO模块申请一个空闲地址,将需要存储的信息的运算结果填入所申请的空闲地址对应的表项中,并在这个表项中设置指向该空闲地址的指针。
步骤111:向冲突空闲地址空间的读FIFO模块申请一个空闲地址,将需要存储的信息的运算结果填入所申请的空闲地址对应的表项中,并在链表头设置指向该空闲地址的指针。
上述添加链表的过程以图2中的关键字key1、key2、key3、key4为例进行说明如下:
将关键字key1、key2、key3、key4作为需要存储的信息,先存储key1,经Hash运算后的结果hash(key1)对应哈希表的第二个表项的链表头,此时发现该链表头为空,则将hash(key1)填入该链表头。
当要存储key2时,对key2进行哈希运算,因为hash(key1)=hash(key2),所以发现哈希运算后的结果对应的链表头已经存有hash(key1),且该表项中没有指向下一个地址的指针,则向冲突空闲地址空间的读FIFO模块申请一个空闲地址,将这个空闲地址以指针形式存储在hash(key1)的链表头。同时将hash(key2)存储在该空闲地址对应的表项中。
当要存储key3时,对key3进行哈希运算,同理发现对应的链表头中有hash(key1),且该链表头中有指向下一个地址的指针,则按该指针找到下一个表项,发现表项中有hash(key2),且该表项没有指向下一个地址的指针,则向冲突空闲地址空间的读FIFO模块申请一个空闲地址用来存储key3的运算结果hash(key3),且把该空闲地址以指针的形式存储在hash(key2)所在的表项。
Key4的存储过程与key3相同,不再详述。
需要增加链表时,从读FIFO模块中取一个冲突地址。根据哈希运算后的结果查找哈希表,有3种可能结果:
1)该连接已经存在于哈希表中,增加连接失败;
2)哈希表冲突,冲突地址池中没有空闲地址,增加连接失败;
3)冲突地址池中存在空闲地址,增加连接成功。但是由于链表结构有首节点和尾节点指示,当查询到链表尾还没有找到匹配地址时,则可以直接判断查找失败,不再增加连接。
实施例2
参见图5,一种删除链表中表项的方法,该方法具体包括:
步骤201:当有信息需要删除时,对该信息进行哈希运算,得到运算结果,根据该运算结果在哈希表中找到对应的表项,将该表项释放,即将该表项中的内容删除;
步骤202:判断当前表项中是否有指向下一个表项的指针,如果有,执行步骤203,否则,执行步骤204。
步骤203:修改当前表项的上一个表项的指针为当前表项存放的指针,如果当前表项为链表头,则将指针指向的下一个表项的内容放到该链表头;
步骤204:将当前表项的上一个表项的指针删除;
步骤205:将当前表项所在地址写入冲突空闲地址空间的写FIFO模块中。
当删除链表时,将删除的地址写入写FIFO模块中。有2种可能结果:
1)找到匹配,将匹配地址的内容清零,删除该连接,同时将删除掉的链表前后节点通过修改父子节点再重新连接起来,然后将被删除掉的链表地址再释放回冲突地址池中去;
2)找不到匹配,删除连接失败。同样当找不到匹配时,链表法的查找是只查找到链表尾。
实施例3
参见图6,对Hash表结构中的冲突(空闲)地址的维护方法,该方法应用图3提供的示意图中的模块进行,具体步骤如下:
步骤301:初始化空闲地址池,将冲突地址写入对应的偏移地址中。
本实施例先将两个16×13bit的FIFO复位信号拉高,FIFO进行复位,且持续8个时间周期,然后再将其拉低,这主要是由于FIFO对于复位信号的长度有一定要求。
为读FIFO模块和写FIFO模块中的冲突地址个数设置预设值,该预设值可以根据经验设定,本实施例都取4个。
接着向下行ZBT(Zero-Bus Turnaround,零总线延迟)发出申请,按顺序依次将8k冲突地址写入到对应的偏移地址中去。当全部写完以后,跳到正常工作状态,即检测读FIFO模块和写FIFO模块。
步骤302:判断当前检测的是读FIFO模块还是写FIFO模块,即检测读FIFO模块中有没有4个,写FIFO模块中还能不能再放4个。如果当前检测的是读FIFO模块,执行步骤303,如果当前检测的是写FIFO模块,执行步骤307。
步骤303:判断读FIFO模块中的冲突地址个数是否小于4个,如果是,执行步骤304,否则返回步骤302。
步骤304:判断写FIFO模块中的冲突地址是否满足4个,如果有4个,执行步骤305;否则,执行步骤306。该预设值取为4。
步骤305:从写FIFO模块中读取4个冲突地址。
步骤306:向ZBT SRAM中发请求,读取4个冲突地址。
步骤307:判断写FIFO模块中能存放的冲突地址数是否小于4个,即冲突地址是否快要满,如果小于预设值,执行步骤308;否则返回步骤302。
步骤308:判断读FIFO模块中是否能再放入4个地址,如果是,执行步骤309;否则执行步骤310。
步骤309:从写FIFO模块中取4个地址送入读FIFO模块中。
步骤310:从写FIFO模块中取4个地址写入到外面的ZBT SRAM中去。
采用这样方法,就可以尽量减少对外接ZBT SRAM的读写操作,从而节约时间和节省带宽。
实施例4
参见图7,本发明还提供了一种解决Hash冲突及冲突地址维护的装置,包括以下模块:
哈希运算模块,用于将需要存储的信息进行哈希运算,得到运算结果;
判断模块,用于用哈希运算模块中的运算结果查哈希表,判断查到的表项是否为空以及是否存有指向下一个地址的指针;
地址申请模块,用于当哈希运算模块中的运算结果对应的链表头中存有内容时,判断对应的链表头中的内容与哈希运算模块中的运算结果是否相同,如果相同,则不做处理;否则,申请一个空闲地址;
信息存储模块,用于将需要存储信息的运算结果存储在哈希表对应的表项中或者新申请的空闲地址对应的表项中;
指针设置模块,用于当申请一个空闲地址时,在哈希表中设置指向该地址的指针。
该装置还包括:
删除链表模块,用于有需要删除的信息时,对该需要删除的信息进行哈希运算,得到运算结果,然后根据该运算结果在哈希表中找到相应的表项,释放该表项,并把释放后的表项所在地址写在冲突空闲地址空间中。
读先进先出队列模块,用于为添加链表出现冲突时,提供空闲地址;
写先进先出队列模块,用于存储删除链表时释放的地址;
先进先出队列接口控制模块,用于调节读先进先出队列模块和写先进先出队列模块中空闲地址的个数。
以上所述的实施例,只是本发明较优选的具体实施方式的一种,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
Claims (11)
1.一种解决Hash冲突的方法,其特征在于,所述方法包括以下步骤:
步骤A:将需要存储的信息进行哈希运算,根据运算结果在哈希表中找到对应的表项,所述哈希表由链表头、指针和链表尾组成;
步骤B:当所述运算结果对应的链表头中存有内容时,判断所述链表头中的内容与所述运算结果是否相同,如果相同,则不做处理;否则,申请一个空闲地址,将所述运算结果存储在该空闲地址对应的表项中,并在哈希表中设置指向该表项的指针;
步骤C:当所述运算结果对应的链表头为空时,直接将所述运算结果存储在该链表头。
2.如权利要求1所述的解决Hash冲突的方法,其特征在于,所述步骤B具体包括:
步骤B1:当所述运算结果对应的链表头中存有内容时,判断所述链表头中的内容与所述运算结果是否相同,如果相同,执行步骤B2;否则,执行步骤B3;
步骤B2:对所述运算结果不做处理;
步骤B3:判断所述链表头中是否有指向下一个地址的指针,如果有,执行步骤B4,否则,申请一个空闲地址,将所述运算结果填入所申请的空闲地址对应的表项中,并在所述链表头设置指向该空闲地址的指针;
步骤B4:按照表项中的指针找到下一个地址对应的表项,并判断该表项中存储的内容与所述运算结果是否相同,如果相同,不做处理;否则申请一个空闲地址,将所述运算结果填入所申请的空闲地址对应的表项中,并在所述表项中设置指向该空闲地址的指针。
3.如权利要求1或2所述的解决Hash冲突的方法,其特征在于,所述的空闲地址是利用读先进先出队列模块和写先进先出队列模块进行存储和传递的。
4.如权利要求3所述的解决Hash冲突的方法,其特征在于,所述方法还包括:
步骤D:对读先进先出队列模块和写先进先出队列模块中的空闲地址进行维护。
5.如权利要求4所述的解决Hash冲突的方法,其特征在于,所述步骤D具体包括:
步骤D1:检测读先进先出队列模块和写先进先出队列模块,如果当前检测的是读先进先出队列模块,执行步骤D2;否则,执行步骤D3;
步骤D2:判断读先进先出队列模块中冲突地址个数是否小于预设值,如果小于,从写先进先出队列模块中读取冲突地址放入读先进先出队列模块中,或者从冲突空闲地址空间读取冲突地址放入读先进先出队列模块中;
步骤D3:判断写先进先出队列模块中是否能再放入预设值个冲突地址,如果不能,则将写先进先出队列模块中的地址读入读先进先出队列模块中,或者将写先进先出队列模块中的地址读入冲突空闲地址空间。
6.如权利要求5所述的解决Hash冲突的方法,其特征在于,所述预设值为4。
7.如权利要求1所述的解决Hash冲突的方法,其特征在于,所述方法还包括:
步骤E:有需要删除的信息时,对该需要删除的信息进行哈希运算,得到运算结果,然后根据该运算结果在哈希表中找到相应的表项,释放该表项,并把释放后的表项所在地址写在冲突空闲地址空间中。
8.如权利要求7所述的解决Hash冲突的方法,其特征在于,所述步骤E具体包括:
步骤E1:当所述哈希表中有信息需要删除时,对需要删除的信息进行哈希运算,得到运算结果,根据所述运算结果在哈希表中找到相应的表项,释放该表项;
步骤E2:判断当前表项中是否有指向下一个表项的指针,如果有,修改当前表项的上一个表项的指针为当前表项的指针,或者如果所述当前表项为链表头,则将指针指向的下一个表项的内容放到该链表头;否则,将当前表项的上一个表项的指针删除;
步骤E3:将当前表项所在地址写入冲突空闲地址空间中。
9.一种解决Hash冲突的装置,其特征在于,所述装置包括以下模块:
哈希运算模块,用于将需要存储的信息进行哈希运算,得到运算结果;
判断模块,用于用所述运算结果查哈希表,判断查到的表项是否为空以及是否存有指向下一个地址的指针;
地址申请模块,用于当所述运算结果对应的链表头中存有内容时,判断所述链表头中的内容与哈希运算模块中的运算结果是否相同,如果相同,则不做处理;否则,申请一个空闲地址;
信息存储模块,用于将所述运算结果存储在哈希表对应的表项中或者新申请的空闲地址对应的表项中;
指针设置模块,用于当申请一个空闲地址时,在哈希表中设置指向该地址的指针。
10.如权利要求9所述的解决Hash冲突的装置,其特征在于,所述装置还包括:
删除链表模块,用于有需要删除的信息时,对该需要删除的信息进行哈希运算,得到运算结果,然后根据该运算结果在哈希表中找到相应的表项,释放该表项,并把释放后的表项所在地址写在冲突空闲地址空间中。
11.如权利要求9所述的解决Hash冲突的装置,其特征在于,所述装置还包括:
读先进先出队列模块,用于为添加链表出现冲突时,提供空闲地址;
写先进先出队列模块,用于存储删除链表时释放的地址;
先进先出队列接口控制模块,用于调节读先进先出队列模块和写先进先出队列模块中空闲地址的个数。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101525784A CN100550847C (zh) | 2006-09-29 | 2006-09-29 | 一种解决Hash冲突的方法及装置 |
PCT/CN2007/070474 WO2008037201A1 (fr) | 2006-09-29 | 2007-08-14 | Procédé et appareil permettant de résoudre une collision de hachage |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101525784A CN100550847C (zh) | 2006-09-29 | 2006-09-29 | 一种解决Hash冲突的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1929451A true CN1929451A (zh) | 2007-03-14 |
CN100550847C CN100550847C (zh) | 2009-10-14 |
Family
ID=37859240
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006101525784A Expired - Fee Related CN100550847C (zh) | 2006-09-29 | 2006-09-29 | 一种解决Hash冲突的方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN100550847C (zh) |
WO (1) | WO2008037201A1 (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833541A (zh) * | 2010-04-26 | 2010-09-15 | 华为技术有限公司 | 哈希数据处理方法和装置 |
CN101340386B (zh) * | 2008-08-12 | 2011-08-10 | 华为技术有限公司 | 建立和查找路由表项的方法及路由器 |
WO2011140889A1 (zh) * | 2010-05-11 | 2011-11-17 | 中兴通讯股份有限公司 | 一种多任务间hash检测方法及装置 |
CN101232444B (zh) * | 2008-01-22 | 2012-03-21 | 杭州华三通信技术有限公司 | 哈希冲突解决方法、装置及具有该装置的交换设备 |
CN102780641A (zh) * | 2012-08-17 | 2012-11-14 | 北京傲天动联技术有限公司 | 快速转发引擎的流表老化方法、装置以及交换机 |
TWI412929B (zh) * | 2009-07-23 | 2013-10-21 | Ipanel Tv Inc | 散列表動態適應資料之方法及其裝置 |
CN104461400A (zh) * | 2014-12-25 | 2015-03-25 | 浪潮(北京)电子信息产业有限公司 | 处理访存请求冲突的方法和装置 |
CN104579970A (zh) * | 2013-10-29 | 2015-04-29 | 国家计算机网络与信息安全管理中心 | 一种IPv6报文的策略匹配方法及装置 |
CN105379214A (zh) * | 2014-03-24 | 2016-03-02 | 华为技术有限公司 | 确定表的存储位置的方法、转发设备及控制器 |
CN101833541B (zh) * | 2010-04-26 | 2016-12-14 | 华为技术有限公司 | 哈希数据处理方法和装置 |
CN106528670A (zh) * | 2016-10-31 | 2017-03-22 | 盛科网络(苏州)有限公司 | 一种减少Hash查找冲突的方法 |
CN106656865A (zh) * | 2016-10-28 | 2017-05-10 | 杭州迪普科技股份有限公司 | 一种管理链表资源的方法及装置 |
CN106815221A (zh) * | 2015-11-27 | 2017-06-09 | 华为软件技术有限公司 | 一种电信业务关系判定方法及装置 |
CN107992577A (zh) * | 2017-12-04 | 2018-05-04 | 北京奇安信科技有限公司 | 一种哈希表数据冲突处理方法及装置 |
CN111431806A (zh) * | 2020-03-18 | 2020-07-17 | 北京京安佳新技术有限公司 | 一种流表处理方法和设备 |
CN111953682A (zh) * | 2020-08-11 | 2020-11-17 | 北京八分量信息科技有限公司 | 银行云计算门户网站页面的防篡改方法、装置及相关产品 |
CN113779320A (zh) * | 2021-08-18 | 2021-12-10 | 北京计算机技术及应用研究所 | 一种表项存储地址冲突的解决方法 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108614734B (zh) * | 2016-12-13 | 2022-08-12 | 迈普通信技术股份有限公司 | 安全参数索引管理方法及装置 |
CN111694559B (zh) * | 2020-05-21 | 2023-07-21 | 北京云杉世纪网络科技有限公司 | Gc程序语言中哈希表的实现方法及装置 |
CN112783894B (zh) * | 2021-01-11 | 2022-12-20 | 山东兆物网络技术股份有限公司 | 基于碰撞的带老化删除的双层无锁哈希表实现方法 |
CN117390029B (zh) * | 2023-12-11 | 2024-05-17 | 格创通信(浙江)有限公司 | 一种表项***方法、装置、电子设备及存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5920900A (en) * | 1996-12-30 | 1999-07-06 | Cabletron Systems, Inc. | Hash-based translation method and apparatus with multiple level collision resolution |
US7124243B2 (en) * | 2003-05-16 | 2006-10-17 | Pillar Data Systems, Inc. | Methods and systems of cache memory management and snapshot operations |
US7373514B2 (en) * | 2003-07-23 | 2008-05-13 | Intel Corporation | High-performance hashing system |
-
2006
- 2006-09-29 CN CNB2006101525784A patent/CN100550847C/zh not_active Expired - Fee Related
-
2007
- 2007-08-14 WO PCT/CN2007/070474 patent/WO2008037201A1/zh active Application Filing
Cited By (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101232444B (zh) * | 2008-01-22 | 2012-03-21 | 杭州华三通信技术有限公司 | 哈希冲突解决方法、装置及具有该装置的交换设备 |
CN101340386B (zh) * | 2008-08-12 | 2011-08-10 | 华为技术有限公司 | 建立和查找路由表项的方法及路由器 |
TWI412929B (zh) * | 2009-07-23 | 2013-10-21 | Ipanel Tv Inc | 散列表動態適應資料之方法及其裝置 |
CN101833541B (zh) * | 2010-04-26 | 2016-12-14 | 华为技术有限公司 | 哈希数据处理方法和装置 |
CN101833541A (zh) * | 2010-04-26 | 2010-09-15 | 华为技术有限公司 | 哈希数据处理方法和装置 |
WO2011140889A1 (zh) * | 2010-05-11 | 2011-11-17 | 中兴通讯股份有限公司 | 一种多任务间hash检测方法及装置 |
CN102780641A (zh) * | 2012-08-17 | 2012-11-14 | 北京傲天动联技术有限公司 | 快速转发引擎的流表老化方法、装置以及交换机 |
CN102780641B (zh) * | 2012-08-17 | 2015-07-08 | 北京傲天动联技术股份有限公司 | 快速转发引擎的流表老化方法、装置以及交换机 |
CN104579970A (zh) * | 2013-10-29 | 2015-04-29 | 国家计算机网络与信息安全管理中心 | 一种IPv6报文的策略匹配方法及装置 |
CN105379214A (zh) * | 2014-03-24 | 2016-03-02 | 华为技术有限公司 | 确定表的存储位置的方法、转发设备及控制器 |
US10158503B2 (en) | 2014-03-24 | 2018-12-18 | Huawei Technologies Co., Ltd | Method for determining storage location of table, forwarding device, and controller |
CN105379214B (zh) * | 2014-03-24 | 2019-04-19 | 华为技术有限公司 | 确定表的存储位置的方法、转发设备及控制器 |
CN104461400A (zh) * | 2014-12-25 | 2015-03-25 | 浪潮(北京)电子信息产业有限公司 | 处理访存请求冲突的方法和装置 |
CN104461400B (zh) * | 2014-12-25 | 2017-09-19 | 浪潮(北京)电子信息产业有限公司 | 处理访存请求冲突的方法和装置 |
CN106815221A (zh) * | 2015-11-27 | 2017-06-09 | 华为软件技术有限公司 | 一种电信业务关系判定方法及装置 |
CN106656865A (zh) * | 2016-10-28 | 2017-05-10 | 杭州迪普科技股份有限公司 | 一种管理链表资源的方法及装置 |
CN106656865B (zh) * | 2016-10-28 | 2019-06-07 | 杭州迪普科技股份有限公司 | 一种管理链表资源的方法及装置 |
CN106528670A (zh) * | 2016-10-31 | 2017-03-22 | 盛科网络(苏州)有限公司 | 一种减少Hash查找冲突的方法 |
CN107992577A (zh) * | 2017-12-04 | 2018-05-04 | 北京奇安信科技有限公司 | 一种哈希表数据冲突处理方法及装置 |
CN107992577B (zh) * | 2017-12-04 | 2020-08-11 | 奇安信科技集团股份有限公司 | 一种哈希表数据冲突处理方法及装置 |
CN111431806A (zh) * | 2020-03-18 | 2020-07-17 | 北京京安佳新技术有限公司 | 一种流表处理方法和设备 |
CN111431806B (zh) * | 2020-03-18 | 2022-07-08 | 北京京安佳新技术有限公司 | 一种流表处理方法和设备 |
CN111953682A (zh) * | 2020-08-11 | 2020-11-17 | 北京八分量信息科技有限公司 | 银行云计算门户网站页面的防篡改方法、装置及相关产品 |
CN113779320A (zh) * | 2021-08-18 | 2021-12-10 | 北京计算机技术及应用研究所 | 一种表项存储地址冲突的解决方法 |
CN113779320B (zh) * | 2021-08-18 | 2024-02-27 | 北京计算机技术及应用研究所 | 一种表项存储地址冲突的解决方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2008037201A1 (fr) | 2008-04-03 |
CN100550847C (zh) | 2009-10-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1929451A (zh) | 一种解决Hash冲突的方法及装置 | |
CN1311363C (zh) | 生成内容地址的数据处理方法和可内容寻址的存储*** | |
CN1277226C (zh) | 分布式共享内存***数据维护方法 | |
US9871727B2 (en) | Routing lookup method and device and method for constructing B-tree structure | |
CN1664790A (zh) | 增加数据存储容量的方法和装置 | |
CN1932818A (zh) | 数据库***及管理数据库数据的方法 | |
CN1929447A (zh) | 地址前缀查找方法和装置以及报文转发方法和*** | |
CN1940922A (zh) | 一种提高搜索信息速度的方法及*** | |
CN1863169A (zh) | 基于网络处理器的路由查找结果缓存方法 | |
CN101035062A (zh) | 一种三重内容可寻址存储器报文分类的规则更新方法 | |
CN101079042A (zh) | 一种快速查询黑白名单的***及方法 | |
JPWO2011067932A1 (ja) | 表検索装置、表検索方法、及び、表検索システム | |
CN1878139A (zh) | 三层转发方法、装置及地址解析协议信息表更新方法 | |
CN101068178A (zh) | 使用、管理mac地址表的方法、***、及搜索引擎 | |
CN101055574A (zh) | 一种域名类信息的存储及查询方法以及*** | |
CN1819544A (zh) | 一种基于bitmap表的缓存管理方法 | |
CN1852261A (zh) | 维护邻居表项的方法 | |
US8914574B2 (en) | Content addressable memory and method of searching data thereof | |
CN1561047A (zh) | 基于tcam的分布式并行ip路由查找方法 | |
CN101043421A (zh) | 一种基于内存的ip地址最长匹配快速查找的方法 | |
CN1924816A (zh) | 提高多核***访问临界资源速度的方法和装置 | |
CN1866918A (zh) | 静态多接口范围匹配表的管理维护方法 | |
CN1381797A (zh) | 高速信息检索*** | |
CN1859208A (zh) | 一种tcam路由表管理方法和*** | |
CN1862534A (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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20091014 Termination date: 20120929 |