一种信息存储方法及装置与流程

文档序号:16734248发布日期:2019-01-28 12:30阅读:115来源:国知局
一种信息存储方法及装置与流程
本申请涉及网络
技术领域
,特别是涉及一种信息存储方法及装置。
背景技术
:全网流量分析技术已经成为分析网络问题的一个非常重要的手段。在网络规模日益扩大、速度逐渐提升和网络应用日趋复杂的的时代背景下,需要对网络会话上下文进行实时统计与分析。流量跟踪是实现实时统计与分析的基础技术,主要是从网络中采集报文,根据报文的属性信息进行分类,从而统计出流的属性信息,其实质上是对流的统计分析。然后根据流的属性信息进行后续更深层次的统计和分析。现有技术中,可以采用流量探针实现流量跟踪,但是这一方式中需要采用一个流表来跟踪和维护网络流的统计信息。由于网络具有报文量大、速度快等特性,因此,在建立流表后,如何在流表中存储网络流的信息,直接关系到流量探针的吞吐性能。鉴于此,需要提供一种在流表中进行信息存储的方案。技术实现要素:本申请实施例的目的在于提供一种信息存储方法及装置,以在流表中实现信息存储,提高流量探针的吞吐性能。具体技术方案如下:第一方面,本申请实施例提供了一种信息存储方法,所述方法包括:获得报文,并获得所述报文的属性信息;对所获得属性信息对应的字符串进行连接,形成新字符串,并对所述新字符串进行哈希计算,得到第一哈希值;根据所述第一哈希值和预设哈希链表的大小,确定所获得属性信息在所述预设哈希链表中的存储位置,作为第一存储位置,其中,所述预设哈希链表的大小为素数;判断所述第一存储位置处是否存在存储有所获得属性信息的第一链表节点;若为是,更新所述第一链表节点中存储的统计信息,其中,每一链表节点中存储的统计信息为:已获得报文中属性信息为该链表节点所存储属性信息的报文数量;若为否,根据所述第一存储位置,创建链表节点,将所获得的属性信息存储至所创建链表节点,并更新所创建链表节点中存储的统计信息。第二方面,本申请实施例提供了一种信息存储装置,所述装置包括:信息获得模块,用于获得报文,并获得所述报文的属性信息;哈希值计算模块,用于对所获得属性信息对应的字符串进行连接,形成新字符串,并对所述新字符串进行哈希计算,得到第一哈希值;位置确定模块,用于根据所述第一哈希值和预设哈希链表的大小,确定所获得属性信息在所述预设哈希链表中的存储位置,作为第一存储位置,其中,所述预设哈希链表的大小为素数;节点判断模块,用于判断所述第一存储位置处是否存在存储有所获得属性信息的第一链表节点,若为是,触发信息更新模块,若为否,触发节点创建模块;所述信息更新模块,用于更新所述第一链表节点中存储的统计信息,其中,每一链表节点中存储的统计信息为:已获得报文中属性信息为该链表节点所存储属性信息的报文数量;所述节点创建模块,用于根据所述第一存储位置,创建链表节点;第一信息存储模块,用于将所获得的属性信息存储至所创建链表节点,并更新所创建链表节点中存储的统计信息。第三方面,本申请实施例提供了一种电子设备,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述处理器被所述机器可执行指令促使:实现本申请实施例所述的信息存储方法步骤。第四方面,本申请实施例提供了一种机器可读存储介质,存储有机器可执行指令,在被处理器调用和执行时,所述机器可执行指令促使所述处理器:实现本申请实施例所述的信息存储方法步骤。由以上可见,本申请实施例提供的方案中,在获得报文后,获得报文的属性信息,对所获得属性信息对应的字符串进行连接,形成新字符串,并对新字符串进行哈希计算,得到第一哈希值,根据第一哈希值和预设哈希链表的大小,确定所获得属性信息在预设哈希链表中的第一存储位置,当第一存储位置处存在存储有所获得属性信息的第一链表节点时,更新第一链表节点中存储的统计信息,在第一存储位置处不存在第一链表节点时,根据第一存储位置创建链表节点,将所获得的属性信息存储至所创建链表节点,并更新所创建链表节点中存储的统计信息。因此,若采用上述预设哈希链表构建流表,则应用本申请实施例提供的方案能够在流表中实现信息存储;又由于基于报文的属性信息对应的字符串连接而形成的新字符串计算哈希值时,计算得到的哈希值能够反映报文的每一属性信息的变化,另外,预设哈希链表的大小为素数,而素数除了1和它本身以外不具有其他因数,因此应用本申请实施例提供的方案存储报文的属性信息时,能够得到较为离散的哈希值,进而能够提高流量探针的吞吐性能。附图说明为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本申请实施例提供的第一种信息存储方法的流程示意图;图2为本申请实施例提供的第二种信息存储方法的流程示意图;图3为本申请实施例提供的第三种信息存储方法的流程示意图;图4为本申请实施例提供的一种信息存储装置的结构示意图;图5为本申请实施例提供的一种电子设备的结构示意图。具体实施方式下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。由于现有技术中,可以采用流量探针实现流量跟踪,但这一方式中需要采用流表来跟踪和维护网络流的统计信息,为此,本申请实施例提供了一种信息存储方法,以在流量中实现信息存储。本申请的一个实施例中,提供了一种信息存储方法,该方法包括:获得报文,并获得报文的属性信息;对所获得属性信息对应的字符串进行连接,形成新字符串,并对新字符串进行哈希计算,得到第一哈希值;根据第一哈希值和预设哈希链表的大小,确定所获得属性信息在预设哈希链表中的存储位置,作为第一存储位置,其中,预设哈希链表的大小为素数;判断第一存储位置处是否存在存储有所获得属性信息的第一链表节点;若为是,更新第一链表节点中存储的统计信息,其中,每一链表节点中存储的统计信息为:已获得报文中属性信息为该链表节点所存储属性信息的报文数量;若为否,根据第一存储位置,创建链表节点,将所获得的属性信息存储至所创建链表节点,并更新所创建链表节点中存储的统计信息。由以上可见,若采用上述预设哈希链表构建流表,则应用本实施例提供的方案能够在流表中实现信息存储;又由于基于报文的属性信息对应的字符串连接而形成的新字符串计算哈希值时,计算得到的哈希值能够反映报文的每一属性信息的变化,另外,预设哈希链表的大小为素数,而素数除了1和它本身以外不具有其他因数,因此应用本实施例提供的方案存储报文的属性信息时,能够得到较为离散的哈希值,进而能够提高流量探针的吞吐性能。下面通过具体实施例对本申请实施例提供的信息存储方法进行详细说明。图1为本申请实施例提供的第一种信息存储方法的流程示意图,该方法包括:s101:获得报文,并获得报文的属性信息。上述报文的属性信息可以包括报文的五元组信息或者七元组信息。一个实施例中,获得报文后,可以从报文中提取五元组包括的信息:源ip(internetprotocol,网络之间互连的协议)地址、源端口号、目的ip地址、目的端口号和传输协议号。另一个实施例中,获得报文后,还可以从报文中提取七元组包括的信息:源ip地址、源端口号、目的ip地址、目的端口号、传输协议号、接口索引和tos(typeofservice,服务类型)。s102:对所获得的属性信息对应的字符串进行连接,形成新字符串,并对新字符串进行哈希计算,得到第一哈希值。由于报文的各个属性信息取值的类型可能是数值型,也可能是字符串等其他类型,而取值的各种类型均可以转化为字符串类型,因此,对所获得的属性信息对应的字符串依次首尾相连接,可以形成一个新字符串。例如,报文的目的端口号的取值为:8080,可见该取值的类型为数值类型,则8080对应的字符串为:“8080”,两者从具体数字上并没有明显区别,区别在于数据的存储形式上,也就是,一个以整型等数值类型进行存储,一个按照字符串类型进行存储。在形成上述新字符串时,对各个属性信息对应的字符串之间的排列顺序不做限定。假设,所获得的报文的属性信息为报文的五元组信息,五元组中各个信息对应的字符串分别如下表1所示。表1源ip地址源端口号目的ip地址目的端口号传输协议号10.10.10.108011.11.11.118080610.10.10.108111.11.11.1180796则连接所获得的属性信息形成的字符串分别为:10.10.10.108011.11.11.1180806、10.10.10.108111.11.11.1180796。可见,当报文的五元组发生变化时,得到的字符串能够直接体现出所发生的变化。又由于哈希算法对所处理字符串的变化比较敏感,因此,在所处理字符串发生变化的情况下,得到的第一哈希值是不同的。对于现有技术中一种以报文五元组对应的数值之和作为哈希值的哈希算法而言,假设,10.10.10.10对应的数值为m,11.11.11.11对应的数值为n,则根据上述表1记录两组五元组信息计算得到的哈希值分别为:m+n+80+8080+6=m+n+8166m+n+81+8079+6=m+n+8166可见根据表1记录的两组五元组信息计算的哈希值相同。故相对于上述现有技术,本步骤中通过对属性信息对应的字符串进行连接而获得的新字符串进行哈希计算,得到的哈希值能够反映出报文属性信息的变化。本申请的一个实施例中,对上述字符串进行哈希计算时,可以采用bkdr算法对上述字符串进行哈希计算,得到第一哈希值。当然,也可以采用其他能够对字符串进行哈希计算的算法,对上述形成的新字符串进行哈希计算,得到第一哈希值。例如,elfhash算法等等。s103:根据第一哈希值和预设哈希链表的大小,确定所获得属性信息在预设哈希链表中的存储位置,作为第一存储位置。其中,所述预设哈希链表的大小为素数。上述预设哈希链表可以是预先创建的哈希链表。这一预设哈希链表用于存储报文的属性信息。具体的,报文的属性信息在上述预设哈希链表中存储时,存储在预设哈希链表中各个存储位置处的链表节点中。受计算第一哈希值时所采用哈希算法、预设哈希链表的大小等因素的影响,根据第一哈希值和预设哈希链表的大小确定的存储位置可能会相同,也就是说,预设哈希链表中的同一存储位置可能需要存储多种不同报文的属性信息,又由于一个链表节点用于存储一种报文的属性信息,因此,上述预设哈希链表中的每一存储位置处可能会创建有多个链表节点。另外,作为执行主体的电子设备接收到的报文中,可能会存在属性信息相同的报文,为保证预设哈希链表中存储的信息全面、准确,每一链表节点中还可以存储有统计信息,以统计相同属性信息的报文数量。其中,每一链表节点中存储的统计信息可以理解为:已获得报文中属性信息为该链表节点所存储属性信息的报文数量。对于每一链表节点而言,除了存储报文的属性信息、上述统计信息外,还可以存储有获得的报文中属性信息为所存储属性信息的报文的上行报文数、下行报文数、上行字节大小、下行字节大小、流开始时间、流结束时间、应用层协议、应用层的一些属性信息等等。本申请的一个实施例中,根据第一哈希值和预设哈希链表的大小,确定上述第一存储位置时,可以按照以下公式计算得到上述第一存储位置:第一存储位置=第一哈希值%预设哈希链表的大小上述符号“%”表示取余的操作符。本申请的一个实施例中,上述哈希链表的大小为素数。以按照上述公式计算第一存储位置为例,当预设哈希链表的大小为素数时,由于素数仅仅具有1和自身两个因数,因此计算得到的上述第一存储位置相同的概率会大大降低,进而能够有效防止不同报文的属性信息被存储在同一存储位置处的链表节点中,从而能够降低报文的属性信息汇聚的概率,减少存储报文的属性信息时存储位置冲突的情况。另外,在应用过程中,还需要根据具体应用场景确定上述用于表示哈希链表大小的素数的具体取值。s104:判断第一存储位置处是否存在存储有所获得属性信息的第一链表节点,若为是,执行s105,若为否,执行s106-s107。具体的,在判断第一存储位置处是否存在上述第一链表节点时,可以先判断第一存储位置处是否已创建有链表节点。若未创建有链表节点,则可以直接判定第一存储位置处未存储有第一链表节点。若已创建有链表节点,则需要逐个判断各个已创建链表节点中存储的报文的属性信息是否与上述s101中获得的属性信息相匹配,若存在属性信息匹配的链表节点,则判定第一存储位置处存在第一链表节点,若不存在属性信息匹配的链表节点,则判定第一存储位置处不存在第一链表节点。s105:更新第一链表节点中存储的统计信息。更新第一链表节点中存储的统计信息可以是在已存储统计信息的基础上累加1。s106:根据第一存储位置,创建链表节点。本申请的一个实施例中,根据第一存储位置创建链表节点时,可以是直接在第一存储位置处创建链表节点。本申请的另一个实施例中,根据第一存储位置创建链表节点时,也可以是在创建于第一存储位置处的二级哈希链表中创建链表节点,具体情况详见下述实施例,这里暂不详述。s107:将所获得的属性信息存储至所创建链表节点,并更新所创建链表节点中存储的统计信息。由于上述链表节点是新创建的,因此更新所创建链表节点中存储的统计信息可以理解为对所存储的统计信息进行初始化,一般初始化为1。由以上可见,本实施例提供的方案中,在获得报文后,获得报文的属性信息,对所获得属性信息对应的字符串进行连接,形成新字符串,并对新字符串进行哈希计算,得到第一哈希值,根据第一哈希值和预设哈希链表的大小,确定所获得属性信息在预设哈希链表中的第一存储位置,当第一存储位置处存在存储有所获得属性信息的第一链表节点时,更新第一链表节点中存储的统计信息,在第一存储位置处不存在第一链表节点时,根据第一存储位置创建链表节点,将所获得的属性信息存储至所创建链表节点,并更新所创建链表节点中存储的统计信息。因此,若采用上述预设哈希链表构建流表,则应用本实施例提供的方案能够在流表中实现信息存储;又由于基于报文的属性信息对应的字符串连接而形成的新字符串计算哈希值时,计算得到的哈希值能够反映报文的每一属性信息的变化,另外,预设哈希链表的大小为素数,而素数除了1和它本身以外不具有其他因数,因此应用本实施例提供的方案存储报文的属性信息时,能够得到较为离散的哈希值,进而能够提高流量探针的吞吐性能。本申请的一个实施例中,参见图2,提供了第二种信息存储方法的流程示意图,与前述图1所示实施例相比,本实施例中,上述预设哈希链表为一级哈希链表。上述步骤s104判断第一存储位置处是否存在存储有所获得属性信息的第一链表节点,包括:s104a:判断第一存储位置处是否存在二级哈希链表,若存在二级哈希链表,执行s104b,若不存在二级哈希链表,执行s104d。其中,二级哈希链表的层级位于一级哈希链表所在层级的下一级。也就是说,在上述预设哈希链表的各个存储位置处可以创建哈希链表。由于各个存储位置本身是属于预设哈希链表的,所以在各个存储位置处创建的哈希链表位于预设哈希链表所在层级的下一层级。基于此,本申请实施例中为便于描述将上述预设哈希链表称为一级哈希链表,将在各个存储位置处创建的哈希链表称为二级哈希链表。s104b:判断第一存储位置处的二级哈希链表中是否存在存储有所获得属性信息的第一链表节点,若存在第一链表节点,判定第一存储位置处存在第一链表节点,并执行s105,若不存在第一链表节点,判定第一存储位置处不存在第一链表节点,并执行s104c。s104c:在二级哈希链表的第二存储位置处创建链表节点,将所获得的属性信息存储至所创建链表节点,并更新所创建链表节点中存储的统计信息。其中,第二存储位置为:根据所获得属性信息的哈希值和二级哈希链表的大小计算的二级哈希链表中用于存储所获得属性信息的位置。其中,二级哈希链表的大小可以是素数,也可以不是素数。具体的,根据所获得属性信息的哈希值和二级哈希链表的大小,在所创建的二级哈希链表的第二存储位置处创建链表节点时,可以先根据所获得属性信息的哈希值和二级哈希链表的大小,计算上述第二存储位置,然后在所创建的二级哈希链表的第二存储位置处创建链表节点。其中,计算所获得属性信息的哈希值采用的哈希算法,可以与前述图1所示实施例中计算第一哈希值采用的哈希算法相同,也可以不相同,本申请并不对此进行限定。另外,根据所获得属性信息的哈希值和二级哈希链表的大小,计算第二存储位置的方式,与前述根据第一哈希值和预设哈希链表的大小计算第一存储位置的方式相似,这里不再赘述。s104d:判定第一存储位置处不存在第一链表节点。对于上述s106:根据第一存储位置,创建链表节点。本申请的另一个实施例中,上述s106可以通过以下步骤s106a和s106b实现。s106a、在不满足预设的二级哈希链表创建条件的情况下,在第一存储位置处创建链表节点。s106b、在满足预设的二级哈希链表创建条件的情况下,在第一存储位置处创建二级哈希链表,并根据所获得属性信息的哈希值和二级哈希链表的大小,在上述第二存储位置处创建链表节点。本申请的一个实施例中,上述预设的二级哈希链表创建条件可以为:第一存储位置处是不存在二级哈希链表。具体的,判断二级哈希链表是否满足创建条件的过程可以如下:判断第一存储位置处是否存在二级哈希链表;若不存在,判定满足上述预设的二级哈希链表创建条件;若存在,判定不满足上述预设的二级哈希链表创建条件。也就是说,一级哈希链表中各个存储位置处直接下挂有相应的二级哈希链表。本申请的另一个实施例中,上述预设的二级哈希链表创建条件还可以为第一存储位置处的链表节点数量大于预设阈值:。具体的,判断二级哈希链表是否满足创建条件的过程可以如下:判断创建于第一存储位置处的链表节点数量是否大于预设阈值;若为是,判定满足预设的二级哈希链表创建条件;若为否,判定不满足预设的二级哈希链表创建条件。当创建于第一存储位置处的链表节点数量大于预设阈值,说明多种报文的属性信息均存储在了第一存储位置处,也就是出现了存储位置冲突。当创建于第一存储位置处的链表节点数量较多时,说明存储位置冲突的情况比较严重,这样第一存储位置处的链表节点排序较长,后续在第一存储位置处匹配各个链表节点中存储的属性信息时,需从第一个链表节点依次匹配,导致匹配速度慢,匹配效率低。也就是说,本实施例中,仅仅是在创建于第一存储位置处的链表节点数量较多时,才在第一存储位置处创建二级哈希链表,即第一存储位置处位置冲突较为严重的情况下,才在第一存储位置处创建二级哈希链表。具体的,上述预设阈值可以根据具体的硬件资源确定,例如,可以为10、50等等。本实施例不做特别限定。在上述实施例的基础上,本申请的另一个实施例中,还可以在预设哈希链表的各个存储位置处存储一个用于表征该存储位置冲突严重程度的标识,为便于表述将上述标识称为冲突数。当创建于存储位置处的链表节点未达到上述预设阈值时,可以设置上述冲突数的取值为创建于该存储位置处的链表节点的数量。当创建于该存储位置处的链表节点的数量达到上述预设阈值后,可以设置上述冲突数的取值为预设数值,例如,0,后续若需要在该存储位置处存储属性信息,则需要创建二级哈希链表存储该属性信息。这样上述s104a判断第一存储位置处是否存在二级哈希链表,可以通过判断上述冲突数的取值来判断第一存储位置处是否存在二级哈希链表。例如,在上述预设阈值为:10,上述预设数值为:0时,若上述冲突数的取值为0,则可以判定第一存储位置处已存在二级哈希链表;若上述冲突数的取值为5,则可以判定上述第一存储位置处未存储有二级哈希链表。为保证能够及时在第一位置处创建二级哈希链表,本申请的一个实施例中,在第一存储位置处创建链表节点后,还可以判断是否满足预设的二级哈希链表创建条件;若满足,在第一存储位置处创建二级哈希链表;根据创建于第一存储位置处的链表节点中存储的属性信息的哈希值和二级哈希链表的大小,将创建于第一存储位置处的链表节点中存储的属性信息存储至二级哈希链表中的链表节点中;并从第一存储位置处,删除属性信息已存储至二级哈希链表的链表节点。一种实现方式中,可以将创建于第一存储位置处的所有链表节点中存储的属性信息均存储至二级哈希链表中,相应的,删除链表节点时,从第一存储位置处,删除创建于第一存储位置处的所有链表节点。另一种实现方式中,可以将上述报文的属性信息存储至二级哈希链表中,相应的,删除链表节点时,从第一存储位置处,删除存储上述报文的属性信息的链表节点。具体的,根据创建于第一存储位置处的链表节点中存储的属性信息的哈希值和二级哈希链表的大小,将创建于第一存储位置处的链表节点中存储的属性信息存储至二级哈希链表中的链表节点中时,可以分别对创建于第一存储位置处的每一链表节点执行以下步骤a-c,从而将创建于第一存储位置处每一链表节点中的属性信息存储至二级哈希链表中的链表节点。为便于描述,步骤a-c中将创建于第一存储位置处的各个链表节点称为节点m。步骤a,计算节点m中存储的属性信息对应的哈希值。本步骤中,可以采用前述基于字符串的哈希算法(如,bkdr算法)等计算哈希值,还可以将节点m中存储的属性信息转化为整型数后累加的结果作为哈希值等等,本申请并不对本步骤中计算哈希值的方式进行限定。步骤b,采用步骤a计算得到的哈希值和二级哈希链表的大小,计算节点m中存储的属性信息在二级哈希链表中的存储位置。例如,可以采用以下公式计算节点m中存储的属性信息在二级哈希链表中的存储位置:步骤a计算得到的哈希值%二级哈希链表的大小。步骤c,判断步骤b计算得到的存储位置处是否已存在用于存储节点m中所存储属性信息的链表节点,若存在,更新该链表节点中存储的统计信息,若不存在,在步骤b计算得到的存储位置处创建链表节点,并将节点m中存储的属性信息存储于所创建的链表节点中。具体的,在二级哈希链表的各个存储位置处创建链表节点时,可以采用顺延法创建。从上述各个实施例提供的方案可以看出,在预设哈希链表中存储信息时,预设哈希链表中的各个存储位置处可以创建二级哈希链表,这样报文的属性信息、统计信息等可以存储在二级哈希链表的不同存储位置中。现有技术中,将报文的属性信息直接存储于预设哈希链表中各存储位置处的链表节点中,查找每一存储位置下与所获得属性信息相配的链表节点时,只能从该存储位置下的第一个链表节点开始逐个向后查询,直至遍历该存储位置下的每一链表节点,或者查找到与所获得属性信息相匹配的链表节点。查找速度慢,效率低。而上述各个本申请实施例提供的方案中,将报文的属性信息存储在二级哈希链表的不同存储位置后,查找与报文的属性信息相匹配的链表节点时,可以根据报文属性信息的哈希值和二级哈希链表的大小计算二级哈希链表中用于存储报文属性信息的存储位置,然后直接在二级链表中查找上述存储位置,无需逐一查找链表节点。又由于二级哈希链表是创建于一级哈希链表存储位置处的下一级哈希链表,相比于一级哈希链表,二级哈希链表所存储的报文属性信息种类会大大减少,也就是,二级哈希链表中存储位置冲突的情况会大大减轻,因此,当预设哈希链表,也就是一级哈希链表中存储位置冲突严重时,即便二级哈希链表中依然有可能会存储存储位置冲突,也可以降低依次匹配存储位置处各个链表节点中所存储属性信息消耗的时间,从而提到后续数据查找的效率。下面结合图3,通过具体实例对本申请实施例提供的信息存储方法进行更加详细的介绍。s301:获得报文x,并提取报文x的五元组。s302:报文x的五元组对应的字符串依次收尾相连接形成新字符串,记为字符串s,采用bkdr算法对字符串s进行哈希计算,得到第一哈希值v1。s303:通过公式v1%l1,计算得到s301所提取五元组在预设哈希链表中的第一存储位置。上述l1为预设哈希链表的大小,l1的取值为素数。s304:判断第一存储位置处是否已创建有链表节点,若未创建有链表节点,说明第一存储位置处还不存在存储有s301所提取五元组的第一链表节点,执行s305,若创建有链表节点,这时还不能准确确定第一存储位置处是否已存在第一链表节点,需要进一步进行判断,执行s306。s305:在第一存储位置处创建链表节点,并将s301提取的五元组存储于该链表节点,并更新所创建链表节点中存储的统计信息为1,设置用于表征第一存储位置冲突情况的冲突数为1。s306:判断冲突数是否为预设数值0,若不是预设数值0,则说明还没有在第一存储位置处创建二级哈希链表,执行s307,若是预设数值0,则说明已经在第一存储位置创建了二级哈希链表,执行s311。s307:从已创建于第一存储位置处的第一个链表节点开始,逐个查看是否已经存储第一链表节点,若存在第一链表节点,则执行s308,若不存在第一链表节点,则执行s309。s308:将第一链表节点中存储的统计信息累加1。s309:在第一存储位置处创建链表节点,并将s301提取的五元组存储于该链表节点,并更新所创建链表节点中存储的统计信息为1,将冲突数累加1。s310:累加后的冲突数大于预设阈值的情况下,在第一存储位置处创建二级哈希链表,并将已创建于第一存储位置处的链表节点中所存储的五元组存储至所创建的二级哈希链表中,删除已创建于第一存储位置处的所有链表节点,并将上述冲突数设置为预设数值0。s311:获得s301所提取五元组的哈希值,记为v2,根据v2%l2计算s301所提取五元组在二级哈希链表中的第二存储位置。上述l2为二级哈希链表的大小。s312:从已创建于第二存储位置处的第一个链表节点开始,逐个查看是否已经存储第一链表节点,若存在第一链表节点,将第一链表节点中存储的统计信息累加1,若不存在第一链表节点,在第二存储位置处创建链表节点,将s301提取的五元组存储于该链表节点,并更新所创建链表节点中存储的统计信息为1。与上述信息存储方法相对应,本申请实施例提供了一种信息存储装置。图4提供了第一种信息存储装置的结构示意图,该装置包括:信息获得模块401,用于获得报文,并获得所述报文的属性信息;哈希值计算模块402,用于对所获得属性信息对应的字符串进行连接,形成新字符串,并对所述新字符串进行哈希计算,得到第一哈希值;位置确定模块403,用于根据所述第一哈希值和预设哈希链表的大小,确定所获得属性信息在所述预设哈希链表中的存储位置,作为第一存储位置,其中,所述预设哈希链表的大小为素数;节点判断模块404,用于判断所述第一存储位置处是否存在存储有所获得属性信息的第一链表节点,若为是,触发信息更新模块405,若为否,触发节点创建模块406;所述信息更新模块405,用于更新所述第一链表节点中存储的统计信息,其中,每一链表节点中存储的统计信息为:已获得报文中属性信息为该链表节点所存储属性信息的报文数量;所述节点创建模块406,用于根据所述第一存储位置,创建链表节点;第一信息存储模块407,用于将所获得的属性信息存储至所创建链表节点,并更新所创建链表节点中存储的统计信息。本申请的一个实施例中,所述哈希值计算模块,具体用于对所获得属性信息对应的字符串进行连接,形成新字符串,采用bkdr算法对所述新字符串进行哈希计算,得到第一哈希值。由以上可见,本实施例提供的方案中,在获得报文后,获得报文的属性信息,对所获得属性信息对应的字符串进行连接,形成新字符串,并对新字符串进行哈希计算,得到第一哈希值,根据第一哈希值和预设哈希链表的大小,确定所获得属性信息在预设哈希链表中的第一存储位置,当第一存储位置处存在存储有所获得属性信息的第一链表节点时,更新第一链表节点中存储的统计信息,在第一存储位置处不存在第一链表节点时,根据第一存储位置创建链表节点,将所获得的属性信息存储至所创建链表节点,并更新所创建链表节点中存储的统计信息。因此,若采用上述预设哈希链表构建流表,则应用本实施例提供的方案能够在流表中实现信息存储;又由于基于报文的属性信息对应的字符串连接而形成的新字符串计算哈希值时,计算得到的哈希值能够反映报文的每一属性信息的变化,另外,预设哈希链表的大小为素数,而素数除了1和它本身以外不具有其他因数,因此应用本实施例提供的方案存储报文的属性信息时,能够得到较为离散的哈希值,进而能够提高流量探针的吞吐性能。本申请的一个实施例中,与前述图4所示实施例相比,本实施例中,所述预设哈希链表为一级哈希链表;所述节点判断模块404,包括:表判断单元,用于判断所述第一存储位置处是否存在二级哈希链表,若存在二级哈希链表,触发节点判断单元,若不存在二级哈希链表,触发节点判定单元;所述节点判断单元,用于判断所述第一存储位置处的二级哈希链表中是否存在存储有所获得属性信息的第一链表节点;若存在所述第一链表节点,判定所述第一存储位置处存在所述第一链表节点;若不存在所述第一链表节点,判定所述第一存储位置处不存在所述第一链表节点,并在所述二级哈希链表的第二存储位置处创建链表节点,将所获得的属性信息存储至所创建链表节点,并更新所创建链表节点中存储的统计信息,其中,所述第二存储位置为:根据所获得属性信息的哈希值和二级哈希链表的大小计算的二级哈希链表中用于存储所获得属性信息的位置;所述节点判定单元,用于判定所述第一存储位置处不存在所述第一链表节点。本申请的一个实施例中,所述节点创建模块406,包括:第一节点创建单元,用于在不满足预设的二级哈希链表创建条件的情况下,在所述第一存储位置处创建链表节点;第二节点创建单元,用于在满足预设的二级哈希链表创建条件的情况下,在所述第一存储位置处创建二级哈希链表,并根据所获得属性信息的哈希值和二级哈希链表的大小,在第二存储位置处创建链表节点;其中,所述第二存储位置为:根据所获得属性信息的哈希值和二级哈希链表的大小计算的二级哈希链表中用于存储所获得属性信息的位置。本申请的一个实施例中,所述预设的二级哈希链表创建条件为:所述第一存储位置处的链表节点数量大于预设阈值。本申请的一个实施例中,上述信息存储装置还可以包括:条件判断模块,用于在所述第一存储位置处创建链表节点后,判断是否满足所述预设的二级哈希链表创建条件,若满足,链表创建模块;所述链表创建模块,用于在所述第一存储位置处创建二级哈希链表;第二信息存储模块,用于根据创建于所述第一存储位置处的链表节点中存储的属性信息的哈希值和二级哈希链表的大小,将创建于所述第一存储位置处的链表节点中存储的属性信息存储至二级哈希链表中的链表节点中;节点删除模块,用于从所述第一存储位置处,删除属性信息已存储至二级哈希链表的链表节点。从上述各个实施例提供的方案可以看出,在预设哈希链表中存储信息时,预设哈希链表中的各个存储位置处可以创建二级哈希链表,这样报文的属性信息、统计信息等可以存储在二级哈希链表的不同存储位置中。现有技术中,将报文的属性信息直接存储于预设哈希链表中各存储位置处的链表节点中,查找每一存储位置下与所获得属性信息相配的链表节点时,只能从该存储位置下的第一个链表节点开始逐个向后查询,直至遍历该存储位置下的每一链表节点,或者查找到与所获得属性信息相匹配的链表节点。查找速度慢,效率低。而上述各个本申请实施例提供的方案中,将报文的属性信息存储在二级哈希链表的不同存储位置后,查找与报文的属性信息相匹配的链表节点时,可以根据报文属性信息的哈希值和二级哈希链表的大小计算二级哈希链表中用于存储报文属性信息的存储位置,然后直接在二级链表中查找上述存储位置,无需逐一查找链表节点。又由于二级哈希链表是创建于一级哈希链表存储位置处的下一级哈希链表,相比于一级哈希链表,二级哈希链表所存储的报文属性信息种类会大大减少,也就是,二级哈希链表中存储位置冲突的情况会大大减轻,因此,当预设哈希链表,也就是一级哈希链表中存储位置冲突严重时,即便二级哈希链表中依然有可能会存储存储位置冲突,也可以降低依次匹配存储位置处各个链表节点中所存储属性信息消耗的时间,从而提到后续数据查找的效率。与上述信息存储方法相对应,本申请实施例还提供了一种电子设备。图5为本申请实施例提供的一种电子设备的结构示意图,该电子设备包括:处理器501和机器可读存储介质502,所述机器可读存储介质502存储有能够被所述处理器501执行的机器可执行指令,所述处理器501被所述机器可执行指令促使:实现本申请实施例提供的信息存储方法。本申请的一个实施例中,提供了一种信息存储方法,所述方法包括:获得报文,并获得所述报文的属性信息;对所获得属性信息对应的字符串进行连接,形成新字符串,并对所述新字符串进行哈希计算,得到第一哈希值;根据所述第一哈希值和预设哈希链表的大小,确定所获得属性信息在所述预设哈希链表中的存储位置,作为第一存储位置,其中,所述预设哈希链表的大小为素数;判断所述第一存储位置处是否存在存储有所获得属性信息的第一链表节点;若为是,更新所述第一链表节点中存储的统计信息,其中,每一链表节点中存储的统计信息为:已获得报文中属性信息为该链表节点所存储属性信息的报文数量;若为否,根据所述第一存储位置,创建链表节点,将所获得的属性信息存储至所创建链表节点,并更新所创建链表节点中存储的统计信息。。需要说明的是,处理器501被机器可执行指令促使实现的信息存储方法的其他实施例,与前述方法实施例部分提及的实施例相同,这里不再赘述。机器可读存储介质可以包括随机存取存储器(randomaccessmemory,ram),也可以包括非易失性存储器(non-volatilememory,nvm),例如至少一个磁盘存储器。可选的,机器可读存储介质还可以是至少一个位于远离前述处理器的存储装置。上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。由以上可见,因此,若采用上述预设哈希链表构建流表,则应用本实施例提供的方案能够在流表中实现信息存储;又由于基于报文的属性信息对应的字符串连接而形成的新字符串计算哈希值时,计算得到的哈希值能够反映报文的每一属性信息的变化,另外,预设哈希链表的大小为素数,而素数除了1和它本身以外不具有其他因数,因此应用本实施例提供的方案存储报文的属性信息时,能够得到较为离散的哈希值,进而能够提高流量探针的吞吐性能。与上述信息存储方法相对应,本申请实施例还提供了一种机器可读存储介质,存储有机器可执行指令,在被处理器调用和执行时,所述机器可执行指令促使所述处理器:实现本申请实施例提供的信息存储方法。本申请的一个实施例中,提供了一种信息存储方法,所述方法包括:获得报文,并获得所述报文的属性信息;对所获得属性信息对应的字符串进行连接,形成新字符串,并对所述新字符串进行哈希计算,得到第一哈希值;根据所述第一哈希值和预设哈希链表的大小,确定所获得属性信息在所述预设哈希链表中的存储位置,作为第一存储位置,其中,所述预设哈希链表的大小为素数;判断所述第一存储位置处是否存在存储有所获得属性信息的第一链表节点;若为是,更新所述第一链表节点中存储的统计信息,其中,每一链表节点中存储的统计信息为:已获得报文中属性信息为该链表节点所存储属性信息的报文数量;若为否,根据所述第一存储位置,创建链表节点,将所获得的属性信息存储至所创建链表节点,并更新所创建链表节点中存储的统计信息。。需要说明的是,机器可读存储介质促使处理器实现的信息存储方法的其他实施例,与前述方法实施例部分提及的实施例相同,这里不再赘述。由以上可见,因此,若采用上述预设哈希链表构建流表,则应用本实施例提供的方案能够在流表中实现信息存储;又由于基于报文的属性信息对应的字符串连接而形成的新字符串计算哈希值时,计算得到的哈希值能够反映报文的每一属性信息的变化,另外,预设哈希链表的大小为素数,而素数除了1和它本身以外不具有其他因数,因此应用本实施例提供的方案存储报文的属性信息时,能够得到较为离散的哈希值,进而能够提高流量探针的吞吐性能。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备和机器可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1