CN101483605B - 数据报文的存储、查找方法和装置 - Google Patents

数据报文的存储、查找方法和装置 Download PDF

Info

Publication number
CN101483605B
CN101483605B CN2009100783369A CN200910078336A CN101483605B CN 101483605 B CN101483605 B CN 101483605B CN 2009100783369 A CN2009100783369 A CN 2009100783369A CN 200910078336 A CN200910078336 A CN 200910078336A CN 101483605 B CN101483605 B CN 101483605B
Authority
CN
China
Prior art keywords
bucket
hash
data message
hash bucket
index information
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.)
Active
Application number
CN2009100783369A
Other languages
English (en)
Other versions
CN101483605A (zh
Inventor
夹尚涛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Zhigu Tech Co Ltd
Original Assignee
Beijing Star Net Ruijie Networks Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Star Net Ruijie Networks Co Ltd filed Critical Beijing Star Net Ruijie Networks Co Ltd
Priority to CN2009100783369A priority Critical patent/CN101483605B/zh
Publication of CN101483605A publication Critical patent/CN101483605A/zh
Application granted granted Critical
Publication of CN101483605B publication Critical patent/CN101483605B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种数据报文的存储、查找方法和装置,数据报文的存储方法包括:根据一次散列函数对接收到的数据报文进行一次散列,获取数据报文的第一索引信息;根据数据报文的第一索引信息判断当前哈希桶的桶深是否小于设定的桶深标准值,如果是,则将所述数据报文存储到所述当前哈希桶中,否继续判断由关联桶规则定义的所述当前哈希桶的关联哈希桶的桶深是否小于设定的桶深标准值,如果是,则根据设计的二次散列函数对数据报文进行二次散列,并为当前哈希桶设置拆分标记。本发明还提供了一种数据报文的存储装置以及数据报文的查找方法和装置。本发明减少了在哈希桶中进行线性查找的次数,提高了数据报文的查找效率。

Description

数据报文的存储、查找方法和装置 
技术领域
本发明涉及交换技术,尤其涉及一种数据报文的存储、查找方法和装置。 
背景技术
通常情况下,交换机在进行数据报文的处理时,需要将处理较为复杂的一部分数据报文发送到CPU进行相应处理,在将数据报文向CPU发送之前,利用哈希(HASH)结构将这些数据报文按类进行存储,在后续向CPU发送报文时,需要先在HASH链表中进行查找,判断该报文是否已经被存储。HASH查找算法的本质在于通过输入数据报文,利用HASH函数计算获得对应的输出值,因此提高了报文数据的查找效率。然而由于HASH冲突链的存在,必须在冲突链中进一步进行线性查找,线性查找使得HASH算法的整体效率下降,进而影响CPU的报文处理能力,而且随着HASH冲突链长度的增加,其影响会更大。 
现有技术中存在多种提高HASH查找效率的方法,其中一种方法利用HASH算法的思想来建立消息号和消息处理函数之间的对应关系,采用引用计数排序的技术将查询频率高的数据报文存储在冲突链的前面,但是其并未考虑如何解决HASH冲突的问题,仍需对某些较长的HASH冲突链进行线性查找,因此只能在一定程度上提高查找效率。另一种方法利用HASH链表来存储用户设备信息,利用开放地址法和将冲突的哈希数据报文转存到二叉树结构两种方式来解决HASH冲突问题,这种方法可以有效解决HASH冲突,但是实现较为复杂,应用场景相对比较窄。 
发明内容 
本发明的目的在于提供一种数据报文的存储、查找方法和装置,减少线性查找的次数,提高数据报文的查找效率,提升CPU的数据报文处理能力。 
为了实现上述目的,本发明提供了一种数据报文的存储方法,包括: 
根据一次散列函数对接收到的数据报文进行一次散列,获取所述数据报文的第一索引信息; 
根据所述数据报文的第一索引信息判断当前哈希桶的桶深是否小于设定的桶深标准值,如果是,则将所述数据报文存储到所述当前哈希桶中,否则继续判断由关联桶规则定义的所述当前哈希桶的关联哈希桶的桶深是否小于设定的桶深标准值,如果是,则根据设计的二次散列函数对所述数据报文进行二次散列,并为所述当前哈希桶设置拆分标记。 
本发明还提供了一种数据报文的查找方法,包括: 
根据一次散列函数获取输入的数据报文的第一索引信息; 
判断所述第一索引信息指向的哈希桶是否不具有拆分标记,如果是,则在所述第一索引信息指向的哈希桶中线性查找所述数据报文,否则根据设定的二次散列函数继续判断所述数据报文的第二索引信息指向的哈希桶是否与所述第一索引信息指向的哈希桶相同,如果是,则在所述第一索引信息指向的哈希桶中线性查找所述数据报文,否则在由关联桶规则定义的所述第一索引信息指向的哈希桶的关联哈希桶中线性查找所述数据报文。 
本发明还提供了一种数据报文的存储装置,包括: 
第一散列模块,用于根据一次散列函数对接收到的数据报文进行一次散列,获取所述数据报文的第一索引信息; 
第一判断模块,用于根据所述第一散列模块获取的所述数据报文的第一索引信息对当前哈希桶的桶深进行判断; 
第二判断模块,用于当所述第一判断模块的判断结果为当前哈希桶的桶深大于设定的桶深标准值时,继续对由关联桶规则定义的所述当前哈希桶的关联哈希桶的桶深进行判断; 
存储模块,用于当所述第一判断模块的判断结果为当前哈希桶的桶深小于设定的桶深标准值时,将所述数据报文存储到所述当前哈希桶中; 
第二散列模块,用于当所述第二判断模块的判断结果为所述当前哈希桶的关联哈希桶的桶深小于设定的桶深标准值时,根据设计的二次散列函数对所述数据报文进行二次散列,并为所述当前哈希桶设置拆分标记。 
本发明还提供了一种数据报文的查找装置,包括: 
获取模块,用于根据一次散列函数获取输入的数据报文的第一索引信息; 
第一判断模块,用于判断所述获取模块获取的所述第一索引信息指向的哈希桶是否不具有拆分标记; 
第二判断模块,用于根据所述第一判断模块的判断结果为所述第一索引信息指向的哈希桶具有拆分标记时,根据设定的二次散列函数继续判断数据报文的第二索引信息指向的哈希桶是否与所述第一索引信息指向的哈希桶相同; 
第一查找模块,用于根据所述第一判断模块的判断结果为所述第一索引信息指向的哈希桶不具有拆分标记,或者所述第二判断模块的判断结果为所述数据报文的第二索引信息指向的哈希桶与所述第一索引信息指向的哈希桶相同时,在所述第一索引信息指向的哈希桶中线性查找所述数据报文; 
第二查找模块,用于根据所述第二判断模块的判断结果为数据报文的第二索引信息指向的哈希桶与所述第一索引信息指向的哈希桶不同时,在由关联桶规则定义的所述第一索引信息指向的哈希桶的关联哈希桶中线性查找所述数据报文。 
本发明提供的一种数据报文的存储、查找方法和装置,根据一次散列的结果对哈希桶的桶深进行判断,将桶深大于桶深标准值的哈希桶中的数据报文进行二次散列,降低了哈希桶的深度,平衡了所有哈希桶的负载,减少了在哈希桶中进行线性查找的次数,提高了数据报文的查找效率,同时提升了CPU的数据报文处理能力。 
附图说明
图1为本发明数据报文的存储方法实施例的流程图; 
图2为本发明数据报文的存储方法实施例与现有技术中数据报文的存储方法的哈希桶结构对比示意图; 
图3为本发明数据报文的查找方法实施例的流程图; 
图4为本发明数据报文的存储装置实施例的结构图; 
图5为本发明数据报文的查找装置实施例的结构图。 
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。 
图1为本发明数据报文的存储方法实施例的流程图,如图1所示,本实施例提供了一种数据报文的存储方法,具体包括如下步骤: 
步骤101,根据一次散列函数对接收到的数据报文进行一次散列,获取数据报文的第一索引信息。 
哈希算法,也可称为散列算法,该算法的本质在于把任意长度的输入(又称预映射)转换成固定长度的输出,该输出值就是散列值。这种转换是一种压缩映射,即输出空间通常远小于输入空间,不同的输入可能会被散列为相同的输出,因此不可能由散列值来唯一确定输入值。由于哈希算法的上述特性,使得得到的散列值是有冲突的,即存在哈希冲突链,哈希冲突链也可称为哈希桶。在本实施例中,将其称作哈希桶,哈希桶的桶深即为冲突链的长度,冲突链中节点的个数。需要指出的是,冲突链的长度只包含经过一次散列后存储在哈希桶中的节点的个数,而二次散列转移到哈希桶中的节点数不计入该冲突链的长度,此变量可以在冲突链的头部进行记录。本实施例旨在解决现有技术中哈希桶较深所导致的查找效率低下的问题。 
本步骤为对接收到的数据报文进行一次散列,根据一次散列函数计算出数据报文的第一索引信息,可以根据该第一索引信息将数据报文散列到所对 应的各个哈希桶中,即本步骤为执行正常的哈希算法。在利用哈希结构维护数据报文时,首先要将每个数据报文存放到合适的位置,数据报文的第一索引信息为经过一次散列后得到的散列值,该散列值即为哈希桶的索引,即第一索引信息可以为由一次散列函数计算获得的该数据报文应当存储的哈希桶的编号。 
步骤102,根据数据报文的第一索引信息对当前哈希桶的桶深进行判断,如果当前哈希桶的桶深大于设定的桶深标准值,则执行步骤103,否则执行步骤105。 
在本步骤中,对数据报文进行一次散列,获取到数据报文对应的第一索引信息之后,根据第一索引信息在对应的哈希桶桶头的标志位中查找该哈希桶的桶深。其中,本实施例中所指的哈希桶的桶深为哈希桶中包含的只经过一次散列之后存放进来的数据节点的个数,而不包含二次散列后存放到该哈希桶中的数据节点。本步骤以一个数据报文的存储过程为例,对该数据报文的哈希桶的桶深进行判断,如果当前哈希桶的桶深大于设定的桶深标准值,则执行步骤103,如果当前哈希桶的桶深小于设定的桶深标准值,否则执行步骤105。 
进一步地,在本步骤102之前,还包括如下步骤:根据一次散列函数的输入空间和输出空间设定桶深标准值。上述步骤102中与哈希桶的桶深进行判断的桶深标准值具体可以根据一次散列函数的输入空间和输出空间来设定,输入空间由内存的性质来决定,即内存中最多可以保存的数据报文的个数为输入空间包含的输入值的个数,输出空间由内存的结构来决定,即内存中的哈希桶的个数为输出空间包含的输出值的个数。可以将桶深标准值设定为各哈希桶的桶深的平均值,即设定为输入空间包含的输入值个数与输出空间包含的输出值个数的比值。假设一次散列函数的输入空间包括100个输入值,输出空间包括10个输出值,则桶深标准值可以设定为100/10=10。 
步骤103,判断由关联桶规则定义的当前哈希桶的关联哈希桶的桶深是 否小于设定的桶深标准值,如果是,则执行步骤104,否则执行步骤105。 
当当前哈希桶的桶深大于设定的桶深标准值时,继续对当前哈希桶的关联哈希桶的桶深进行判断,如果关联哈希桶的桶深小于设定的桶深标准值时,执行后续步骤104,否则执行步骤105。其中,关联桶规则为在数据报文的存储过程中自行定义的规则,用于定义哈希桶和其关联哈希桶之间的映射关系,根据关联桶规则可以确定某哈希桶的关联哈希桶,关联桶规则可以为用户根据实际情况具体定义;而关联哈希桶为由关联桶规则定义的与当前哈希桶相关联的哈希桶,定义关联哈希桶的目的是在当前哈希桶的桶深较大时,将存储在当前哈希桶中的数据拆分到关联哈希桶中。在当前哈希桶的桶深较大时,进一步判断该哈希桶的关联哈希桶的桶深,当关联哈希桶的桶深较小时,再对数据报文进行二次散列,否则如果关联哈希桶的桶深也大于桶深标准值,则对数据报文进行二次散列的意义也不是很大。 
步骤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,在第一索引信息指向的哈希桶中线性查找数据报文。 
当利用一次散列函数计算获得待查找的数据报文的第一索引信息,且经过判断该第一索引信息指向的哈希桶不具有拆分标记时,直接在该第一索引信息指向的哈希桶中对该数据报文进行线性查找即可,其中,本领域技术人员可以理解,采用现有技术中的任意一种线性查找方法均可以实现本实施例描述的技术方案,此处不再赘述。或者,经过判断,当待查找的数据报文的第二索引信息与第一索引相同时,表明在进行数据报文的存储时,对哈希桶进行拆分时并未将该数据报文拆分到其他哈希桶中,该数据报文仍存储在一 次散列后得到的第一索引信息指向的原哈希桶中,因此,直接在原哈希桶中进行线性查找便可以查找到该数据报文。 
步骤304,根据设定的二次散列函数继续判断数据报文的第二索引信息指向的哈希桶是否与第一索引信息指向的哈希桶相同,如果是,则返回执行步骤303,否则执行步骤305。 
经过判断,当第一索引信息指向的哈希桶具有拆分标记时,则根据设定的二次散列函数继续判断数据报文的第二索引信息指向的哈希桶是否与第一索引信息指向的哈希桶相同。利用二次散列函数计算获得待查找的数据报文的第二索引信息,判断该第二索引信息指向的哈希桶是否与第一索引信息指向的哈希桶相同,即判断对该数据报文进行二次散列之后被分配到原哈希桶或是原哈希桶的关联哈希桶中,其中二次散列函数与上述数据报文存储方法中所采用的二次散列函数相同。如果数据报文的第二索引信息与第一索引相同,则返回执行步骤303,直接在第一索引信息指向的哈希桶中线性查找该数据报文,如果数据报文的第二索引信息指向的哈希桶与第一索引信息指向的哈希桶不同,则执行步骤305,在其关联哈希桶中的具有拆分标记的数据节点中线性查找该数据报文。 
步骤305,在由关联桶规则定义的哈希桶的关联哈希桶中线性查找数据报文。 
经过判断,当待查找的数据报文的第二索引信息指向的哈希桶与第一索引信息指向的哈希桶不同时,表明在进行数据报文的存储时,对哈希桶进行拆分时将该数据报文拆分到原哈希桶的关联哈希桶中,则在关联哈希桶中线性查找该数据报文,该关联哈希桶由设定的关联桶规则所定义。具体地,本步骤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的数据报文处理能力。 
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。 

Claims (10)

1.一种数据报文的存储方法,其特征在于,包括:
根据一次散列函数对接收到的数据报文进行一次散列,获取所述数据报文的第一索引信息;
根据所述数据报文的第一索引信息判断当前哈希桶的桶深是否小于设定的桶深标准值,如果是,则将所述数据报文存储到所述当前哈希桶中,否则继续判断由关联桶规则定义的所述当前哈希桶的关联哈希桶的桶深是否小于设定的桶深标准值,如果是,则根据设计的二次散列函数对所述数据报文进行二次散列,并为所述当前哈希桶设置拆分标记。
2.根据权利要求1所述的方法,其特征在于,所述根据设计的二次散列函数对所述数据报文进行二次散列具体为:
根据设定的二次散列函数获取所述数据报文的第二索引信息;
根据所述第二索引信息将所述数据报文存储到所述当前哈希桶或所述当前哈希桶的关联哈希桶中,并为所述数据报文所在的数据节点设置拆分标记。
3.根据权利要求2所述的方法,其特征在于,当获取的数据报文的所述第一索引信息指向的哈希桶为具有所述拆分标记的哈希桶时,根据所述二次散列函数获取所述数据报文的第二索引信息,并根据所述第二索引信息将所述数据报文存储到所述当前哈希桶或所述当前哈希桶的关联哈希桶中。
4.根据权利要求1所述的方法,其特征在于,还包括:根据所述一次散列函数的输入空间和输出空间设定所述桶深标准值。
5.一种数据报文的查找方法,其特征在于,包括:
根据一次散列函数获取输入的数据报文的第一索引信息;
判断所述第一索引信息指向的哈希桶是否不具有拆分标记,如果是,则在所述第一索引信息指向的哈希桶中线性查找所述数据报文,否则根据设定的二次散列函数继续判断所述数据报文的第二索引信息指向的哈希桶是否与所述第一索引信息指向的哈希桶相同,如果是,则在所述第一索引信息指向 的哈希桶中线性查找所述数据报文,否则在由关联桶规则定义的所述第一索引信息指向的哈希桶的关联哈希桶中线性查找所述数据报文。
6.根据权利要求5所述的数据报文的查找方法,其特征在于,在所述由关联桶规则定义的所述第一索引信息指向的哈希桶的关联哈希桶中线性查找所述数据报文具体为:在由关联哈希桶规则定义的所述第一索引信息指向的哈希桶的关联哈希桶中的具有拆分标记的数据节点中线性查找所述数据报文。
7.一种数据报文的存储装置,其特征在于,包括:
第一散列模块,用于根据一次散列函数对接收到的数据报文进行一次散列,获取所述数据报文的第一索引信息;
第一判断模块,用于根据所述第一散列模块获取的所述数据报文的第一索引信息对当前哈希桶的桶深进行判断;
第二判断模块,用于当所述第一判断模块的判断结果为当前哈希桶的桶深大于设定的桶深标准值时,继续对由关联桶规则定义的所述当前哈希桶的关联哈希桶的桶深进行判断;
存储模块,用于当所述第一判断模块的判断结果为当前哈希桶的桶深小于设定的桶深标准值时,将所述数据报文存储到所述当前哈希桶中;
第二散列模块,用于当所述第二判断模块的判断结果为所述当前哈希桶的关联哈希桶的桶深小于设定的桶深标准值时,根据设计的二次散列函数对所述数据报文进行二次散列,并为所述当前哈希桶设置拆分标记。
8.根据权利要求7所述的装置,其特征在于,所述第二散列模块包括:
获取单元,用于根据设定的二次散列函数获取所述数据报文的第二索引信息;
存储单元,用于根据所述获取单元获取的所述第二索引信息将所述数据报文存储到所述当前哈希桶或所述当前哈希桶的关联哈希桶中,并为所述数据报文所在的数据节点设置拆分标记。 
9.一种数据报文的查找装置,其特征在于,包括:
获取模块,用于根据一次散列函数获取输入的数据报文的第一索引信息;
第一判断模块,用于判断所述获取模块获取的所述第一索引信息指向的哈希桶是否不具有拆分标记;
第二判断模块,用于根据所述第一判断模块的判断结果为所述第一索引信息指向的哈希桶具有拆分标记时,根据设定的二次散列函数继续判断数据报文的第二索引信息指向的哈希桶是否与所述第一索引信息指向的哈希桶相同;
第一查找模块,用于根据所述第一判断模块的判断结果为所述第一索引信息指向的哈希桶不具有拆分标记,或者所述第二判断模块的判断结果为所述数据报文的第二索引信息指向的哈希桶与所述第一索引信息指向的哈希桶相同时,在所述第一索引信息指向的哈希桶中线性查找所述数据报文;
第二查找模块,用于根据所述第二判断模块的判断结果为数据报文的第二索引信息指向的哈希桶与所述第一索引信息指向的哈希桶不同时,在由关联桶规则定义的所述第一索引信息指向的哈希桶的关联哈希桶中线性查找所述数据报文。
10.根据权利要求9所述的数据报文的查找装置,其特征在于,所述第二查找模块用于根据所述第二判断模块的判断结果为数据报文的第二索引信息指向的哈希桶与所述第一索引信息指向的哈希桶不同时,在由关联桶规则定义的所述第一索引信息指向的哈希桶的关联哈希桶中的具有拆分标记的数据节点中线性查找所述数据报文。 
CN2009100783369A 2009-02-25 2009-02-25 数据报文的存储、查找方法和装置 Active CN101483605B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009100783369A CN101483605B (zh) 2009-02-25 2009-02-25 数据报文的存储、查找方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009100783369A CN101483605B (zh) 2009-02-25 2009-02-25 数据报文的存储、查找方法和装置

Publications (2)

Publication Number Publication Date
CN101483605A CN101483605A (zh) 2009-07-15
CN101483605B true CN101483605B (zh) 2011-04-06

Family

ID=40880543

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009100783369A Active CN101483605B (zh) 2009-02-25 2009-02-25 数据报文的存储、查找方法和装置

Country Status (1)

Country Link
CN (1) CN101483605B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2515487B1 (en) * 2010-01-26 2019-01-23 Huawei Technologies Co., Ltd. Method and device for storing and searching keyword
CN102609509B (zh) * 2010-04-26 2015-09-30 华为技术有限公司 哈希数据处理方法和装置
WO2012106916A1 (zh) * 2011-07-22 2012-08-16 华为技术有限公司 哈希计算处理方法及装置
CN103905503B (zh) * 2012-12-27 2017-09-26 中国移动通信集团公司 数据存取方法、调度方法、设备及系统
CN103914399B (zh) * 2012-12-31 2017-03-29 中国移动通信集团公司 一种并行计算系统中的磁盘缓存方法及装置
US9537771B2 (en) * 2013-04-04 2017-01-03 Marvell Israel (M.I.S.L) Ltd. Exact match hash lookup databases in network switch devices
JP6025149B2 (ja) * 2013-11-06 2016-11-16 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation データを管理するシステムおよび方法
CN111107042B (zh) * 2018-10-26 2021-03-09 广州汽车集团股份有限公司 报文解析方法、装置、计算机设备和存储介质
CN110046638B (zh) * 2018-12-29 2023-06-23 创新先进技术有限公司 多平台间数据的融合方法、装置及设备
CN111158590B (zh) * 2019-12-17 2021-07-06 苏州浪潮智能科技有限公司 一种解决哈希冲突的方法和设备
CN112835907A (zh) * 2021-02-08 2021-05-25 兴业数字金融服务(上海)股份有限公司 多次散列存储方法及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1858734A (zh) * 2005-12-28 2006-11-08 华为技术有限公司 一种数据存储及搜索方法
CN101211346A (zh) * 2006-12-30 2008-07-02 上海意渊信息科技有限公司 一种优化存储器性能的方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1858734A (zh) * 2005-12-28 2006-11-08 华为技术有限公司 一种数据存储及搜索方法
CN101211346A (zh) * 2006-12-30 2008-07-02 上海意渊信息科技有限公司 一种优化存储器性能的方法

Also Published As

Publication number Publication date
CN101483605A (zh) 2009-07-15

Similar Documents

Publication Publication Date Title
CN101483605B (zh) 数据报文的存储、查找方法和装置
CN103106222B (zh) 定时器的处理方法及装置
CN101692651A (zh) 一种哈希查找表的方法和装置
EP2390797A1 (en) Regular expression matching method and system
EP2944059B1 (en) High performance hash-based lookup for packet processing in a communication network
CN101442731B (zh) 一种话单剔重方法和装置
CN100445999C (zh) 一种数据存储及搜索方法
CN111131084B (zh) 一种QoS感知的OpenFlow流表查找方法
RU2008139292A (ru) Основанная на политике архитектура агрегации сообщений
CN102142009A (zh) 一种正则表达式匹配的方法及装置
CN104572983B (zh) 基于内存的散列表的构建方法、文本查找方法及相应装置
CN109271391A (zh) 数据存储方法、服务器、存储介质及装置
RU2009140391A (ru) Идентификация и сопоставление сообщений электронной почты
CN109741060A (zh) 信息查询系统、方法、装置、电子设备及存储介质
CN109408509A (zh) 数据存储方法、装置及计算机设备
CN107431660B (zh) 检索装置、检索方法及记录介质
CN106599091B (zh) 基于键值存储的rdf图结构存储和索引方法
EP2429132B1 (en) Table creating and searching method used by network processor
CN114490060A (zh) 内存分配方法、装置、计算机设备和计算机可读存储介质
CN106095770B (zh) 数据快速查找装置、查找方法、添加方法及删除方法
CN107679148A (zh) 一种分布式文件系统的会话查找方法、装置及设备
US9639566B2 (en) Method, apparatus and computer program product for improved storage of key-value pairs
CN106020724A (zh) 一种基于数据映射算法的近邻存储方法
Kanizo et al. Access-efficient balanced bloom filters
CN109992708B (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
ASS Succession or assignment of patent right

Owner name: BEIJING Z-GOOD TECHNOLOGY SERVICE CO., LTD.

Free format text: FORMER OWNER: BEIJING XINGWANG RUIJIE NETWORK TECHNOLOGIES CO., LTD.

Effective date: 20140813

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 100036 HAIDIAN, BEIJING TO: 100085 HAIDIAN, BEIJING

TR01 Transfer of patent right

Effective date of registration: 20140813

Address after: 100085 Beijing city Haidian District No. 33 Xiaoying Road 1 1F06 room

Patentee after: BEIJING ZHIGU TECHNOLOGY SERVICES CO., LTD.

Address before: 100036 Beijing Haidian District City 33 Fuxing Road Cuiwei East 1106

Patentee before: Beijing Xingwang Ruijie Network Technologies Co., Ltd.

EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20090715

Assignee: Beijing Xingwang Ruijie Network Technologies Co., Ltd.

Assignor: BEIJING ZHIGU TECHNOLOGY SERVICES CO., LTD.

Contract record no.: 2014990000854

Denomination of invention: Storing, searching method and apparatus for data packet

Granted publication date: 20110406

License type: Common License

Record date: 20141105

LICC Enforcement, change and cancellation of record of contracts on the licence for exploitation of a patent or utility model