一种哈希表管理的方法和装置与流程

文档序号:14677079发布日期:2018-06-12 21:38阅读:249来源:国知局
一种哈希表管理的方法和装置与流程

本发明涉及通信技术领域,尤其涉及一种哈希表管理的方法和装置。



背景技术:

网络处理器是网络应用领域涉及的专用指令处理器,它专为网络分组处理而设计,可以使得网络系统具备高性能和高灵活性等特点。

网络处理器在进行信息查找时多使用哈希表来建立信息的索引关系,从而实现信息的快速查找。这里,哈希表中使用哈希(Hash)算法来建立索引关系,这种方法的基本思想是:在查找键值k和对应信息的存储位置p之间建立一个对应关系f,使得p=f(k),f即为一种哈希算法。在使用网络处理器进行信息查询时,利用哈希算法计算键值对应的哈希表项信息的存储地址,这样便可以直接通过存储地址查找到键值对应的哈希表项信息。

但是在使用哈希表进行信息查询时,不同的键值可能会映射到哈希表中同一存储地址上,即k1≠k2,但f(k1)=f(k2),这种现象称为哈希冲突,如何解决哈希冲突已经成为提高网络处理器性能的关键问题。



技术实现要素:

为解决上述技术问题,本发明实施例期望提供一种哈希表管理的方法和装置,提高哈希冲突容纳的数量。

本发明的技术方案是这样实现的:

本发明实施例提供了一种哈希表管理的方法,包括:

使用链表存储发生哈希冲突的哈希键值对应的哈希表项,使用根表存储各个哈希键值对应的哈希表项、以及链表信息项,所述链表信息项用于指示链表中是否存在每个哈希键值对应的哈希表项;

获取哈希键值以及待存储的哈希表项;

依据所获取的哈希键值读取根表中的存储数据;在读取的存储数据中不包括链表信息项时,将所述待存储的哈希表项存储至根表中;在读取的存储数据中包括链表信息项时,将所述待存储的哈希表项存储至链表中。

上述方案中,在获取哈希键值后,所述方法还包括:根据所述根表对应的哈希函数,对所获取的哈希键值进行哈希计算,得到第一哈希值;

所述将所述待存储的哈希表项存储至根表中,包括:

所述根表中存在第一哈希值对应的哈希表项,在所述根表中根据第一哈希值读取哈希表项,在所获取的哈希键值与根表中读取出的哈希表项中的哈希键值匹配时,将所述根表中第一哈希值对应的哈希表项更新为待存储的哈希表项;在所获取的哈希键值与根表中读取出的哈希表项中的哈希键值不匹配,且所述根表中还存在哈希表项的存储位置时,在所述根表中插入待存储的哈希表项;

所述根表中不存在第一哈希值对应的哈希表项时,在所述根表中插入待存储的哈希表项。

上述方案中,所述使用链表存储发生哈希冲突的哈希键值对应的哈希表项,包括:

在读取的存储数据中不包括链表信息项,且所获取的哈希键值与根表中读取出的哈希表项中的哈希键值不匹配,且所述根表中不存在哈希表项的存储位置时,建立链表,在建立的链表中插入待存储的哈希表项。

上述方案中,在所述链表中插入待存储的哈希表项后,所述方法还包括:基于链表中插入的哈希表项,在所述根表中更新链表信息项。

上述方案中,所述链表信息项还用于指示链表中存在的哈希表项的地址信息;

所述将所述待存储的哈希表项存储至链表中,包括:

根据所述链表对应的哈希函数,对所获取的哈希键值进行哈希计算,得到第二哈希值;将所述链表信息项中与获取的哈希键值对应的哈希表项的地址信息记为第三哈希值;

在所述第三哈希值与第二哈希值相同时,在所述链表中根据第二哈希值读取哈希表项,在所获取的哈希键值与链表中读取出的哈希表项中的哈希键值匹配时,将所述链表中第二哈希值对应的哈希表项更新为待存储的哈希表项;在所获取的哈希键值与读取出的哈希表项中的哈希键值不匹配时,在所述链表中插入待存储的哈希表项;

在所述第三哈希值与第二哈希值不相同时,在所述链表中插入待存储的哈希表项。

上述方案中,在所述链表中插入待存储的哈希表项后,所述方法包括:基于插入的哈希表项更新链表信息项。

上述方案中,所述方法还包括:

获取用于进行哈希查找的查找键值;

根据查找键值在根表中进行哈希表项查找,得到哈希表项查找结果;

在哈希表项查找结果指示根表中存在所述查找键值对应的哈希表项时,在所述哈希表项查找结果中确定根表中与所述查找键值对应的哈希表项;

在哈希表项查找结果指示根表中不存在所述查找键值对应的哈希表项时,根据查找键值在链表中进行哈希表项查找,得到链表中与所述查找键值对应的哈希表项。

上述方案中,所述方法还包括:预先设置第一存储空间和第二存储空间,所述第二存储空间的容量大于第一存储空间的容量;

将所述根表中的哈希表项存储于第一存储空间或第二存储空间,将所述链表中的哈希表项存储于第二存储空间。

本发明实施例还提供了一种哈希表管理的装置,其特征在于,所述装置包括:链表和根表,其中:

链表,用于存储发生哈希冲突的哈希键值对应的哈希表项;

根表,用于存储链表信息项和各个哈希键值对应的哈希表项,所述链表信息项用于指示链表中是否存在每个哈希键值对应的哈希表项;

所述装置还包括:获取模块和处理模块;其中,

获取模块,用于获取哈希键值以及待存储的哈希表项;

处理模块,用于依据所获取的哈希键值读取根表中的存储数据;在读取的存储数据中不包括链表信息项时,将所述待存储的哈希表项存储至根表中;在读取的存储数据中包括链表信息项时,将所述待存储的哈希表项存储至链表中。

上述方案中,所述处理模块,还用于根据所述根表对应的哈希函数,对所获取的哈希键值进行哈希计算,得到第一哈希值;

相应地,所述处理模块,具体用于在所述根表中存在第一哈希值对应的哈希表项,在所述根表中根据第一哈希值读取哈希表项,在所获取的哈希键值与根表中读取出的哈希表项中的哈希键值匹配时,将所述根表中第一哈希值对应的哈希表项更新为待存储的哈希表项;在所获取的哈希键值与根表中读取出的哈希表项中的哈希键值不匹配,且所述根表中还存在哈希表项的存储位置时,在所述根表中插入待存储的哈希表项;在所述根表中不存在第一哈希值对应的哈希表项时,在所述根表中插入待存储的哈希表项。

上述方案中,所述处理模块,具体用于在读取的存储数据中不包括链表信息项,且所获取的哈希键值与根表中读取出的哈希表项中的哈希键值不匹配,且所述根表中不存在哈希表项的存储位置时,建立链表,在建立的链表中插入待存储的哈希表项。

上述方案中,所述处理模块,还用于在所述链表中插入待存储的哈希表项后,基于链表中插入的哈希表项,在所述根表中更新链表信息项。

上述方案中,所述链表信息项还用于指示链表中存在的哈希表项的地址信息;

所述处理模块,具体用于根据所述链表对应的哈希函数,对所获取的哈希键值进行哈希计算,得到第二哈希值;将所述链表信息项中与获取的哈希键值对应的哈希表项的地址信息记为第三哈希值;

所述处理模块,具体用于在所述第三哈希值与第二哈希值相同时,在所述链表中根据第二哈希值读取哈希表项,在所获取的哈希键值与链表中读取出的哈希表项中的哈希键值匹配时,将所述链表中第二哈希值对应的哈希表项更新为待存储的哈希表项;在所获取的哈希键值与读取出的哈希表项中的哈希键值不匹配时,在所述链表中插入待存储的哈希表项;在所述第三哈希值与第二哈希值不相同时,在所述链表中插入待存储的哈希表项。

上述方案中,所述处理模块,还用于在所述链表中插入待存储的哈希表项后,基于插入的哈希表项更新链表信息项。

上述方案中,所述装置还包括:查找模块;

所述查找模块,具体用于获取用于进行哈希查找的查找键值;根据查找键值在根表中进行哈希表项查找,得到哈希表项查找结果;在哈希表项查找结果指示根表中存在所述查找键值对应的哈希表项时,在所述哈希表项查找结果中确定根表中与所述查找键值对应的哈希表项;在哈希表项查找结果指示根表中不存在所述查找键值对应的哈希表项时,根据查找键值在链表中进行哈希表项查找,得到链表中与所述查找键值对应的哈希表项。

上述方案中,所述装置还包括:第一存储空间和第二存储空间,所述第二存储空间的容量大于第一存储空间的容量;

所述根表中的哈希表项的存储位置为第一存储空间或第二存储空间,所述链表中的哈希表项的存储位置为第二存储空间。

本发明实施例提供的一种哈希表管理的方法和装置,使用链表存储发生哈希冲突的哈希键值对应的哈希表项,使用根表存储各个哈希键值对应的哈希表项、以及链表信息项,所述链表信息项用于指示链表中是否存在每个哈希键值对应的哈希表项;获取哈希键值以及待存储的哈希表项;依据所获取的哈希键值读取根表中的存储数据;在读取的存储数据中不包括链表信息项时,将所述待存储的哈希表项存储至根表中;在读取的存储数据中包括链表信息项时,将所述待存储的哈希表项存储至链表中。如此,提高了哈希冲突容纳的数量。

附图说明

图1为本发明哈希表管理的方法的第一实施例的流程图;

图2为本发明实施例中哈希表项的结构示意图;

图3为本发明实施例中链表信息项的结构示意图;

图4为本发明哈希表管理的方法的第二实施例的流程图;

图5为本发明实施例哈希表管理的装置的第一组成结构示意图;

图6为本发明实施例哈希表管理的装置的第二组成结构示意图;

图7为本发明实施例中根表查找模块内部结构示意图;

图8为本发明实施例中链表查找模块内部结构示意图;

图9为本发明实施例中查找请求调度模块内部结构示意图;

图10为本发明实施例中查找返回调度模块内部结构示意图;

图11为本发明实施例中软件表项管理模块内部结构示意图。

具体实施方式

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

图1为本发明哈希表管理的方法的第一实施例的流程图,如图1所示,该方法包括:

步骤10:使用链表存储发生哈希冲突的哈希键值对应的哈希表项,使用根表存储各个哈希键值对应的哈希表项、以及链表信息项,所述链表信息项用于指示链表中是否存在每个哈希键值对应的哈希表项。

图2为本发明实施例中哈希表项的结构示意图,如图2所示,哈希表项包括:哈希表项表示标识、哈希表项头信息n和哈希表项n,n取大于0的整数。哈希表项表示标识用于标识当前数据为哈希表项,哈希表项头信息n用于确定哈希表项n的位置,哈希表项n为哈希键值n对应的哈希表项。需要说明的是,在对哈希表项信息进行读取时,由于读取数据的大小是由传输数据的位宽而决定,位宽越大获得的哈希表项信息越多即n值越大。相反n值越小。

图3为本发明实施例中链表信息项的结构示意图,如图3所示,链表信息项的组成包括:链表信息项表示标识、链表比对信息和链表地址信息。其中,链表信息项表示标识用于标识链表信息项,链表比对信息用于指示哈希键值对应的哈希表项是否存储在链表中,链表地址信息用于指示哈希键值对应的哈希表项在链表中的存储位置。例如,链表比对信息包括:A、B、C;链表地址信息包括:a、b。其中,A、B对应的哈希表项的实际存储地址为a,C对应的哈希表项的实际存储地址为b,对待存储的哈希表项信息计算后得到A′,如果A、B、C中的一个与A′相等,说明链表存在对应的哈希表项,且可以确定存储位置;否则说明链表不存在对应的哈希表项。

步骤11:获取哈希键值以及待存储的哈希表项。

步骤12:依据所获取的哈希键值读取根表中的存储数据;在读取的存储数据中不包括链表信息项时,将所述待存储的哈希表项存储至根表中;在读取的存储数据中包括链表信息项时,将所述待存储的哈希表项存储至链表中。

本步骤中,依据所获取的哈希键值读取根表中的存储数据,读取的存储数据中包括:根表中存储的哈希键值对应的哈希表项信息,或者根表的链表信息项。示例性的,可以判断链表信息项表示标识是否为1,如果是,确定存储数据中包括链表信息项,如果否,确定存储数据中不包括链表信息项。

在实际实施时,在获取哈希键值后,所述方法还包括:根据所述根表对应的哈希函数,对所获取的哈希键值进行哈希计算,得到第一哈希值。第一哈希值用于判断哈希键值对应的哈希表项是否存储在根表中。

这里,根表中对应的哈希函数可以是:p=f(k),其中,k为哈希键值,p对应着哈希表项的存储地址p,f即为k和p之间建立的哈希函数。f可以为除留余数法kmodA(A≤m)、随机数法random(k)等。

本步骤中,将所述待存储的哈希表项存储至根表中,包括:根表中存在第一哈希值对应的哈希表项,在所述根表中根据第一哈希值读取哈希表项,在所获取的哈希键值与根表中读取出的哈希表项中的哈希键值匹配时,将所述根表中第一哈希值对应的哈希表项更新为待存储的哈希表项;在所获取的哈希键值与根表中读取出的哈希表项中的哈希键值不匹配,且所述根表中还存在哈希表项的存储位置时,在所述根表中插入待存储的哈希表项。

当根表中不存在第一哈希值对应的哈希表项时,在所述根表中插入待存储的哈希表项。

在实际实施时,在使用链表存储发生哈希冲突的哈希键值对应的哈希表项之前,还包括:建立链表。

这里,在读取的存储数据中不包括链表信息项,且所获取的哈希键值与根表中读取出的哈希表项中的哈希键值不匹配,且所述根表中不存在哈希表项的存储位置时,建立链表,在建立的链表中插入待存储的哈希表项。

在所述链表中插入待存储的哈希表项后,还包括:基于链表中插入的哈希表项,在所述根表中更新链表信息项。

本步骤中,所述链表信息项还用于指示链表中存在的哈希表项的地址信息;

优选地,将待存储的哈希表项存储至链表中可以包括:根据所述链表对应的哈希函数,对所获取的哈希键值进行哈希计算,得到第二哈希值;将所述链表信息项中与获取的哈希键值对应的哈希表项的地址信息记为第三哈希值。

需要说明的是,链表对应的哈希函数是不同于根表哈希函数的另一种哈希函数。第二哈希值和第三哈希值都是哈希键值通过链表对应的哈希函数计算后得到的。

在所述第三哈希值与第二哈希值相同时,在所述链表中根据第二哈希值读取哈希表项,在所获取的哈希键值与链表中读取出的哈希表项中的哈希键值匹配时,将所述链表中第二哈希值对应的哈希表项更新为待存储的哈希表项;在所获取的哈希键值与读取出的哈希表项中的哈希键值不匹配时,在所述链表中插入待存储的哈希表项。

在所述第三哈希值与第二哈希值不相同时,在所述链表中插入待存储的哈希表项。

在所述链表中插入待存储的哈希表项后,还包括:基于插入的哈希表项更新链表信息项。

优选的,在对待存储的哈希表项进行存储时,还包括:预先设置第一存储空间和第二存储空间,所述第二存储空间的容量大于第一存储空间的容量;将所述根表中的哈希表项存储于第一存储空间或第二存储空间,将所述链表中的哈希表项存储于第二存储空间。

这里,第二存储空间可以是任意大小的,因此将大容量的哈希表项或者产生哈希冲突的哈希表项存储到第二存储空间中,实现了对哈希表项的存储位置进行灵活的管理,提高了哈希冲突的容纳数量。

需要说明的是,哈希表项在根表中存储时如果产生了哈希冲突,需要将冲突的哈希表项存入到链表中,此时的链表信息项可以按照图3所示的格式存储到根表中哈希冲突所在的存储单元中,这样当对存在哈希冲突的哈希表项进行查找时,可以将链表信息项返回,从而进一步的查找链表中保存的冲突哈希表项。

在实际实施时,在将待存储的哈希表项存储完毕后,还可以包括根据输入键值查找对应的哈希表项。

可选的,查找哈希表项的方法可以包括:

获取用于进行哈希查找的查找键值;

根据查找键值在根表中进行哈希表项查找,得到哈希表项查找结果;

在哈希表项查找结果指示链表中不存在所述查找键值对应的哈希表项时,在所述哈希表项查找结果中确定根表中与所述查找键值对应的哈希表项;

在哈希表项查找结果指示链表中存在所述查找键值对应的哈希表项时,根据查找键值在链表中进行哈希表项查找,得到链表中与所述查找键值对应的哈希表项。

本发明实施例中,使用链表存储发生哈希冲突的哈希键值对应的哈希表项,使用根表存储各个哈希键值对应的哈希表项、以及链表信息项,所述链表信息项用于指示链表中是否存在每个哈希键值对应的哈希表项;获取哈希键值以及待存储的哈希表项;依据所获取的哈希键值读取根表中的存储数据;在读取的存储数据中不包括链表信息项时,将所述待存储的哈希表项存储至根表中;在读取的存储数据中包括链表信息项时,将所述待存储的哈希表项存储至链表中。如此,提高了哈希冲突容纳的数量。

第二实施例

为了能更加体现本发明的目的,在本发明第一实施例的基础上,进行进一步的举例说明。

图4为本发明哈希表管理的方法的第二实施例的流程图,该方法包括:

步骤40:输入待存储的哈希表项信息。

这里,待存储的哈希表项信息可以包括:待存储的哈希表项、待存储的哈希表项对应的键值、键值类型和大小等信息。

步骤41:根据哈希表项信息得到的存储地址访问根表读取存储数据。

本步骤中,先对哈希表项信息中的键值使用第一哈希函数进行运算得到第一哈希值,这里的第一哈希值可以是对应的哈希表项在根表中的存储地址,也可以是一个偏移地址,加上基地址后得到最终的存储地址。通过得到的存储地址访问根表中的存储数据。

这里,获得的存储数据可以是:根表中存储的哈希表项信息,或者根表中的链表信息项。当根据待存储的哈希表项对应的键值可以在根表中找到相同键值的哈希表项时,直接获得该哈希表项,当找不到相同键值的哈希表项时,获得链表信息项。

需要说明的是,访问存储地址中的数据的目的是,判断当前输入的待存储的哈希表项信息是用于更新根表或链表中已有的表项信息,还是作为新的哈希表项信息插入到根表或链表中。

步骤42:判断获得的数据是否为链表信息项,如果是,执行步骤43;如果否,执行步骤44。

本步骤中,判断获得的数据是否为链表信息项的目的是:判断将输入的存储信息存入到根表中还是链表中。

优选的,可通过判断读取的数据中是否存在链表信息项表示标识,来确定获得的数据是否为链表信息项。

步骤43:获得键值对应的第二哈希值,判断链表信息项中是否存储与第二哈希值相等的第三哈希值,如果是,执行步骤431;如果否,执行步骤432。

本步骤中,对存储信息中的键值使用第二哈希函数进行运算得到第二哈希值,将第二哈希值与链表信息项中的链表对比信息中存储的所有的第三哈希值比较,当存在与第二哈希值相等的第三哈希值时,说明此时的存储信息是用来更新链表中的哈希表项的;当不存在与第二哈希值相等的第三哈希值时,说明此时的存储信息是作为新的哈希表项插入到链表中的。

步骤431:根据链表中与第二哈希值对应的表项信息,判断哈希表项对应的键值是否与输入键值相等,如果是,执行步骤45;如果否,执行步骤432。

步骤432:判断链表是否存满,如果是,执行步骤46;如果否,执行步骤433。

步骤433:将待存储哈希表项信息插入到链表中,并更新根表中的链表信息项。

本步骤中,在将存储信息是作为新的哈希表项插入到链表中后,需要将存储信息中的键值对应的第二哈希值存入到链表信息项的链表比对信息中,同时更新链表地址信息,为该第二哈希值对应的哈希表项分配存储地址。

可以理解的是,在本步骤执行完毕后当前存储信息已经成功的保存到链表中,哈希表项管理结束,执行步骤47。

步骤44:判断从根表中读取的哈希表项是否有效,如果是,执行步骤442;如果否,执行步骤441。

本步骤中,判断哈希表项是否有效的方法可以是:通过判断读取的存储数据中,哈希表项头信息中的哈希表项有效标识位是否为1,如果是,表示当前读取的哈希表项有效;如果否,表示读取的数据中不包括任何哈希表项。此时需要将待存储信息插入到根表中。

步骤441:将待存储的哈希表项信息插入到根表中后,执行步骤47。

步骤442:判断哈希表项对应的键值是否与输入键值相等,如果是,执行步骤45;如果否,执行步骤443。

步骤443:判断根表是否存满,如果是,执行步骤444;如果否,执行步骤441。

步骤444:申请建立链表,用于存储输入信息,并判断是否申请成功,如果是,执行步骤445;如果否,执行步骤46。

步骤445:将输入信息存储到链表中,并更新根表中的链表信息项,执行步骤47。

步骤45:利用输入的哈希表项信息更新表中对应的哈希表项信息。

这里,在确定输入的键值及对应的哈希表项在当前根表或者链表中已经存在时,说明当前输入的信息是用来更新根表或者链表中对应的信息,在执行完更新操作后,执行步骤47。

步骤46:存储失败。

步骤47:存储结束。

根据上述表项管理方法可以看出,待存储的哈希表项信息对根表的更新和插入过程相同;待存储的哈希表项信息插入到链表时,需要对根表中链表信息项进行更新,而更新链表时,只需要替换对应的哈希表项信息不需要更新链表信息项。

在实际实施时,当需要查询哈希表项信息时,用户只需要输入查询信息,这里的查询信息包括:待查询的哈希表项对应的键值、键值类型和大小等信息。需要说明的是,查询流程和存储流程在数据的读取和键值的比较的过程是相同的,只是删除了哈希表项的插入或者更新的步骤。

第三实施例

针对本发明实施例的方法,本发明实施例还提供了一种哈希表管理的装置,图5为本发明实施例哈希表管理的装置的第一组成结构示意图,如图5所示,该装置包括:链表和根表;其中,

链表,用于存储发生哈希冲突的哈希键值对应的哈希表项;

根表,用于存储链表信息项和各个哈希键值对应的哈希表项,所述链表信息项用于指示链表中是否存在每个哈希键值对应的哈希表项;

所述装置还包括:获取模块50和处理模块51;其中,

获取模块50,用于获取哈希键值以及待存储的哈希表项。

处理模块51,用于依据所获取的哈希键值读取根表中的存储数据;在读取的存储数据中不包括链表信息项时,将所述待存储的哈希表项存储至根表中;在读取的存储数据中包括链表信息项时,将所述待存储的哈希表项存储至链表中。

优选地,所述处理模块51,还用于根据所述根表对应的哈希函数,对所获取的哈希键值进行哈希计算,得到第一哈希值;

相应地,所述处理模块51,具体用于在所述根表中存在第一哈希值对应的哈希表项,在所述根表中根据第一哈希值读取哈希表项,在所获取的哈希键值与根表中读取出的哈希表项中的哈希键值匹配时,将所述根表中第一哈希值对应的哈希表项更新为待存储的哈希表项;在所获取的哈希键值与根表中读取出的哈希表项中的哈希键值不匹配,且所述根表中还存在哈希表项的存储位置时,在所述根表中插入待存储的哈希表项;在所述根表中不存在第一哈希值对应的哈希表项时,在所述根表中插入待存储的哈希表项。

优选地,所述处理模块51,具体用于在读取的存储数据中不包括链表信息项,且所获取的哈希键值与根表中读取出的哈希表项中的哈希键值不匹配,且所述根表中不存在哈希表项的存储位置时,建立链表,在建立的链表中插入待存储的哈希表项。

优选地,所述处理模块51,还用于在所述链表中插入待存储的哈希表项后,基于链表中插入的哈希表项,在所述根表中更新链表信息项。

优选地,所述链表信息项还用于指示链表中存在的哈希表项的地址信息;

所述处理模块51,具体用于根据所述链表对应的哈希函数,对所获取的哈希键值进行哈希计算,得到第二哈希值;将所述链表信息项中与获取的哈希键值对应的哈希表项的地址信息记为第三哈希值;

所述处理模块51,具体用于在所述第三哈希值与第二哈希值相同时,在所述链表中根据第二哈希值读取哈希表项,在所获取的哈希键值与链表中读取出的哈希表项中的哈希键值匹配时,将所述链表中第二哈希值对应的哈希表项更新为待存储的哈希表项;在所获取的哈希键值与读取出的哈希表项中的哈希键值不匹配时,在所述链表中插入待存储的哈希表项;在所述第三哈希值与第二哈希值不相同时,在所述链表中插入待存储的哈希表项。

优选地,所述处理模块51,还用于在所述链表中插入待存储的哈希表项后,基于插入的哈希表项更新链表信息项。

优选地,所述装置还包括:查找模块;

所述查找模块,具体用于获取用于进行哈希查找的查找键值;根据查找键值在根表中进行哈希表项查找,得到哈希表项查找结果;在哈希表项查找结果指示根表中存在所述查找键值对应的哈希表项时,在所述哈希表项查找结果中确定根表中与所述查找键值对应的哈希表项;在哈希表项查找结果指示根表中不存在所述查找键值对应的哈希表项时,根据查找键值在链表中进行哈希表项查找,得到链表中与所述查找键值对应的哈希表项。

优选地,所述装置还包括:第一存储空间和第二存储空间,所述第二存储空间的容量大于第一存储空间的容量;

所述根表中的哈希表项的存储位置为第一存储空间或第二存储空间,所述链表中的哈希表项的存储位置为第二存储空间。

在实际实施时,第一存储空间可以是装置内部的片内存储单元,第二存储空间可以时装置外部的片外存储单元,片外存储单元的存储空间远大与片内存储单元的,可以将全部或部分的根表,以及全部的链表存入到片外存储单元,提高装置的工作效率。

在实际应用中,获取模块50和处理模块51均可由位于终端设备中的中央处理器(Central Processing Unit,CPU)、微处理器(Micro Processor Unit,MPU)、数字信号处理器(Digital Signal Processor,DSP)、或现场可编程门阵列(Field Programmable Gate Array,FPGA)等实现。

第四实施例

图6为本发明实施例哈希表管理的装置的第二组成结构示意图,该装置可以包括:用户接口101、根表查找模块102、链表查找模块103、查找请求调度模块104、外部存储管理模块105、外部存储模块106、查找返回调度模块107、软件表项管理模块108和内部存储模块109。

其中,用户接口101、根表查找模块102、链表查找模块103、查找请求调度模块104、外部存储管理模块105和查找返回调度模块107用于对哈希表项的查找管理。

软件表项管理模块108,对哈希表项的存储管理。

外部存储模块106和内部存储模块109,用于实现哈希表项的灵活存储。

其中,本发明实施例提供的哈希表项管理装置,在进行哈希表项查找时各模块的具体操作过程如下:

图7为本发明实施例中根表查找模块内部结构示意图,如图7所示,根表查找模块包括:根表缓存单元201、根表解析单元202和根表处理单元203。根表查找模块102接收用户接口101传递来的查找信息,查找信息包括:键值、键值类型和大小等;将查找信息放入根表缓存单元201中,并将键值发送到装置的内部存储模块109中,内部存储模块109根据键值计算出第一哈希值,并第一哈希值对应的返回数据发送给根表处理单元203;同时根表解析单元202根据键值也计算出第一哈希值,生成查找请求发送给查找请求调度模块104,查找请求可以包括:全部的查找信息、指示查找外部存储模块106的触发信号等。查找请求调度模块104请求从外部存储模块查找对应的哈希表项,将获得第一哈希值对应的返回数据发送给根表处理单元203;根表处理单元203从缓存单元201中读出查找信息并与获得的返回数据进行匹配,如果匹配,说明返回数据中包含键值对应的哈希表项,则直接将返回数据发送至查找返回调度模块107,返回数据的结构如图2所示;如果不匹配,说明返回数据中不包含键值对应的哈希表项,需要进行链表查找,此时向链表查找模块103发起查找请求,返回数据中的链表信息项的结构如图3所示。

这里,当根表查找模块未获得待查找的哈希表项,而获得的是链表信息项,此时通过解析链表信息项自动进行链表查找,可以提高表项的查找效率。

可选的,根表处理单元203从根表缓存单元201中读出查找信息并与获得的返回数据进行匹配,包括:将查找信息中的键值、键值类型和大小等与返回数据中哈希表项对应的键值、键值类型和大小等信息进行一一比较,当所有的信息均相同时,确定数据匹配,返回的数据中包含要查找的哈希表项;如果至少有一项不相同,确定数据不匹配,返回的数据中不包含要查找的哈希表项。

图8为本发明实施例中链表查找模块内部结构示意图,如图8所示,链表查找模块包括:链表缓存单元301、链表解析单元302和链表处理单元303。根表查找模块102向链表查找模块103发起查找请求后,查找请求被存入到链表缓存单元301和链表解析单元302,链表解析单元302对查找请求解析后发往查找请求调度模块104,查找请求调度模块104向外部存储管理模块105申请相应的查询操作,外部存储管理模块105完成对外部存储模块106的查询并将查询结果返回到链表处理单元303;链表处理单元303从链表缓存单元301中读出查找请求中包含的查找信息并与获得的查询结果进行对比,将对比结果发送至查找返回调度模块107。这里,在链表中查找到与键值对应的哈希表项时,将获得的哈希表项返回;在链表中未查找到与键值对应的哈希表项时,可以返回提示信息表示未查找到对应哈希表项。

图9为本发明实施例中查找请求调度模块内部结构示意图,如图9所示,查找请求调度模块104包括:根表查找缓存单元401、链表查找缓存单元402和查找请求调度单元403。根表查找缓存单元401和链表查找缓存单元402分别缓存根表解析单元202和链表解析单元302产生的查找请求。查找请求调度单元403在读取两个缓存单元中的查找请求后,为查找请求加上查找类型标志再发送到外部存储管理模块105。这里,查找类型标识可以标识当前需要查找的是根表内容还是链表内容,可选的,可以通过设置一个查找类型标志位来区分当前查找对象,当查找类型标志位为1时,表明查找对象为根表中的表项信息;当查找类型标志位为0时,表明查找对象为链表中的表项信息。通过设置查找类型标识可以提高哈希表项的查找效率。

图10为本发明实施例中查找返回调度模块内部结构示意图,如图10所示,查找返回调度模块107包括:根表查找结果缓存单元701、链表查找结果缓存单元702和查找返回调度单元703。根表查找结果缓存单元701和链表查找结果缓存单元702分别缓存根表处理单元303和链表处理单元403产生的查找返回结果,查找返回调度单元703读取两个缓存单元中的查找结果,并将其通过用户接口101返回给用户。

本发明实施例提供的哈希表项管理装置,在进行哈希表项存储时各模块的具体操作过程如下:

图11为本发明实施例中软件表项管理模块内部结构示意图,如图11所示,软件表项管理模块108可以包括:主设备801、软件管理单元802、软件缓存单元803。

主设备801在对哈希表项进行存储时,先通过软件管理单元802判断将哈希表项存储到根表还是链表中,当确定了哈希表项存储的存储位置后,软件管理单元802将哈希表项先缓存到软件缓存单元803中,软件缓存再通过外设部件互连标准总线(Peripheral Component Interconnect Express,PCIE)接口写入到外部存储模块106中。需要说明的是,为了减少装置内部存储模块占用率提高装置运行效率,可以将根表和链表都存储到外部存储模块;也可以将根表中较小的哈希表项存储到内部存储模块中,将较大的哈希表项存储在外部存储模块中。

这里,哈希表项管理装置在进行哈希表项查找时,可以采用流水线的方法,对于同一级表项,即同属根表的表项或链表的表项。由于存储位置和查找流程均一致,查找接口可以对同一级查找实现顺序查找。对于不同级的查找,即查找的表项分别处于根表和链表中,查找接口也可以根据获得查找请求的先后顺序进行查找。

本发明实施例在哈希表项查找的过程中,可以同时实现哈希表项的存储管理,如果表项存储的过程中出现错误,则可以将错误标识返回给哈希表项管理装置,再由管理装置对错误情况进行处理,例如,重新存储表项或阻止对错误表项的查找等。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

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