一种表项数据存储、查询方法及其装置与流程

文档序号:14870733发布日期:2018-07-06 23:20阅读:166来源:国知局

本申请涉及通信技术领域,尤其是一种表项数据存储、查询方法及其装置。



背景技术:

网络设备通常会存储大量操作表,如mac(mediaaccesscontrol,介质访问控制)表、路由表等,网络设备可以基于操作表进行相关操作。如mac表用于记录mac地址与出接口的对应关系,网络设备通过报文的目的mac地址查询mac表,得到与目的mac地址对应的出接口,并通过该出接口发送该报文。

为了实现操作表的管理,常用的数据结构是hash(散列),即通过hash算法将任意长度的输入转换成固定长度的输出,该输出就是hash值。例如,网络设备在存储mac表时,通过hash算法将mac地址a转换为hash值1,并在mac表中记录hash值1与出接口a的对应关系。这样,网络设备在发送报文时,通过hash算法将报文的目的mac地址(假设为mac地址a)转换为hash值1,并通过hash值1查询mac表,得到对应的出接口为出接口a。

但是,在使用hash算法进行转换时,不同的输入可能对应相同的输出,从而导致查表结果发生冲突。例如,网络设备通过hash算法将mac地址a转换为hash值1,并在mac表中记录hash值1与出接口a的对应关系;通过hash算法将mac地址b转换为hash值1,并在mac表中记录hash值1与出接口b的对应关系。这样,网络设备在发送报文时,通过hash算法将报文的目的mac地址(假设为mac地址a)转换为hash值1,并通过hash值1查询mac表,得到对应的出接口为出接口a和出接口b,显然,出接口发生了冲突。



技术实现要素:

本申请提供一种表项数据存储方法,所述方法包括:

获取待存储的表项数据,将所述表项数据存储到结果表,并确定所述表项数据在所述结果表的存储位置;其中,所述表项数据包括关键字和查找结果;

根据第一hash算法对所述关键字进行转换,得到第一hash值,并根据第二hash算法对所述关键字进行转换,得到第二hash值;

从索引表中确定所述第一hash值对应的第一索引表页;若第一索引表页不存在空闲的数据结构,则在索引表的第二索引表页中查询空闲的数据结构,并在查询到的数据结构中记录所述第二hash值与所述存储位置的对应关系。

所述在索引表的第二索引表页中查询空闲的数据结构的过程,具体包括:

若第一索引表页记录存在冲突,则从第一索引表页中读取第二索引表页的位置信息,并在所述位置信息对应的第二索引表页中查询空闲的数据结构;

若第一索引表页记录不存在冲突,则在第一索引表页记录存在冲突,从所述索引表中选择具有空闲数据结构的第二索引表页,从选择的第二索引表页中查询空闲的数据结构,并在第一索引表页记录选择的第二索引表页的位置信息。

所述在查询到的数据结构中记录所述第二hash值与所述存储位置的对应关系之后,所述方法还包括:

在所述第二索引表页中对查询到的数据结构进行标记;其中,所述标记用于表示所述第二索引表页中被所述第一索引表页所占用的数据结构。

所述从所述索引表中选择具有空闲数据结构的第二索引表页的过程,具体包括:获取所述第一索引表页之外的其它每个索引表页的空闲数据结构数量;

将空闲数据结构数量最多的索引表页选择为第二索引表页。

本申请提供一种表项数据查询方法,所述方法包括:

获取待查询的目标关键字;

根据第一hash算法对所述目标关键字进行转换,得到第一hash值,并根据第二hash算法对所述目标关键字进行转换,得到第二hash值;

从索引表中确定所述第一hash值对应的第一索引表页;

若所述第一索引表页存在关联的第二索引表页,则从所述第一索引表页和所述第二索引表页中确定所述第二hash值对应的数据结构;

基于所述第二hash值对应的数据结构记录的存储位置,从结果表中查询与所述目标关键字对应的查找结果。

所述从所述第二索引表页中确定所述第二hash值对应的数据结构的过程,具体包括:从所述第二索引表页中查询具有标记的数据结构,并从查询到的数据结构中确定所述第二hash值对应的数据结构,其中,所述标记用于表示所述第二索引表页中被所述第一索引表页所占用的数据结构。

所述方法还包括:

若第一索引表页记录存在冲突,则从第一索引表页中读取第二索引表页的位置信息,并利用所述位置信息确定与第一索引表页关联的第二索引表页。

本申请提供一种表项数据存储装置,所述装置包括:

获取模块,用于获取待存储的表项数据,将所述表项数据存储到结果表,并确定所述表项数据在所述结果表的存储位置;其中,所述表项数据包括关键字和查找结果;根据第一hash算法对所述关键字进行转换,得到第一hash值,并根据第二hash算法对所述关键字进行转换,得到第二hash值;

处理模块,用于从索引表中确定第一hash值对应的第一索引表页;若第一索引表页不存在空闲的数据结构,则在索引表的第二索引表页中查询空闲的数据结构,在查询到的数据结构中记录第二hash值与所述存储位置的对应关系。

所述处理模块,具体用于在索引表的第二索引表页中查询空闲的数据结构的过程中,若第一索引表页记录存在冲突,则从第一索引表页中读取第二索引表页的位置信息,并在所述位置信息对应的第二索引表页中查询空闲的数据结构;若第一索引表页记录不存在冲突,则在第一索引表页记录存在冲突,从所述索引表中选择具有空闲数据结构的第二索引表页,从选择的第二索引表页中查询空闲的数据结构,并在第一索引表页记录选择的第二索引表页的位置信息。

所述处理模块,还用于在所述第二索引表页中对查询到的数据结构进行标记;所述标记用于表示所述第二索引表页中被所述第一索引表页所占用的数据结构;所述处理模块,具体用于在从所述索引表中选择具有空闲数据结构的第二索引表页的过程中,获取所述第一索引表页之外的其它每个索引表页的空闲数据结构数量;将空闲数据结构数量最多的索引表页选择为第二索引表页。

本申请提供一种表项数据查询装置,所述装置包括:

获取模块,用于获取待查询的目标关键字;根据第一hash算法对所述目标关键字进行转换,得到第一hash值,并根据第二hash算法对所述目标关键字进行转换,得到第二hash值;

确定模块,用于从索引表中确定所述第一hash值对应的第一索引表页;若所述第一索引表页存在关联的第二索引表页,则从所述第一索引表页和所述第二索引表页中确定所述第二hash值对应的数据结构;

查询模块,用于基于所述第二hash值对应的数据结构记录的存储位置,从结果表中查询与所述目标关键字对应的查找结果。

所述确定模块,具体用于在从所述第二索引表页中确定所述第二hash值对应的数据结构的过程中,从所述第二索引表页中查询具有标记的数据结构,并从查询到的数据结构中确定所述第二hash值对应的数据结构,其中,所述标记用于表示所述第二索引表页中被所述第一索引表页所占用的数据结构;

所述确定模块,还用于当所述第一索引表页记录存在冲突,则从所述第一索引表页中读取第二索引表页的位置信息,并利用所述位置信息确定与所述第一索引表页关联的第二索引表页。

基于上述技术方案,本申请实施例中,可以采用双hash算法实现表项数据的存储和查询,大大降低冲突的概率,节省存储空间,解决冲突页表占用大量空间空闲,浪费存储空间的问题,可以在硬件上实现,能够保证设备处理性能。

附图说明

为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本申请实施例的这些附图获得其他的附图。

图1是本申请一种实施方式中的双hash表的结构示意图;

图2是本申请一种实施方式中的表项数据存储方法的流程图;

图3是本申请一种实施方式中的表项数据查询方法的流程图;

图4是本申请一种实施方式中的drambank复制的示意图;

图5是本申请一种实施方式中的表项数据存储装置的结构图;

图6是本申请一种实施方式中的网络设备的硬件结构图;

图7是本申请一种实施方式中的表项数据查询装置的结构图;

图8是本申请另一种实施方式中的网络设备的硬件结构图。

具体实施方式

在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请。本申请和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

本申请实施例提出一种表项数据存储及查询方法,可以应用于网络设备(如路由器、交换机等),该表项数据可以包括关键字(key)和查找结果(result),该表项数据是需要存储到操作表的数据。其中,该操作表可以包括但不限于mac表、路由表等,当操作表是mac表时,关键字可以是mac地址,查找结果可以是与该mac地址对应的出接口,当操作表是路由表时,关键字可以是ip地址,查找结果可以是与该ip地址对应的出接口,对此表项数据的内容不做限制。

为了解决查表结果冲突的问题,可以采用双hash算法进行表项数据的存储和查询,双hash算法是指:使用两个hash算法进行两次hash转换操作,并根据两次hash转换操作的结果进行表项数据的存储和查询。进一步的,为了实现表项数据的存储和查询,网络设备存储有结果表、索引表和冲突页表,其中,该索引表和该冲突页表是第一级子表,而该结果表是第二级子表。虽然索引表和冲突页表均是第一级子表,但是,索引表和冲突页表均独立设置,即索引表包括多个索引表页,冲突页表包括多个冲突表页,且索引表页与冲突表页不同。而且,每个索引表对应一个或者多个冲突页表,且冲突页表只记录较少的内容,即冲突页表的大量空间空闲,冲突页表的空间占用率不足,浪费大量存储空间。

针对上述发现,本申请实施例中提出的表项数据存储及查询方法,其应用场景可以参见图1所示,网络设备存储有结果表以及索引表,其中,该索引表是第一级子表,该结果表是第二级子表。但是,该网络设备并没有设置冲突页表,而是使用索引表中的不同索引表页来记录发生冲突的数据结构。

在结果表中,每个条目用于记录一个表项数据,也就是用于记录关键字和查找结果。此外,索引表可以包括多个存储空间,每个存储空间对应一个索引表页(sig_page),因此索引表可以包括多个索引表页,如图1中的sig_page[0]、sig_page[1]、sig_page[n-1]等,均是索引表页,而且,sig_page[0]占用一个存储空间,sig_page[1]占用另一个存储空间,以此类推。此外,每个索引表页的一行是一个数据结构,且每个索引表页可以包括至少一个数据结构,参见图1所示,索引表页一共包括n个数据结构,也就是说,一个存储空间存储n个数据结构。

在索引表页的每个数据结构中,可以包括有效位(valid)、签名(signature)、索引(index)。其中,数据结构的有效位字段用于表示数据结构是否有效,有效位字段的取值为第一数值或者第二数值;若数据结构的签名字段记录有hash值,索引字段记录有存储位置,就将有效位字段设置为第一数值(如1),以表示该数据结构有效;若数据结构的签名字段没有记录hash值,索引字段没有记录存储位置,就将有效位字段设置为第二数值(如0),以表示该数据结构无效。此外,数据结构的签名字段用于记录关键字对应的hash值,而数据结构的索引字段用于记录表项数据在结果表中的存储位置(即实际存储的位置索引)。

如图1所示,在索引表页中,除了包括上述n个数据结构,还可以包括cc_vld、cc_praddr、pc_sig_bmp、pc_nvld、pc_npraddr。其中,cc_vld(currentcollisionvalid,现有冲突有效)可以表示当前索引表页是否存在关联的另一索引表页。cc_praddr(currentcollisionpageregionaddress,现有冲突表页区域地址)可以表示与当前索引表页关联的另一索引表页的地址,如当前索引表页后的第cc_praddr个索引表页是另一索引表页,或者,当前索引表页前的第cc_praddr个索引表页是另一索引表页,或者,cc_praddr记录的是另一索引表页的标识,当然,上述方式只是给出了另一索引表页的地址的几个示例,对此不做限制。pc_sig_bmp(previouscollisionsignaturebitmap,在先冲突签名位图)可以表示当前索引表页中的哪些数据结构,被其它索引表页所占用。如索引表页存在4个数据结构时,pc_sig_bmp的初始值为0000,若索引表页的第一个数据结构被其它索引表页所占用,则在pc_sig_bmp中对第一个数据结构进行标记,如将0000修改为“1000/x000/a000”等,对此修改方式不做限制,表示对第一个数据结构进行标记,即第一个数据结构被其它索引表页占用。pc_nvld(previouscollisionnextvalid,在先冲突的下一级有效)可以表示当前索引表页中是否存在关联的下一级索引表页。pc_npraddr(previouscollisionnextpageregionaddr,在先冲突的下一级表页区域地址)表示与当前索引表页关联的下一级索引表页的地址,可以参见cc_praddr。

通过cc_vld可以快速查询到是否存在与当前索引表页关联的另一索引表页,如cc_vld为第一数值(如0)时,不存在与当前索引表页关联的另一索引表页,cc_vld为第二数值(如1)时,存在与当前索引表页关联的另一索引表页。

通过cc_praddr可以快速查询到与当前索引表页关联的另一索引表页。例如,当前索引表页后的第cc_praddr个索引表页是当前索引表页关联的另一索引表页,或,当前索引表页前的第cc_praddr个索引表页是当前索引表页关联的另一索引表页,或,cc_praddr记录的是当前索引表页关联的另一索引表页的标识。

其中,与当前索引表页关联的另一索引表页是指:由于当前索引表页的所有数据结构均被占用,导致需要记录到当前索引表页的数据结构的内容(如hash值、表项数据在结果表中的存储位置等),被记录到另一索引表页的数据结构。

若某个索引表页(如索引表页1)的数据结构中记录有另一索引表页(如索引表页2)的内容,为了获知索引表页1的哪些数据结构记录有索引表页2的内容,则:在一个例子中,索引表页可以不包括pc_sig_bmp,从索引表页1的所有数据结构中遍历出与索引表页2关联的数据结构。在另一个例子中,索引表页可以包括pc_sig_bmp,pc_sig_bmp表示当前索引表页中的哪些数据结构,被其它索引表页所占用,因此,可以从索引表页1的pc_sig_bmp中,快速查询到与索引表页2关联的数据结构,而不用从索引表页1的所有数据结构中遍历出与索引表页2关联的数据结构,从而减少遍历的工作量,减轻设备负担。

在上述应用场景下,针对“采用双hash算法进行表项数据存储”的过程,参见图2所示,为表项数据存储方法的流程图,该方法可以包括以下步骤:

步骤201,获取待存储的表项数据,将该表项数据存储到结果表,并确定该表项数据在该结果表的存储位置(即实际存储该表项数据的位置索引)。

其中,该表项数据可以包括但不限于关键字(key)和查找结果(result)。

参见图1所示,可以获取待存储的表项数据1,表项数据1包括关键字1和查找结果1,关键字1可以是mac地址/ip地址等,查找结果1可以是关键字1对应的出接口。从结果表中选取空闲位置,将关键字1和查找结果1存储到该空闲位置,并确定关键字1和查找结果1在结果表的存储位置,如存储位置1。

步骤202,根据第一hash算法对所述关键字进行转换,得到第一hash值,并根据第二hash算法对所述关键字进行转换,得到第二hash值。

其中,在采用双hash算法进行表项数据存储以及表项数据查询时,涉及两个hash算法,这两个hash算法可以为第一hash算法(如hash1)和第二hash算法(如hash2),可以根据实际需要任意选择第一hash算法和第二hash算法,例如,第一hash算法采用crc32(cyclicredundancycheck32,32位循环冗余校验),第二hash算法采用xor-folding(折叠异或)。当然,上述crc32和xor-folding只是本申请的一个示例,本申请中并不局限于上述crc32和xor-folding,对此第一hash算法和第二hash算法的类型均不做限制。

在一个例子中,针对表项数据中的关键字(如关键字1),可以根据第一hash算法(如crc32等)对该关键字1进行转换,从而得到第一hash值,对此转换过程不做限制。此外,还可以根据第二hash算法(如xor-folding等)对该关键字1进行转换,从而得到第二hash值,对此转换过程不做限制。

步骤203,从索引表中确定该第一hash值对应的第一索引表页。

在一个例子中,第一hash值可以对应一个索引表页,且由于索引表中包括多个索引表页,因此,需要从这些索引表页中确定该第一hash值对应的索引表页,为了区分方便,可以将第一hash值对应的索引表页称为第一索引表页。

例如,假设在根据第一hash算法对关键字进行转换时,得到的第一hash值共有100种结果,如第一hash值可以是0-99的任意数值,则索引表中可以包括100个索引表页,即索引表页的数量n为100。基于此,在根据第一hash算法对所述关键字进行转换,得到第一hash值之后,若得到的第一hash值为0,则该第一hash值对应的第一索引表页是sig_page[0],若得到的第一hash值为1,则该第一hash值对应的第一索引表页是sig_page[1],以此类推,若得到的第一hash值为99,则该第一hash值对应的第一索引表页是sig_page[99]。

步骤204,判断该第一索引表页是否存在空闲的数据结构(即未被使用的数据结构)。如果是,则可以执行步骤205,如果否,则可以执行步骤206。

步骤205,在该第一索引表页的空闲的数据结构中记录第二hash值(步骤202得到的第二hash值)与存储位置(步骤201确定的存储位置)的对应关系。

步骤206,在该索引表的第二索引表页中查询空闲的数据结构,并在查询到的数据结构中记录所述第二hash值与所述存储位置的对应关系。

在一个例子中,针对“在该索引表的第二索引表页中查询空闲的数据结构”的过程,可以包括:若第一索引表页记录存在冲突,从第一索引表页中读取第二索引表页的位置信息,在所述位置信息对应的第二索引表页中查询空闲的数据结构;若第一索引表页记录不存在冲突,在第一索引表页记录存在冲突,从索引表中选择具有空闲数据结构的第二索引表页,从选择的第二索引表页中查询空闲的数据结构,并在第一索引表页记录选择的第二索引表页的位置信息。

进一步的,在查询到的数据结构中记录第二hash值与存储位置的对应关系之后,还可以在第二索引表页对查询到的数据结构进行标记;其中,所述标记用于表示第二索引表页中被第一索引表页所占用的数据结构。

在一个例子中,针对“从索引表中选择具有空闲数据结构的第二索引表页”的过程,可以包括但不限于:获取第一索引表页之外的其它每个索引表页的空闲数据结构数量;将空闲数据结构数量最多的索引表页选择为第二索引表页,或者,将空闲数据结构数量大于预设阈值的任意一个索引表页选择为第二索引表页,或者,将空闲数据结构数量大于预设阈值的索引表页中,离第一索引表页最近的索引表页选择为第二索引表页。当然,上述方式只是选择第二索引表页的示例,对此选择方式不做限制,只要第二索引表页具有空闲数据结构即可。

以下结合图1所示的应用场景,对步骤204-步骤206的过程进行说明。

假设索引表页的数据结构数量n为4,在对关键字1进行转换后,若第一hash值对应的第一索引表页sig_page[0],由于sig_page[0]存在空闲的数据结构,因此,选取n为1的数据结构,将valid1修改为第一数值1,以表示该数据结构有效,并在signature1记录关键字1对应的第二hash值,并在index1记录该关键字1对应的存储位置。同理,假设对关键字2进行转换后,第一hash值对应sig_page[0],则将valid2修改为1,在signature2记录关键字2对应的第二hash值,在index2记录关键字2对应的存储位置。假设对关键字3进行转换后,第一hash值对应sig_page[0],则将valid3修改为1,在signature3记录关键字3对应的第二hash值,在index3记录关键字3对应的存储位置。假设对关键字4进行转换后,第一hash值对应sig_page[0],则将valid4修改为1,在signature4记录关键字4对应的第二hash值,在index4记录关键字4对应的存储位置。

假设对关键字5进行转换后,第一hash值对应sig_page[0],由于sig_page[0]不存在空闲的数据结构,因此查询sig_page[0]是否记录存在冲突,即查询cc_vld取值;若cc_vld为第一数值(如0),表示记录不存在冲突,不存在与sig_page[0]关联的另一索引表页,若cc_vld为第二数值(如1),表示记录存在冲突,存在与sig_page[0]关联的另一索引表页。由于cc_vld为第一数值,即sig_page[0]记录不存在冲突,因此将cc_vld修改为第二数值,以在sig_page[0]记录存在冲突。

然后,从索引表中选择具有空闲数据结构的第二索引表页,如当sig_page[5]的4个数据结构均空闲时,可以选择sig_page[5]为第二索引表页,从sig_page[5]选择空闲的数据结构,如sig_page[5]的第一个数据结构。然后,可以将sig_page[5]的valid1修改为1,并在sig_page[5]的signature1中记录关键字5对应的第二hash值,以及,在sig_page[5]的index1中记录关键字5对应的存储位置。

然后,将sig_page[0]的cc_praddr修改为与sig_page[0]关联的sig_page[5]的位置信息,例如,将sig_page[0]的cc_praddr修改为5,以表示sig_page[0]后的第5个索引表页(即sig_page[5])是与sig_page[0]关联的索引表页。此外,在sig_page[5]的pc_sig_bmp中对sig_page[5]的第一个数据结构进行标记,表示该标记对应的数据结构被其它索引表页(即sig_page[0])占用。

假设对关键字6进行转换后,第一hash值对应sig_page[0],由于sig_page[0]不存在空闲的数据结构,因此查询sig_page[0]是否记录存在冲突,由于cc_vld为第二数值,即sig_page[0]记录存在冲突,因此从sig_page[0]的cc_praddr中读取位置信息,基于该位置信息找到sig_page[5]。从sig_page[5]中选择空闲的数据结构,如第二个数据结构,将sig_page[5]的valid2修改为1,并在sig_page[5]的signature2记录关键字6对应的第二hash值,在sig_page[5]的index2记录关键字6对应的存储位置。在sig_page[5]的pc_sig_bmp中对sig_page[5]的第二个数据结构进行标记,表示该标记对应的数据结构被其它索引表页占用。

其中,在从sig_page[5]中选择空闲的数据结构时,若sig_page[5]已经没有空闲的数据结构,则从索引表中重新选择具有空闲数据结构的第二索引表页,如sig_page[8],并从sig_page[8]选择空闲的数据结构,如第一个数据结构,并将sig_page[8]的valid1修改为1,在sig_page[8]的signature1记录关键字6对应的第二hash值,并在sig_page[8]的index1记录关键字6对应的存储位置。

然后,可以将sig_page[0]的pc_nvld修改为第二数值(如1),表示记录存在冲突,存在与sig_page[0]关联的下一级索引表页。将sig_page[0]的pc_npraddr修改为与sig_page[0]关联的sig_page[8]的位置信息,如cc_praddr为8,以表示sig_page[0]后的第8个索引表页是与sig_page[0]关联的索引表页。然后,在sig_page[8]的pc_sig_bmp中对sig_page[8]中的第一个数据结构进行标记。

基于图1的应用场景,针对“采用双hash算法进行表项数据查询”的过程,参见图3所示,为表项数据查询方法的流程图,该方法可以包括以下步骤:

步骤301,获取待查询的目标关键字。

例如,在需要发送报文时,可以从该报文中解析出目的mac地址,该目的mac地址就是待查询的目标关键字。又例如,在需要发送报文时,可以从该报文中解析出目的ip地址,该目的ip地址就是待查询的目标关键字。

步骤302,根据第一hash算法对所述目标关键字进行转换,得到第一hash值,并根据第二hash算法对所述目标关键字进行转换,得到第二hash值。

其中,步骤302的处理与步骤202的处理类似,在此不再重复赘述。

步骤303,从索引表中确定该第一hash值对应的第一索引表页。

其中,步骤303的处理与步骤203的处理类似,在此不再重复赘述。

步骤304,判断是否存在与该第一索引表页关联的第二索引表页。

如果否,则可以执行步骤305,如果是,则可以执行步骤306。

在一个例子中,若该第一索引表页记录存在冲突,则可以确定存在与该第一索引表页关联的第二索引表页;若该第一索引表页记录不存在冲突,则可以确定不存在与该第一索引表页关联的第二索引表页。进一步的,若存在与该第一索引表页关联的第二索引表页,则可以从该第一索引表页中读取第二索引表页的位置信息,并利用该位置信息确定与该第一索引表页关联的第二索引表页。

假设第一hash值对应的第一索引表页是sig_page[0],则查询sig_page[0]是否记录存在冲突,即查询cc_vld取值;若cc_vld为第一数值(如0),表示记录不存在冲突,不存在与sig_page[0]关联的第二索引表页,若cc_vld为第二数值(如1),表示记录存在冲突,存在与sig_page[0]关联的第二索引表页。

若cc_vld为第二数值,即sig_page[0]记录存在冲突,则可以从sig_page[0]的cc_praddr读取第二索引表页的位置信息,如cc_praddr为5时,表示sig_page[0]后的第5个索引表页(即sig_page[5])是与sig_page[0]关联的第二索引表页。

在cc_vld为第二数值时,还可以查询pc_nvld取值;若pc_nvld为第一数值,表示不存在与sig_page[0]关联的下一级第二索引表页,即第二索引表页只包括sig_page[5];若pc_nvld为第二数值,表示存在与sig_page[0]关联的下一级第二索引表页,可以从sig_page[0]的pc_npraddr读取下一级第二索引表页的位置信息,如pc_npraddr为8时,表示sig_page[0]后的第8个索引表页是与sig_page[0]关联的下一级第二索引表页,因此第二索引表页包括sig_page[5]和sig_page[8]。

步骤305,从该第一索引表页中确定该第二hash值对应的数据结构。

其中,在步骤305之后,可以执行步骤307。

步骤306,从该第一索引表页和该第二索引表页中确定第二hash值对应的数据结构。其中,在步骤306之后,可以执行步骤307。

针对“从该第一索引表页中确定该第二hash值对应的数据结构”的过程,可以包括:查询第一索引表页中是否对数据结构进行标记。如果否,则从该第一索引表页的所有被占用的数据结构中确定第二hash值对应的数据结构。如果是,则从该第一索引表页的所有被占用的数据结构中去除该标记对应的数据结构,并从剩余的数据结构中确定第二hash值对应的数据结构。

例如,假设第一索引表页为sig_page[0],该sig_page[0]存在4个数据结构,这4个数据结构的valid均为第一数值1,表示这4个数据结构均有效,即4个数据结构均被占用。若sig_page[0]的pc_sig_bmp没有对数据结构进行标记,则可以从数据结构1、数据结构2、数据结构3和数据结构4中确定第二hash值对应的数据结构。若sig_page[0]的pc_sig_bmp中对数据结构1进行标记,则可以从数据结构2、数据结构3和数据结构4中确定第二hash值对应的数据结构。

在一个例子中,针对“从该第二索引表页中确定该第二hash值对应的数据结构”的过程,可以包括但不限于:从该第二索引表页中查询具有标记的数据结构,并从查询到的数据结构中确定该第二hash值对应的数据结构,其中,所述标记用于表示第二索引表页中被第一索引表页所占用的数据结构。

例如,假设与第一索引表页sig_page[0]关联的第二索引表页是sig_page[5],则从sig_page[5]的pc_sig_bmp中查询具有标记的数据结构,假设sig_page[5]的pc_sig_bmp中对数据结构1进行标记、对数据结构2进行标记,则可以从sig_page[5]的数据结构1和数据结构2中确定第二hash值对应的数据结构。

以从sig_page[0]的数据结构1-数据结构4、sig_page[5]的数据结构1和数据结构2中确定第二hash值对应的数据结构为例,若sig_page[0]的数据结构1的signature1记录第二hash值,则将sig_page[0]的数据结构1确定为第二hash值对应的数据结构;若sig_page[0]的数据结构1的signature1记录第二hash值,sig_page[5]的数据结构1的signature1记录第二hash值,则将sig_page[0]的数据结构1、sig_page[5]的数据结构1确定为第二hash值对应的数据结构。

步骤307,基于第二hash值对应的数据结构记录的存储位置,从结果表中查询与目标关键字对应的查找结果,即可以从该存储位置找到查找结果。

例如,若第二hash值对应的数据结构是sig_page[0]的数据结构1,则基于sig_page[0]的数据结构1记录的存储位置(即sig_page[0]中的index1的数值),从结果表中查询与目标关键字(如关键字1)对应的查找结果,即result1。

基于上述技术方案,本申请实施例中,可以采用双hash算法实现表项数据的存储和查询,大大降低冲突的概率,并可以解决冲突页表占用大量空间空闲,浪费大量存储空间的问题,可以在硬件上实现,且能够保证设备处理性能。

以下结合具体应用场景,对降低冲突概率的效果进行详细说明:

在一个例子中,可以使用dram(dynamicrandomaccessmemory,动态随机访问存储器)存储结果表和索引表,为了提高查找性能,可以采用dram的bank复制技术。如图4所示,为drambank复制的示意图,bank0、bank2、bank4和bank6存储相同内容,即4bank复制,每个bank上存储2m个sig_page,由于取消了冲突页表,因此sig_page可以占用完整bank。bank1、bank3、bank5和bank7存储相同的内容,每个bank上存储1m个“key+result”结果表项。

当索引表中的sig_page越多时,多个key被hash到同一个sig_page的概率就越低,也就是说,hash冲突的概率越低。由于sig_page能够完全占用完整bank,因此可以在bank中实现大量sig_page,从而大大降低hash冲突概率。

以下结合具体应用场景,对节省存储空间的效果进行详细说明:

参见图4所示,由于bank0、bank2、bank4和bank6均用于存储sig_page,而不用存储冲突页表,即sig_page可以占用完整bank(即bank0、bank2、bank4和bank6),而不是sig_page占用完整bank的一半,冲突页表占用完整bank的另一半,从而避免冲突页表占用bank的存储空间,解决“冲突页表的大量空间空闲,冲突页表的空间占用率不足,浪费了大量存储空间”等问题。

基于与上述方法同样的申请构思,本申请实施例还提出一种表项数据存储装置,可以应用于网络设备,如图5所示,为所述表项数据存储装置的结构图。

获取模块501,用于获取待存储的表项数据,将所述表项数据存储到结果表,并确定所述表项数据在所述结果表的存储位置;其中,所述表项数据包括关键字和查找结果;根据第一hash算法对所述关键字进行转换,得到第一hash值,并根据第二hash算法对所述关键字进行转换,得到第二hash值;

处理模块502,用于从索引表中确定第一hash值对应的第一索引表页;若第一索引表页不存在空闲的数据结构,在索引表的第二索引表页中查询空闲的数据结构,在查询到的数据结构中记录第二hash值与所述存储位置的对应关系。

所述处理模块502,具体用于在索引表的第二索引表页中查询空闲的数据结构的过程中,若第一索引表页记录存在冲突,从第一索引表页中读取第二索引表页的位置信息,并在所述位置信息对应的第二索引表页中查询空闲的数据结构;若第一索引表页记录不存在冲突,则在第一索引表页记录存在冲突,从所述索引表中选择具有空闲数据结构的第二索引表页,从选择的第二索引表页中查询空闲的数据结构,并在第一索引表页记录选择的第二索引表页的位置信息。

所述处理模块502,还用于在所述第二索引表页中对查询到的数据结构进行标记;其中,所述标记用于表示所述第二索引表页中被所述第一索引表页所占用的数据结构;

所述处理模块502,具体用于在从所述索引表中选择具有空闲数据结构的第二索引表页的过程中,获取所述第一索引表页之外的其它每个索引表页的空闲数据结构数量;将空闲数据结构数量最多的索引表页选择为第二索引表页。

本申请实施例提供的网络设备,从硬件层面而言,硬件架构示意图具体可以参见图6所示。包括:机器可读存储介质和处理器,其中:

机器可读存储介质:存储指令代码、上述索引表和上述结果表。

处理器:与机器可读存储介质通信,读取和执行机器可读存储介质中存储的所述指令代码,实现本申请上述示例公开的表项数据存储操作。

这里,机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:ram(radomaccessmemory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。

基于与上述方法同样的申请构思,本申请实施例还提出一种表项数据查询装置,可以应用于网络设备,如图7所示,为所述表项数据查询装置的结构图。

获取模块701,用于获取待查询的目标关键字;根据第一hash算法对所述目标关键字进行转换,得到第一hash值,并根据第二hash算法对所述目标关键字进行转换,得到第二hash值;

确定模块702,用于从索引表中确定所述第一hash值对应的第一索引表页;若所述第一索引表页存在关联的第二索引表页,则从所述第一索引表页和所述第二索引表页中确定所述第二hash值对应的数据结构;

查询模块703,用于基于所述第二hash值对应的数据结构记录的存储位置,从结果表中查询与所述目标关键字对应的查找结果。

所述确定模块702,具体用于在从所述第二索引表页中确定所述第二hash值对应的数据结构的过程中,从所述第二索引表页中查询具有标记的数据结构,并从查询到的数据结构中确定所述第二hash值对应的数据结构,其中,所述标记用于表示所述第二索引表页中被所述第一索引表页所占用的数据结构;

所述确定模块702,还用于当所述第一索引表页记录存在冲突,则从所述第一索引表页中读取第二索引表页的位置信息,并利用所述位置信息确定与所述第一索引表页关联的第二索引表页。

本申请实施例提供的网络设备,从硬件层面而言,硬件架构示意图具体可以参见图8所示。包括:机器可读存储介质和处理器,其中:

机器可读存储介质:存储指令代码、上述索引表和上述结果表。

处理器:与机器可读存储介质通信,读取和执行机器可读存储介质中存储的所述指令代码,实现本申请上述示例公开的表项数据查询操作。

这里,机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:ram(radomaccessmemory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

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

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

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

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

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