数据报文的存储、查找方法和装置的制作方法

文档序号:7698842阅读:153来源:国知局
专利名称:数据报文的存储、查找方法和装置的制作方法
技术领域
本发明涉及交换技术,尤其涉及一种数据报文的存储、查找方法和装置。
背景技术
通常情况下,交换机在进行数据报文的处理时,需要将处理较为复杂的
一部分数据报文发送到CPU进行相应处理,在将数据报文向CPU发送之前, 利用哈希(HASH)结构将这些数据报文按类进行存储,在后续向CPU发送报 文时,需要先在HASH链表中进行查找,判断该报文是否已经被存储。HASH 查找算法的本质在于通过输入数据报文,利用HASH函数计算获得对应的输出 值,因此提高了报文数据的查找效率。然而由于HASH冲突链的存在,必须在 冲突链中进一步进行线性查找,线性查找使得HASH算法的整体效率下降,进 而影响CPU的报文处理能力,而且随着HASH冲突链长度的增加,其影响会更 大。 '
现有技术中存在多种提高HASH查找效率的方法,其中 一种方法利用HASH 算法的思想来建立消息号和消息处理函数之间的对应关系,采用引用计数排 序的技术将查询频率高的数据报文存储在冲突链的前面,但是其并未考虑如 何解决HASH沖突的问题,仍需对某些较长的HASH沖突链进行线性查找,因 此只能在一定程度上提高查找效率。另一种方法利用HASH链表来存储用户设 备信息,利用开放地址法和将冲突的哈希数据报文转存到二叉树结构两种方 式来解决HASH沖突问题,这种方法可以有效解决HASH沖突,但是实现较为 复杂,应用场景相对比较窄
发明内容
本发明的目的在于提供一种数据报文的存储、查找方法和装置,减少线
性查找的次数,提高数据报文的查找效率,提升CPU的数据报文处理能力。 为了实现上述目的,本发明提供了一种数据报文的存储方法,包括 根据一次散列函数对接收到的数据报文进行一次散列,获取所述数据报 文的第一索引信息;
根据所述数据报文的第 一索引信息判断当前哈希桶的桶深是否小于设定 的桶深标准值,如果是,则将所述数据报文存储到所述当前哈希桶中,否则 继续判断由关联桶规则定义的所述当前哈希桶的关联哈希桶的桶深是否小于 设定的桶深标准值,如果是,则根据设计的二次散列函数对所述数据报文进 行二次散列,并为所述当前哈希桶设置拆分标记。
本发明还提供了一种数据报文的查找方法,包括
根据一次散列函数获取输入的数据报文的第一索引信息;
判断所述第一索引信息指向的哈希桶是否不具有拆分标记,如果是,则 在所述第一索引信息指向的哈希桶中线性查找所述数据报文,否则根据设定 的二次散列函数继续判断所述数据报文的第二索引信息指向的哈希桶是否与 所述第一索引信息指向的哈希桶相同,如果是,则在所述第一索引信息指向 的哈希桶中线性查找所述数据报文,否则在由关联桶规则定义的所述哈希桶 的关联哈希桶中线性查找所述数据报文。
本发明还提供了一种数据报文的存储装置,包括
第一散列模块,用于根据一次散列函数对接收到的数据报文进行一次散 列,获取所述数据报文的第一索引信息;
第一判断模块,用于根据所述第一散列模块获取的所述数据报文的第一 索引信息对当前哈希桶的桶深进行判断;
第二判断模块,用于当所述第一判断模块的判断结果为当前哈希桶的桶
深大于设定的桶深标准值时,继续对由关联桶规则定义的所述当前哈希桶的 关联哈希桶的桶深进行判断;
6存储模块,用于当所述第 一判断模块的判断结果为当前哈希桶的桶深小
于设定的桶深标准值时,将所述数据报文存储到所述当前哈希桶中;
第二散列模块,用于当所述第二判断模块的判断结果为所述当前哈希桶
的关联哈希桶的桶深小于设定的桶深标准值时,根据设计的二次散列函数对
所述数据报文进行二次散列,并为所述当前哈希桶设置拆分标记。 本发明还提供了一种数据报文的查找装置,包括 获取模块,用于根据一次散列函数获取输入的数据报文的第一索引信息; 第一判断模块,用于判断所述获取模块获取的所述第 一索引信息指向的
哈希桶是否不具有拆分标记;
第二判断模块,用于根据所述第 一判断模块的判断结果为所述第 一索引
信息指向的哈希桶具有拆分标记时,根据设定的二次散列函数继续判断数据
报文的第二索引信息指向的哈希桶是否与所述第一索引信息指向的哈希桶
相同;
第一查找模块,用于根据所述第一判断模块的判断结果为所述第一索引 信息指向的哈希桶不具有拆分标记,或者所述第二判断模块的判断结果为所 述数据报文的第二索引信息指向的哈希桶与所述第一索引信息指向的哈希
桶相同时,在所述第 一索引信息指向的哈希桶中线性查找所述数据报文;
第二查找模块,用于根据所述第二判断模块的判断结果为数据报文的第 二索引信息指向的哈希桶与所述第一索引信息指向的哈希桶不同时,在由关 联桶规则定义的所述哈希桶的关联哈希桶中线性查找所述数据报文。
本发明提供的一种数据报文的存储、查找方法和装置,根据一次散列的 结果对哈希桶的桶深进行判断,将桶深大于桶深标准值的哈希桶中的数据报 文进行二次散列,降低了哈希桶的深度,平衡了所有哈希桶的负载,减少了 在哈希桶中进行线性查找的次数,提高了数据报文的查找效率,同时提升了
CPU的数据报文处理能力。


图1为本发明数据报文的存储方法实施例的流程图; 图2为本发明凄史据才艮文的存储方法实施例与现有才支-方法的^^合希桶结构对比示意图3为本发明数据报文的查找方法实施例的流程图; 图4为本发明数据报文的存储装置实施例的结构图; 图5为本发明数据报文的查找装置实施例的结构图。
具体实施例方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。 图1为本发明数据报文的存储方法实施例的流程图,如图1所示,本实 施例提供了一种数据^J:的存储方法,具体包括如下步骤
步骤101,根据一次散列函数对接收到的数据报文进行一次散列,获取
数据报文的第一索引信息。
哈希算法,也可称为散列算法,该算法的本质在于把任意长度的输入(又 称预映射)转换成固定长度的输出,该输出值就是散列值。这种转换是一种 压缩映射,即输出空间通常远小于输入空间,不同的输入可能会被散列为相 同的输出,因此不可能由散列值来唯一确定输入值。由于哈希算法的上述特 性,使得得到的散列偉是有冲突的,即存在哈希冲突链,哈希沖突链也可称 为哈希桶。在本实施例中,将其称作哈希桶,哈希桶的桶深即为沖突链的长 度,冲突链中节点的个数。需要指出的是,冲突链的长度只包含经过一次散 列后存储在哈希桶中的节点的个数,而二次散列转移到哈希桶中的节点数不 计入该沖突链的长度,此变量可以在沖突链的头部进行记录。本实施例旨在 解决现有技术中哈希桶较深所导致的查找效率低下的问题。
本步骤为对接收到的数据报文进行一次散列,根据一次散列函数计算出 数据报文的第 一索引信息,可以根据该第 一索引信息将数据报文散列到所对应的各个哈希桶中,即本步骤为执行正常的哈希算法。在利用哈希结构维护 数据报文时,首先要将每个数据报文存放到合适的位置,数据报文的第一索 引信息为经过一次散列后得到的散列值,该散列值即为哈希桶的索引,即第 一索引信息可以为由一次散列函数计算获得的该数据报文应当存储的哈希桶 的编号。
步骤102,根据数据报文的第一索引信息对当前哈希桶的桶深进行判断, 如果当前哈希桶的桶深大于设定的桶深标准值,则执行步骤103,否则执行 步骤105。
在本步骤中,对数据报文进行一次散列,获取到数据报文对应的第一索 引信息之后,根据第一索引信息在对应的哈希桶桶头的标志位中查找该哈希 桶的桶深。其中,本实施例中所指的哈希桶的桶深为哈希桶中包含的只经过 一次散列之后存放进来的数据节点的个数,而不包含二次散列后存放到该哈 希桶中的数据节点。本步骤以一个数据报文的存储过程为例,对该数据报文 的哈希桶的桶深进行判断,如果当前哈希桶的桶深大于设定的桶深标准值, 则执行步骤103,如果当前哈希桶的桶深小于设定的桶深标准值,否则执行 步骤105。
进一步地,在本步骤102之前,还包括如下步骤根据一次散列函数的 输入空间和输出空间设定桶深标准值。上述步骤102中与哈希桶的桶深进行 判断的桶深标准值具体可以根据一次散列函数的输入空间和输出空间来设 定,输入空间由内存的性质来决定,即内存中最多可以保存的数据报文的个 数为输入空间包含的输入值的个数,输出空间由内存的结构来决定,即内存 中的哈希桶的个数为输出空间包含的输出值的个数。可以将桶深标准值设定 为各哈希桶的桶深的平均值,即设定为输入空间包含的输入值个数与输出空 间包含的输出值个数的比值。假设一次散列函数的输入空间包括100个输入 值,输出空间包括10个输出值,则桶深标准值可以设定为100/10=10。
步骤103,判断由关联桶规则定义的当前哈希桶的关联哈希桶的桶深是
9否小于设定的桶深标准值,如果是,则执行步骤104,否则执行步骤105。
当当前哈希桶的桶深大于设定的桶深标准值时,继续对当前哈希桶的关 联哈希桶的桶深进行判断,如果关联哈希桶的桶深小于设定的桶深标准值时, 执行后续步骤104,否则执行步骤105。其中,关联桶MJ'J为在数据报文的存 储过程中自行定义的规则,用于定义哈希桶和其关联哈希桶之间的映射关系, 根据关联桶规则可以确定某哈希桶的关联哈希桶,关联桶规则可以为用户根 据实际情况具体定义;而关联哈希桶为由关联桶规则定义的与当前哈希桶相 关联的哈希桶,定义关联哈希桶的目的是在当前哈希桶的桶深较大时,将存 储在当前哈希桶中的数据拆分到关联哈希桶中。在当前哈希桶的桶深较大时, 进一步判断该哈希桶的关联哈希桶的桶深,当关联哈希桶的桶深较小时,再 对数据报文进行二次散列,否则如果关联哈希桶的桶深也大于桶深标准值, 则对数据报文进行二次散列的意义也不是很大。
步骤104,根据设计的二次散列函数对数据报文进行二次散列,并为当 前哈希桶设置拆分标记。
经过判断,当当前哈希桶的桶深大于设定的桶深标准值,且关联哈希桶 的桶深小于设定的桶深标准值时,根据设计的二次散列函数对该数据报文进 行二次散列,并为当前哈希桶设置拆分标记。其中,二次散列函数可以根据 数据报文的关键字段进行设计,也可以根据数据报文的全部字段进行设计, 只要保证哈希桶中的数据报文尽量平均分配到其关联桶中即可。设置二次散 列函数的目的是将桶深较大的哈希桶中的数据报文进行重新散列,散列到当 前哈希桶中或散列到其关联哈希桶中,因此,二次散列函数的输出空间中只 包含两个值,即当前哈希桶和关联哈希桶。本步骤为根据事先设计好的二次 散列函数对第一索引信息指向的哈希桶为当前哈希桶的数据报文进行二次散 列,并为当前哈希桶设置拆分标记。
具体地,上述步骤104可以具体为首先,根据设定的二次散列函数获 取数据报文的第二索引信息。经过判断,当前哈希桶的桶深较大,则对该数据报文进行二次散列。二次散列的目的是将第 一索引信息指向的哈希桶为当 前哈希桶的数据报文,即当前哈希桶中的数据报文按照预先设计的另 一个散 列函数重新散列到当前哈希桶或当前哈希桶的关联桶中,以减小当前哈希桶 的桶深。二次散列函数可以为预先设定的,其输出值为当前哈希桶和当前哈 希桶的关联桶,优选地,可以根据关联桶规则将当前哈希桶的关联桶设置为 当前哈希桶的对称桶,此时当前哈希桶和其对称桶是互为对称的。本步骤为 利用二次散列函数计算当前哈希桶中的数据报文的第二索引信息,对于进行 二次散列的数据报文来说,第一索引信息指向的哈希桶均为当前哈希桶,利 用二次散列函数计算得到的第二索引信息为当前哈希桶或其关联桶。其次, 根据第二索引信息将数据报文存储到当前哈希桶或由关联桶规则定义的当前
哈希桶的关联哈希桶中,并为存储到关联哈希桶中的数据报文所在的数据节 点设置拆分标记。在获得数据报文的第二索引信息后,根据第二索引信息将 数据报文存储到对应的哈希桶中,对应的哈希桶可以为当前哈希桶或由关联 桶规则定义的当前哈希桶的关联哈希桶中,实现当前哈希桶中数据的均匀分 配。可以将当前哈希桶的关联哈希桶设置为对称桶,则此时二者是互为对称
的,即假设当前哈希桶为A,其对称桶为B,则如果经过判断,哈希桶B的桶 深较大,需要对其中的数据报文进行二次散列时,哈希桶B的关联桶为A,即 二次散列函数的输出空间为A和B。完成对数据报文二次散列的存储之后, 为存储到关联哈希桶中的数据报文所在的数据节点也设置拆分标记,以备后 续执行数据查找时使用。
步骤105,将第一索引信息指向的哈希桶为当前哈希桶的数据报文存储 到当前哈希桶中。
经过判断,当当前哈希桶的桶深小于设定的桶深标准值时,将该数据报 文存储到当前哈希桶中,即直接将经过一次散列后散列到当前哈希桶中的数 据报文存储到当前哈希桶中,不再进行其他的处理。如图2所示为本发明数
萄结构对比示意图,图2中左側为采用现有技术中的数据报文的存储方法得到的哈希桶结构示意图,即对数据报文只进行一次散列,从图中可以看出,在各哈希桶中存储的数据报文数不均匀,第一个哈希桶中数据报文较多,而其余的较少。图2中右側为采用本实施的数据报文的存储方法得到的哈希桶结构示意图,从图中可以看出,本实施例对一次散列得到的第一索引信息指向的哈希桶为第一个哈希桶的数据报文进行二次散列,将其存储到第四个哈希桶中,使得各哈希桶中的数据报文实现均匀化。因此,经过本实施例的上述存储步骤后,将桶深较大的哈希桶中的数据报文转移到了桶深较小的哈希桶中,使得各哈希桶中的数据报文均匀化。
进一步地,在进行数据报文的存储时,之前可能已经按照上述步骤对某些哈希桶进行了拆分,其中被拆分的哈希桶设置有拆分标记。当进行下一个数据报文的存储时,利用 一次散列函数获取的数据报文的第一索引信息指向的哈希桶为具有拆分标记的哈希桶时,则直接对该数据报文进行二次散列,根据二次散列函数获取数据报文的第二索引信息,并根据第二索引信息将数椐报文存储到当前哈希桶或存储到哈希桶的关联哈希桶中。
本实施例提供了 一种数据报文的存储方法,根据一次散列的结果对哈希桶的桶深进行判断,将桶深大于桶深标准值的哈希桶中的数据报文进行二次散列,降低了哈希桶的深度,平衡了所有哈希桶的负载,减少了后续在哈希桶中进行线性查找的次数,同时提升了 CPU的数据报文处理能力。
图3为本发明数据报文的查找方法实施例的流程图,如图3所示,本实施例提供的数据报文的查找方法具体包括如下步骤
步骤301,根据一次散列函数获取输入的数据报文的第一索引信息。
本实施例提供的是数据报文的查找方法,与上述数据报文的存储方法是相对应,即在将数据报文依照上述步骤101-104的方法进行存储之后,依照与数据存储相对应的方法进行数据报文的查找。在进行数据报文的查找时,如果哈希桶的桶深比较大,则会严重影响哈希算法的整体查找效率,因此需要对该哈希桶进行处理,而如果哈希桶的桶深在合适范围之内,则可以大大 提高查找效率,因此无需对该哈希桶进行进一步的处理。在进行数据报文的 查找时,先根据一次散列函数计算得到输入的数据报文的第一索引信息,其 中一次散列函数与数据报文存储时所采用的一次散列函数相同,输入的数据 报文即为待查找的数据报文,本步骤与正常的哈希算法的操作相同。
步骤302,判断第一索引信息指向的哈希桶是否不具有拆分标记,如果 是,则执行步骤303,否则执行步骤304。
在上述数据报文的存储步骤中,当哈希桶的桶深较大时,对其中的数据 报文进行二次散列,将桶深较大的哈希桶中的数据报文拆分到其关联哈希桶 中,同时对进行拆分的哈希桶设置了拆分标记。在获取到待查找的数据报文 的第一索引信息后,判断该第一索引信息指向的哈希桶是否具有拆分标记, 如果该哈希桶不具有拆分标记,则表明进行数据存储时未对该哈希桶进行拆 分,该哈希桶中的数据报文是完整的,待查找的数据^^文存储在该哈希桶中, 因此执行步骤303,在该哈希桶中进行线性查找便可以很快查找到输入的数 据报文。如果第一索引信息指向的哈希桶具有拆分标记,则表明在存储数据 报文时对该哈希桶中的数据报文进行了拆分,该哈希桶中的数据报文是不完 整的,其中一部分数据报文被拆分存储到该哈希桶的关联哈希桶中,因此执 行步骤304,需要进行进一步的判断才能快速准确地查找到输入的数据报文。
步骤303,在第一索引信息指向的哈希桶中线性查找数据报文。
当利用一次散列函数计算获得待查找的数据报文的第一索引信息,且经 过判断该第一索引信息指向的哈希桶不具有拆分标记时,直接在该第一索引 信息指向的哈希桶中对该数据报文进行线性查找即可,其中,本领域技术人 员可以理解,采用现有技术中的任意一种线性查找方法均可以实现本实施例 描述的技术方案,此处不再赘述。或者,经过判断,当待查找的数据报文的 第二索引信息与第一索引相同时,表明在进行数据^R文的存储时,对哈希桶 进行拆分时并未将该数据才艮文拆分到其他哈希桶中,该数据报文仍存储在一次散列后得到的第一索引信息指向的原哈希桶中,因此,直接在原哈希桶中进行线性查找便可以查找到该数据报文。
步骤304,根据设定的二次散列函数继续判断数据报文的第二索引信息指向的哈希桶是否与第一索引信息指向的哈希桶相同,如果是,则返回执行步骤303,否则执行步骤305。
经过判断,当第一索引信息指向的哈希桶具有拆分标记时,则根据设定的二次散列函数继续判断数据报文的第二索引信息指向的哈希桶是否与第一索引信息指向的哈希桶相同。利用二次散列函数计算获得待查找的数据报文的第二索引信息,判断该第二索引信息指向的哈希桶是否与第一索引信息指向的哈希桶相同,即判断对该数据报文进行二次散列之后被分配到原哈希桶或是原哈希桶的关联哈希桶中,其中二次散列函数与上述数据报文存储方法中所采用的二次散列函数相同。如果数据报文的第二索引信息与第一索引相同,则返回执行步骤303,直接在第一索引信息指向的哈希桶中线性查找该数据报文,如果数据报文的第二索引信息指向的哈希桶与第 一 索引信息指向的哈希桶不同,则执行步骤305,在其关联哈希桶中的具有拆分标记的数据节点中线性查找该数据报文。
步骤305,在由关联桶规则定义的哈希桶的关联哈希桶中线性查找数据报文。
经过判断,当待查找的数据报文的第二索引信息指向的哈希桶与第一索引信息指向的哈希桶不同时,表明在进行数据报文的存储时,对哈希桶进行拆分时将该数据报文拆分到原哈希桶的关联p合希桶中,则在关联哈希桶中线性查找该数据报文,该关联哈希桶由设定的关联桶规则所定义。具体地,本步骤305可以为在由关联哈希桶规则定义的哈希桶的关联哈希桶中的具有拆分标记的数据节点中线性查找数据报文。由上述步骤103可知,在进行二次散列时,其中一部分数据报文被散列到原哈希桶的关联哈希桶中,这部分数据报文所在的数据节点具有拆分标记,另一部分仍被散列到原哈希桶中。而在关联哈希桶中还存储有其自身的数据报文,即一次散列后得到的第一索引信息指向的哈希桶为该关联哈希桶的数据报文存储在其中,因此,在关联哈希桶中存储的数据报文包括自身的数据报文和经过二次散列后由其他哈希桶转移过来的数据报文,其中,转移过来的数据报文所在的数据节点为具有拆分标记的数据节点。本步骤在关联哈希桶中线性查找数据报文时,只对其中具有拆分标记的数据节点进行查找便可获得输入的数据报文,这样大大提高了查找效率。
在本实施例中,按照上述方法所实现的方案,本实施例可以有效地降低哈希桶的深度,使整个哈希结构达到了负载均衡,极大地减少了在哈希桶中线性查找的次数,显著提高了哈希算法的整体查找效率。本发明所提供的数
据报文的存储和查找方法的优点可以体现在以下几点首先,在现有技术的哈希算法的实现中, 一般不能杜绝哈希冲突的存在,即数据报文不能均匀地分散到所有哈希桶中,导致某些哈希桶的桶深过大。而使用本发明提供的方法之后,可以将深度过大的哈希桶中的数据报文拆分到其关联桶中,这样可显著地降低哈希桶的桶深,理想情况下桶深可降低50%,则哈希算法的整体查找效率也可以提高50%。其次,从上述技术方案也可以看出,本发明技术方案的实现只需在数据报文的存储和查找时做一些特殊处理,并不会影响原有哈希算法的框架,实现上较为简单,也便于本发明的推广实施。再次,本发明的数据报文的存储和查找方法灵活性较高,其中哈希桶的桶深标准值可以在实现中根据输入空间和散列空间的大小灵活的制定,以使每个哈希桶的桶深接近于平均值;二次散列函数也可以根据具体的数据来确定,只要能使哈希桶中的数据报文尽量平均地分散到其关联桶中;关联哈希桶也是可以自由指定的,只要关联桶规则能够确保每个哈希桶都对应唯一的关联哈希桶即可。
本实施例提供了一种数据报文的查找方法,采用与数据报文的存储方法对应的查找方法,对数据报文一次散列后对应的哈希桶进行判断,根据判断结果在当前哈希桶或关联哈希桶中查找数据报文,降低了哈希桶的深度,平 衡了所有哈希桶的负栽,减少了在哈希桶中进行线性查找的次数,提高了数
据报文的查找效率,同时提升了 CPU的数据报文处理能力。
图4为本发明数据报文的存储装置实施例的结构图,如图4所示,本实 施例提供了一种数据报文的存储装置,包括第一散列模块401、第一判断模 块402、第二判断模块403、存储模块404和第二散列模块405。其中,第一 散列模块401用于根据一次散列函数对接收到的数据报文进行一次散列,获 取数据报文的第一索引信息。第一判断模块402用于根据第一散列模块401 获取的数据报文的第 一索引信息对当前哈希桶的桶深进行判断。第二判断模 块403用于当第一判断模块402的判断结果为当前哈希桶的桶深大于设定的 桶深标准值时,继续对由关联桶规则定义的当前哈希桶的关联哈希桶的桶深 进行判断。存储模块404用于当第一判断模块402的判断结果为当前哈希桶 的桶深小于设定的桶深标准值时,将数据报文存储到当前哈希桶中。第二散 列模块405用于当第二判断模块403的判断结果为当前哈希桶的关联哈希桶 的桶深小于设定的桶深标准值时,根据谬计的二次散列函数对数据报文进行 二次散列,并为当前哈希桶设置拆分标记。此外,数据报文的存储装置还包 括对上述数据报文进行存储的哈希桶。
具体地,第二散列模块405可以包括获取单元415和存储单元425。其 中,获取单元415用于根据设定的二次散列函数获取所述数据报文的第二索 引信息。存储单元425用于根据获取单元415获取的第二索引信息将数据报 文存储到当前哈希桶或由关联桶规则定义的当前哈希桶的关联哈希桶中,并 为存储到关联哈希桶中的数据报文所在的数据节点设置拆分标记。
本实施例提供了一种数据报文的存储装置,通过设置第一散列模块、第 一判断模块、第二判断模块、存储模块和第二散列模块,根据一次散列的结 果对哈希桶的桶深进行判断,将桶深大于桶深标准值的哈希桶中的数据报文 进行二次散列,降低了哈希桶的深度,平衡了所有哈希桶的负载,减少了后续在哈希桶中进行线性查找的次数。
图5为本发明数据报文的查找装置实施例的结构图,如图5所示,本实施例提供了一种数据报文的查找装置,具体包括获取模块501、第一判断模块502、第二判断模块503、第一查找模块504和第二查找模块505。其中,获取模块501用于根据一次散列函数获取输入的数据报文的第一索引信息。第一判断模块502用于判断获取模块501获取的第一索引信息指向的哈希桶是否不具有拆分标记。第二判断模块503用于根据第一判断模块502的判断结果为第一索引信息指向的哈希桶具有拆分标记时,根据设定的二次散列函数继续判断数据报文的第二索引信息指向的哈希桶是否与第一索引信息指向的哈希桶相同。第一查找模块504用于根据第一判断模块502的判断结果为第一索引信息指向的哈希桶不具有拆分标记时,在第一索引信息指向的哈希桶中线性查找数据报文。第一查找模块504还用于根据第二判断模块503的判断结果为数据报文的第二索引信息指向的哈希桶与第一索引信息指向的哈希桶相同时,在第一索引信息指向的哈希桶中线性查找数据报文。第二查找模块505用于根据第二判断模块503的判断结果为数据报文的第二索引信息指向的哈希桶与第一索引信息指向的哈希桶不同时,在由关联桶规则定义的哈希桶的关联哈希桶中线性查找数据报文。具体地,第二查找模块505用于根据第二判断模块503的判断结果为数据报文的第二索引信息指向的哈希桶与第一索引信息指向的哈希桶不同时,在由关联桶规则定义的哈希桶的
关联哈希桶中的具有拆分标记的数据节点中线性查找数据报文。
本实施例提供了一种数据报文的查找装置,通过设置获取模块、第一判断模块、第二判断模块、第一查找模块和第二查找模块,根据获取到的数据报文的第 一索引信息判断当前哈希桶是否具有拆分标记,才艮据判断结果对数据报文进行查找,降低了哈希桶的深度,平衡了所有哈希桶的负载,减少了在哈希桶中进行线性查找的次数,提高了数据报文的查找效率,同时提升了CPU的数据报文处理能力。最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。
权利要求
1、一种数据报文的存储方法,其特征在于,包括根据一次散列函数对接收到的数据报文进行一次散列,获取所述数据报文的第一索引信息;根据所述数据报文的第一索引信息判断当前哈希桶的桶深是否小于设定的桶深标准值,如果是,则将所述数据报文存储到所述当前哈希桶中,否则继续判断由关联桶规则定义的所述当前哈希桶的关联哈希桶的桶深是否小于设定的桶深标准值,如果是,则根据设计的二次散列函数对所述数据报文进行二次散列,并为所述当前哈希桶设置拆分标记。
2、 根据权利要求1所述的方法,其特征在于,所述根据设计的二次散列 函数对所述数据报文进行二次散列具体为根据设定的二次散列函数获取所述数据报文的第二索引信息; 根据所述第二索引信息将所述数据报文存储到所述当前哈希桶或所述当 前哈希桶的关联哈希桶中,并为所述数据报文所在的数据节点设置拆分标记。
3、 根据权利要求2所述的方法,其特征在于,当获取的数据报文的所述 第一索引信息指向的哈希桶为具有所述拆分标记的哈希桶时,根据所述二次 散列函数获取所述数据报文的第二索引信息,并根据所述第二索引信息将所 述数据报文存储到所述当前哈希桶或所述当前哈希桶的关联哈希桶中。
4、 根据权利要求1所述的方法,其特征在于,还包括根据所述一次散 列函数的输入空间和输出空间设定所述桶深标准值。
5、 一种数据报文的查找方法,其特征在于,包括 根据一次散列函数获取输入的数据报文的第 一 索引信息; 判断所述第一索引信息指向的哈希桶是否不具有拆分标记,如果是,则在所述第一索引信息指向的哈希桶中线性查找所述数据报文,否则根据设定 的二次散列函数继续判断所述数据报文的第二索引信息指向的哈希桶是否与 所述第一索引信息指向的哈希桶相同,如果是,则在所述第一索引信息指向的哈希桶中线性查找所述数据报文,否则在由关联桶规则定义的所述哈希桶 的关联哈希桶中线性查找所述数据报文。
6、 根据权利要求5所述的数据报文的查找方法,其特征在于,在所述由 关联桶规则定义的所述哈希桶的关联哈希桶中线性查找所述数据报文具体 为在由关联哈希桶规则定义的所述哈希桶的关联哈希桶中的具有拆分标记 的数据节点中线性查找所述数据报文。
7、 一种数据报文的存储装置,其特征在于,包括第一散列模块,用于根据一次散列函数对接收到的数据报文进行一次散 列,获取所述数据报文的第一索引信息;第一判断模块,用于根据所述第一散列模块获取的所述数据报文的第一 索引信息对当前哈希桶的桶深进行判断;第二判断模块,用于当所述第 一判断模块的判断结果为当前哈希桶的桶 深大于设定的桶深标准值时,继续对由关联桶规则定义的所述当前哈希桶的 关联哈希桶的桶深进行判断;存储模块,用于当所述第一判断模块的判断结果为当前哈希桶的桶深小 于设定的桶深标准值时,将所述数据报文存储到所述当前哈希桶中;第二散列模块,用于当所述第二判断模块的判断结果为所述当前哈希桶 的关联哈希桶的桶深小于设定的桶深标准值时,根据设计的二次散列函数对 所述数据报文进行二次散列,并为所述当前哈希桶设置拆分标记。
8、 根据权利要求7所述的装置,其特征在于,所述第二散列模块包括 获取单元,用于根据设定的二次散列函数获取所述数据报文的第二索引信息;存储单元,用于根据所述获取单元获取的所述第二索引信息将所述数据 报文存储到所述当前哈希桶或所述当前哈希桶的关联哈希桶中,并为所述数 据报文所在的数据节点设置拆分标记。
9、 一种数据^L文的查找装置,其特征在于,包括获取模块,用于根据一次散列函数获取输入的数据报文的第一索引信息; 第 一判断模块,用于判断所述获取模块获取的所述第 一索引信息指向的哈希桶是否不具有拆分标记;第二判断模块,用于根据所述第一判断模块的判断结果为所述第一索引信息指向的哈希桶具有拆分标记时,根据设定的二次散列函数继续判断数据报文的第二索引信息指向的哈希桶是否与所述第一索引信息指向的哈希桶相同;第 一查找模块,用于根据所述第 一判断模块的判断结果为所述第 一索引 信息指向的哈希桶不具有拆分标记,或者所述第二判断模块的判断结果为所 述数据报文的第二索引信息指向的哈希桶与所述第一索引信息指向的哈希桶相同时,在所述第 一索引信息指向的哈希桶中线性查找所述数据报文;第二查找模块,用于根据所述第二判断模块的判断结果为数据报文的第 二索引信息指向的哈希桶与所述第一索引信息指向的哈希桶不同时,在由关 联桶规则定义的所述哈希桶的关联哈希桶中线性查找所述数据报文。
10、根据权利要求9所述的数据报文的查找装置,其特征在于,所述第 二查找模块用于根据所述第二判断模块的判断结果为数据报文的第二索引信 息指向的哈希桶与所述第 一索引信息指向的哈希桶不同时,在由关联桶规则 定义的所述哈希桶的关联哈希桶中的具有拆分标记的数据节点中线性查找所 述数据报文。
全文摘要
本发明公开了一种数据报文的存储、查找方法和装置,数据报文的存储方法包括根据一次散列函数对接收到的数据报文进行一次散列,获取数据报文的第一索引信息;根据数据报文的第一索引信息判断当前哈希桶的桶深是否小于设定的桶深标准值,如果是,则将所述数据报文存储到所述当前哈希桶中,否继续判断由关联桶规则定义的所述当前哈希桶的关联哈希桶的桶深是否小于设定的桶深标准值,如果是,则根据设计的二次散列函数对数据报文进行二次散列,并为当前哈希桶设置拆分标记。本发明还提供了一种数据报文的存储装置以及数据报文的查找方法和装置。本发明减少了在哈希桶中进行线性查找的次数,提高了数据报文的查找效率。
文档编号H04L12/56GK101483605SQ20091007833
公开日2009年7月15日 申请日期2009年2月25日 优先权日2009年2月25日
发明者夹尚涛 申请人:北京星网锐捷网络技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1