降低Hash冲突概率的方法及装置与流程

文档序号:12063286阅读:833来源:国知局
降低Hash冲突概率的方法及装置与流程

本发明涉及计算机网络技术领域,尤其是涉及一种降低哈希(Hash)冲突概率的方法及装置。



背景技术:

哈希(Hash)表是根据关键值(key)而直接进行访问的数据结构,它通过把关键码值映射到表项中一个位置(index)来存储,以加快数据查找的速度。其中,此映射函数叫做哈希函数(f),而存放记录的数组便是哈希表,哈希表的数学表达式为:index=f(key)。在网络通信领域以路由查找为例,哈希函数输入值(key)的有效范围是整个地址空间,哈希函数输出值(Index)有效范围是系统支持该表项的最大规格。显然,输出值的有效范围远远小于输入值的有效范围,在这个前提下,无论怎么去构造哈希函数(f),都不可避免会出现key1≠key2,而f(key1)=f(key2)的情况,此情况便为哈希冲突。

现有技术中,可根据存储数据的不同来选择不同的Hash函数,以降低冲突概率。但是该方式需要根据不同的数据模型来选择,不够灵活。还可针对同一Hash值入口,增加该入口下所挂载链表的深度,即扩充表项空间。除上述两种方式外,常用的解决哈希冲突的方法为“建立公共溢出区”,此方法将发生哈希冲突的数据存放于TCAM(三态可寻址寄存器)里面,然而,上述方法虽然可在一定程度避免哈希冲突的发生,但由于TCAM空间有限,且成本高昂,如果哈希冲突率高,而TCAM空间不足,那么会导致冲突的表项无处存放,额外增设TCAM也势必提高整个设备的成本。



技术实现要素:

本发明的目的在于克服现有技术的缺陷,提供一种降低Hash冲突概率的方法及装置,以实现在不扩大物理存储器(Memory)的前提下,有效的减少冲突概率。

为实现上述目的,本发明提出如下技术方案:一种降低Hash冲突概率的方法,所述方法包括:将一块物理存储器分成多块,每一块存储器使用一个Hash算法进行Hash运算,得到多个hash值对应的链表入口,然后再用Hash算法输入的key与存储器存储条目内的数据进行一一比对,为当前需要存储的数据找到一个空的存储条目,其中,每块存储器使用的Hash算法均不相同,且分成后的每块存储器的存储深度小于原存储器。

优选地,所述Hash算法用到的Hash函数为本原多项式。

优选地,分成的每块存储器的存储深度均等或不均等。

本发明还提出了另外一种技术方案:一种降低Hash冲突概率的方法,所述方法包括:将一块物理存储器从逻辑上分成多块,每块存储器应用一个Hash算法进行Hash运算,得到多个hash值对应的链表入口,然后再用Hash算法输入的key与存储器存储条目内的数据进行一一比对,为当前需要存储的数据找到一个空的存储条目,其中,每块存储器使用的Hash算法均不相同,且分成后的每块存储器的存储深度与原存储器保持一致。

本发明还提出了另外一种技术方案:一种降低Hash冲突概率的装置,所述装置包括:分块模块、Hash运算模块和比对模块,所述分块模块用于将一块物理存储器分成多块,分成后的每块存储器对应一个所述Hash运算模块;所述Hash运算模块用于对其对应的存储器使用一个Hash算法进行Hash运算,得到多个hash值对应的链表入口;所述比对模块用于用Hash算法输入的key与存储器存储条目内的数据相一一比对,为当前需要存储的数据找到一个空的存储条目,其中,所述Hash运算模块之间使用的Hash算法均不相同,且由所述分块模块分成的存储器的存储深度小于或等于原存储器的深度。

优选地,所述分块模块将一块物理存储器分成多块存储深度均等或不均等的存储器。

与现有技术不同,本发明通过将一块存储器分成多块,每块使用不同的Hash算法进行运算,在不扩大物理存储器(Memory)的前提下,有效的减少冲突概率。

附图说明

图1是本发明实施例1降低Hash冲突概率的方法的流程示意图;

图2是本发明实施例1降低Hash冲突概率的方法的原理示意图;

图3是本发明实施例2降低Hash冲突概率的方法的流程示意图;

图4是本发明实施例2降低Hash冲突概率的方法的原理示意图;

图5是本发明降低Hash冲突概率的装置的模块示意图。

具体实施方式

下面将结合本发明的附图,对本发明实施例的技术方案进行清楚、完整的描述。

本发明所揭示的一种降低Hash冲突概率的方法及装置,通过对同一个物理存储器(Memory)进行多次逻辑上的hash运算,从而在Memory带宽允许的前提下,降低hash表的冲突概率。本发明为降低hash表冲突概率,提出了两个技术方案,即实施例1和实施例2,下面将对这两个实施例进行具体描述。

结合图1和图2所示,本发明实施例1所揭示的一种降低Hash冲突概率的方法,包括以下步骤:

步骤1,将一块物理存储器从逻辑上分成多块,分成后的每块存储器的存储深度小于原存储器的存储深度。

比如一块物理上32K深度的物理Memory,可以从逻辑上从上至下划分成四块8K的Memory,即将一块物理Memory分成了四块,每块的存储深度是均等的,当然分成的多块存储器的存储深度也可以是不均等的。

步骤2,每一块存储器使用一个Hash算法进行Hash运算,得到多个hash值对应的链表入口,每块存储器使用的Hash算法均不相同。

即每块存储器采用与其他存储器不同的Hash算法进行运算,如上述分成的四块Memory,为描述方便,可以标记为Memory1、Memory2、Memory3、Memory4,每块采用不同的Hash函数来计算,如对于当前需要存储的数据,Memory1、Memory2、Memory3和Memory4分别采用各自对应的Hash函数计算得到一个hash值。

优选地,本实施例中,每块存储器采用的Hash函数选用本原多项式,每块存储器之间的采用的本原多项式是不同的且是互质的。如每块逻辑的Memory中对应使用x13+x8+x6+x+1、x13+x7+x6+x+1、x13+x5+x2+x+1、x13+x4+x3+x+1这几个不同的本原多项式做Hash运算,即Memory1可对应采用x13+x8+x6+x+1,Memory2可对应采用x13+x7+x6+x+1,Memory3可对应采用x13+x5+x2+x+1,Memory4可对应采用x13+x4+x3+x+1,计算得到不同的Hash值。由于本原多项式相互之间是互质的,能够很好的平衡各个逻辑Memory之间的Hash算法。

同样地,这里的Hash函数也可优选使用本原多项式。

步骤3,将Hash算法输入的key与存储器存储条目内的数据进行一一比对,为当前需要存储的数据找到一个空的存储条目。

即判断链表入口对应的存储条目中是否已存有数据,如果没有,则该条目为空的,表明可以存储数据,此时可将当前需要存储的数据存储到该存储条目中。

这样,本发明实施例1产生的Hash冲突概率相当于用多块物理Memory所得到的冲突概率。

结合图3和图4所示,本发明实施例2所揭示的一种降低Hash冲突概率的方法,包括以下步骤:

步骤1,将一块物理存储器从逻辑上分成多块,分成后的每块存储器的存储深度与原存储器的存储深度保持一致,每块存储器对应的Hash算法不同。

比如一块物理上32K深度的物理Memory,可以从逻辑上分成四块32K的Memory,为描述方便,可以标记为Memory1、Memory2、Memory3、Memory4。即将一块物理Memory从逻辑上分成了四块,每块的存储深度是均等的,每块物理Memory对应一个Hash算法,每块物理Memory之间Hash算法互不相同。如Memory1对应Hash1,Memory2对应Hash2,Memory3对应Hash3,Memory4对应Hash4。

步骤2,每一块存储器使用一个Hash算法进行Hash运算,得到一个hash值对应的链表入口,每块存储器使用的Hash算法均不相同。

即将原存储器采用不同的Hash算法进行多次Hash运算,如上述分成的四块Memory,每块采用不同的Hash函数来计算,如对于当前需要存储的数据,Memory1、Memory2、Memory3和Memory4分别采用各自对应的Hash函数计算得到一个hash值,每个hash值对应hash表的一个链表入口。

优选地,本实施例中,存储器采用的Hash函数选用本原多项式,且采用的多个本原多项式是不同的且是互质的。如将原始存储器使用x13+x8+x6+x+1、x13+x7+x6+x+1、x13+x5+x2+x+1、x13+x4+x3+x+1这几个不同的本原多项式做4次Hash运算,计算得到不同的Hash值。由于本原多项式相互之间是互质的,能够很好的平衡各个逻辑Memory之间的Hash算法。

步骤3,将Hash算法输入的key与存储器存储条目内的数据进行一一比对,为当前需要存储的数据找到一个空的存储条目。

即判断链表入口对应的存储条目中是否已存有数据,如果没有,则该条目为空的,表明可以存储数据,此时可将当前需要存储的数据存储到该存储条目中。理论上只要对同一物理Memory应用多次不同的hash算法,总是能够为当前需要存储的数据找到一个空的条目,从而能有效降低hash冲突发生概率。

这样,本发明实施例1和实施例2产生的Hash冲突概率相当于用多块物理Memory所得到的冲突概率。

对应的,结合图5所示,本发明所揭示的一种降低Hash冲突概率的装置,包括:

分块模块,用于将一块物理存储器分成多块,分成的存储器的存储深度小于或等于原存储器的深度。

如上述将一块物理上32K深度的物理Memory,从上至下划分成四块8K的Memory,当然,分成的多块存储器的存储深度也可以是不均等的。或者将一块物理上32K深度的物理Memory从逻辑上分为四块32K深度的物理Memory。

Hash运算模块,用于对其对应的存储器使用一个Hash算法进行Hash运算,得到多个hash值对应的链表入口。分成后的每块存储器对应一个Hash运算模块,且Hash运算模块之间使用的Hash算法均不相同。

优选地,Hash运算模块采用的Hash函数优选为本原多项式。

比对模块,用于将Hash算法输入的key与存储器存储条目内的数据相一一比对,为当前需要存储的数据找到一个空的存储条目。

每个模块的具体实现原理可参照上述方法中的具体描述,这里不再赘述。

本发明的技术内容及技术特征已揭示如上,然而熟悉本领域的技术人员仍可能基于本发明的教示及揭示而作种种不背离本发明精神的替换及修饰,因此,本发明保护范围应不限于实施例所揭示的内容,而应包括各种不背离本发明的替换及修饰,并为本专利申请权利要求所涵盖。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1