一种数据存储方法及装置与流程

文档序号:12176284阅读:161来源:国知局
一种数据存储方法及装置与流程
本发明涉及网络数据分析
技术领域
,具体提供一种数据存储方法及装置。
背景技术
:在进行网络数据分析中,常常需要抓取网络中的数据并进行存储,以便后续对数据进行读取分析。目前,网络数据的存储方式是,将抓取到的数据按照抓取的先后顺序,依次存储在硬盘中。然而,该种存储方式不利于数据的读取,即读取利用该种方式存储的数据时效率较低,不利于网络数据的分析。技术实现要素:本发明的技术任务是针对上述存在的问题,提供一种能提高数据的读取效率,方便对网络数据进行分析的数据存储方法。本发明的进一步的技术任务是提供一种能实现上述提高数据的读取效率,方便对网络数据进行分析的方法的数据存储装置。为实现上述目的,本发明提供了如下技术方案:一种数据存储方法及装置,将抓取到的数据按照时间先后顺序暂存在缓存中,记录具有相同类型属性的数据在缓存中的位置,利用记录的内容将缓存中的数据按照属性类型排序后存储到硬盘中,即将具有相同类型属性的数据连续存储,该数据存储方法的具体步骤为:S1:依据抓取数据的先后顺序,将抓取到的多条数据存储在第一缓存中,其中,各条所述数据具有N个相同类型的属性,N为大于1的整数;S2:依据所述多条数据在第一缓存中的位置,生成第一嵌套哈希表,其中,所述第一嵌套哈希表由N层第一哈希表嵌套组成,各层所述第一哈希表的键依次为所述N个相同类型的属性,且第一层至第N-1层所述第一哈希表的值依次为下一层的第一哈希表,第N层第一哈希表的值为各条所述数据在第一缓存中的地址值;S3:根据预设遍历顺序,依次获取所述第N层第一哈希表中的地址值;S4:根据获取各个所述地址值的顺序,依次将第一缓存中各个所述地址值对应的数据存储至硬盘。步骤S1中,当需要对网络数据进行分析时,可利用抓取工具,从网络中抓取数据,并依据抓取到的时间先后顺序,将数据存储到缓存中,其中可以在预设的时间段内,每当抓取工具抓取到一条网络数据,即将该网络数据存入到缓存中,或者,抓取工具在预设时间段内抓取到多条网络数据,然后,按照抓取顺序,将该多条数据存入到缓存中。网络数据具有属性,抓取的多条数据具有相同类型的属性。为了将步骤S1中的数据重新排序,需要记录具有相同类型属性的数据在缓存中的位置,本发明中采用哈希表的方式来记录。哈希表利用键值对存储数据,即哈希表中可以存储若干个哈希记录,每个哈希记录具有一个键及一个值,两者具有对应关系。本发明中生成的哈希表为嵌套的多层哈希表,嵌套的形式是,由内向外的第一层至第N-1层哈希表的值依次为下一层的哈希表。所述嵌套哈希表的层数与数据相同的属性类型的个数相等,即步骤S1中的N值与步骤S2中的N值相等。每层哈希表中的键是一种类型的属性,这样生成的嵌套哈希表利用每层哈希表中键记录相同类型属性的数据。每层哈希表中的哈希记录个数可以为一个,也可以为多个,每层中各个哈希记录的键为相同类型的属性,但是属性值并不相同。最内层即第N层哈希表的值为数据在缓存中的地址。生成第一嵌套哈希表的过程为:数据存储在缓存中,也就是说每条数据均对一个缓存中的地址。由于每条数据均具有N种类型的属性,根据数据自身每种类型属性的属性值,一层一层查找键内容与数据的属性值相同的哈希表记录,直至找到第N层哈希表的哈希记录,将该数据在缓存中的地址存储在查找到的该哈希记录的值中,如此反复即可生成第一嵌套哈希表。步骤S2生成的第一嵌套哈希表中包括多层哈希表,哈希表具有预设的遍历顺序,和数组遍历顺序相似,按照键的内容依次遍历。具体地,从第一层哈希表开始,当第一层的哈希表中的记录为多个时,则按照预设顺序,从第一个哈希记录开始。当该哈希记录的值为下一个哈希表时,则进入下一层哈希表中,从下一层哈希表的第一个记录开始判断,当该下一层哈希表中的哈希记录的值为下下一层哈希表时,进入该下下一层哈希表,判断该下下一层哈希表中的哈希记录的值,重复上述步骤,直至某层哈希表中的哈希记录的值为数据在缓存中的地址,此时,获取该缓存中的地址,这样获取到第N层中的第一个哈希记录的值。同理获取到第N层中其他哈希记录的值。遍历结束后,获取到的值为各个数据在缓存中的地址值,且地址值的获取顺序是按照数据的属性类型分类获取到的。步骤S4中将各个地址值中的数据依次存储至硬盘中,存储的顺序为获取到各个地址值的顺序。这样,将原来按照抓取先后顺序存储的数据,按照属性类型连续存储,此种存储方式将零散的数据按照属性类型聚合在一起,从而在读取时可以方便且快速的查找到具有相同属性类型的数据,数据读取效率高。步骤S3和步骤S4是可以交替执行的,即每当步骤S3获取到地址值,便依据该地址值,在缓存中查找到该地址值对应的数据,进而执行步骤S4将数据存储至硬盘。作为优选,步骤S4中,根据获取各个所述地址值的顺序,依次将第一缓存中各个所述地址值对应的数据存储至硬盘包括根据获取各个所述地址值的顺序,依次将所述第一缓存中各个所述地址值对应的数据存储至第二缓存中,将第二缓存中的数据依次存储至硬盘。作为优选,还包括生成并存储第二嵌套哈希表,其中,所述第二嵌套哈希表由N层第二哈希表嵌套组成,每层所述第二哈希表的键为三元组,且第一层至第N-1层所述第二哈希表的值依次为下一层的第二哈希表,第N层第二哈希表的值为各条所述数据在所述硬盘中的地址值。作为优选,所述每层三元组的第一元素依次为所述N个相同类型的属性,每层所述三元组的第二元素为各自层对应类型的属性包含的数据在所述硬盘中的起始地址,每层所述三元组的第三元素为各自层对应类型的属性包含的数据在所述硬盘中的数据长度。数据存储至硬盘后,依据所述第二嵌套哈希表,从所述硬盘中读取存储的数据。其中包括:1)当接收到数据读取指令时,提取所述数据读取指令中的属性类型及属性值;2)在所述第二嵌套哈希表中,确定与所述属性类型及属性值对应的目标三元组;3)依据所述目标三元组的第二元素及第三元素,从所述硬盘中读取存储的数据。一种数据存储装置,包括第一缓存存储单元、第一哈希表生成单元、缓存地址值获取单元和硬盘数据存储单元,所述第一缓存存储单元用于依据抓取数据的先后顺序,将抓取到的多条数据存储至第一缓存,其中,各条所述数据具有N个相同类型的属性;所述第一哈希表生成单元用于依据所述多条数据在第一缓存中的位置,生成第一嵌套哈希表,第一嵌套哈希表由N层第一哈希表嵌套组成;所述缓存地址值获取单元用于根据预设遍历顺序,依次获取所述第N层第一哈希表中的地址值;所述硬盘数据存储单元用于根据获取各个所述地址值的顺序,依次将所述第一缓存中各个所述地址值对应的数据存储至硬盘。所述各层第一哈希表的键依次为所述N个相同类型的属性,且第一层至第N-1层所述第一哈希表的值依次为下一层的第一哈希表,第N层第一哈希表的值为各条所述数据在所述第一缓存中的地址值。作为优选,所述硬盘数据存储单元包括第二缓存存储子单元和硬盘数据存储子单元,第二缓存存储子单元用于根据获取各个所述地址值的顺序,依次将所述第一缓存中各个所述地址值对应的数据存储至第二缓存中;所述硬盘数据存储子单元用于将所述第二缓存中的数据依次存储至硬盘。作为优选,还包括第二哈希表生成单元,用于生成并存储第二嵌套哈希表,其中,所述第二嵌套哈希表由N层第二哈希表嵌套组成。每层所述第二哈希表的键为三元组,且第一层至第N-1层所述第二哈希表的值依次为下一层的第二哈希表,第N层第二哈希表的值为各条所述数据在所述硬盘中的地址值。各层所述三元组的第一元素依次为所述N个相同类型的属性,每层所述三元组的第二元素为各自层对应类型的属性包含的数据在所述硬盘中的起始地址,每层所述三元组的第三元素为各自层对应类型的属性包含的数据在所述硬盘中的数据长度。数据存储到硬盘后,由硬盘数据读取单元依据所述第二套哈希表从所述硬盘中读取存储的数据,所述硬盘数据读取单元包括:1)读取指令接收子单元,用于当接收到数据读取指令时,提取所述数据读取指令中的属性类型及属性值;2)目标三元组确定子单元,用于在所述第二嵌套哈希表中,确定与所述属性类型及属性值对应的目标三元组;3)硬盘数据读取子单元,用于依据所述目标三元组的第二元素及第三元素,从所述硬盘中读取存储的数据。与现有技术相比,本发明的数据存储方法具有以下突出的有益效果:本发明的数据存储方法将抓取到的数据按照时间先后顺序暂存在缓存中,然后记录具有相同类型属性的数据在缓存中的位置,利用记录的内容将缓存中的数据按照属性类型排序后存储到硬盘中,即具有相同类型属性的数据连续存储,在读取时可按照属性条件连续读取数据,提高了数据读取效率,克服了现有技术中将抓取到的数据按照抓取先后顺序依次存储在硬盘中,导致不利于数据读取的不足。附图说明图1是本发明所述数据存储方法的流程图;图2是本发明的读取存储数据方法的流程图;图3是本发明所述数据存储装置的结构示意图;图4是本发明的读取存储数据的装置的结构示意图。具体实施方式下面将结合附图和实施例,对本发明的数据存储方法及装置作进一步详细说明。实施例如图1所示,本发明的数据存储方法:将抓取到的数据按照时间先后顺序暂存在缓存中,记录具有相同类型属性的数据在缓存中的位置,利用记录的内容将缓存中的数据按照属性类型排序后存储到硬盘中,即将具有相同类型属性的数据连续存储。该数据存储方法的具体步骤为:S1:依据抓取数据的先后顺序,将抓取到的多条数据存储在第一缓存中,其中,各条所述数据具有N个相同类型的属性,N为大于1的整数。当需要对网络数据进行分析时,可利用抓取工具,从网络中抓取数据,并依据抓取到的时间先后顺序,将数据存储到缓存中,其中可以在预设的时间段内,每当抓取工具抓取到一条网络数据,即将该网络数据存入到缓存中,或者,抓取工具在预设时间段内抓取到多条网络数据,然后,按照抓取顺序,将该多条数据放入到缓存中。网络数据具有属性,抓取的多条数据具有相同类型的属性。数据的属性类型可以是时间、物理地址、数据方向、IP会话数据包、TCP会话数据包等,则读取需求可以是某个时间段内某物理地址发送的所有数据包,则第一嵌套哈希表中存储的属性类型分别是时间、物理地址及数据方向;或者读取需求是某个时间段内某物理地址接收的所有数据包,则第一嵌套哈希表中存储的属性类型分别是时间、物理地址及数据方向;或者读取需求是某个时间段内某IP会话的所有数据包,则读取需求是时间及IP会话数据包;或者读取需求是某个时间段内某TCP会话的所有数据包,则读取需求是时间及TCP会话数据包。当然,上面几种属性类型及读取需求仅仅是示例,具体的情况可以因抓取到的数据而不同,本发明实施例并不做具体限定。以抓取到TCP会话中的数据包为例,每个数据包都包括“源IP地址”、“源端口”、“目标IP地址”以及“目标端口”,这四种属性为相同类型的属性。S2:依据所述多条数据在第一缓存中的位置,生成第一嵌套哈希表,其中,所述第一嵌套哈希表由N层第一哈希表嵌套组成,各层所述第一哈希表的键依次为所述N个相同类型的属性,且第一层至第N-1层所述第一哈希表的值依次为下一层的第一哈希表,第N层第一哈希表的值为各条所述数据在第一缓存中的地址值。为了将步骤S1中的数据重新排序,需要记录具有相同类型属性的数据在缓存中的位置,本发明中采用哈希表的方式来记录。哈希表利用键值对存储数据,即哈希表中可以存储若干个哈希记录,每个哈希记录具有一个键及一个值,两者具有对应关系。本发明中生成的哈希表为嵌套的多层哈希表,嵌套的形式是,由内向外的第一层至第N-1层哈希表的值依次为下一层的哈希表。嵌套哈希表的层数与数据相同的属性类型的个数相等,即步骤S1中的N值与步骤S2中的N值相等。每层哈希表中的键是一种类型的属性,这样生成的嵌套哈希表利用每层哈希表中键记录相同类型属性的数据。每层哈希表中的哈希记录个数可以为一个,也可以为多个,每层中各个哈希记录的键为相同类型的属性,但是属性值并不相同。最内层即第N层哈希表的值为数据在缓存中的地址。生成第一嵌套哈希表的过程为:数据存储在缓存中,也就是说每条数据均对一个缓存中的地址。由于每条数据均具有N种类型的属性,根据数据自身每种类型属性的属性值,一层一层查找键内容与数据的属性值相同的哈希表记录,直至找到第N层哈希表的哈希记录,将该数据在缓存中的地址存储在查找到的该哈希记录的值中,如此反复即可生成第一嵌套哈希表。第一嵌套哈希表的形式如下表1所示:例如,抓取到的数据包括三个相同类型的属性,分别为属性A、属性B和属性C,如表1所示的哈希表,该哈希表包括三层,其中,由内至外,第一层哈希表的键属于属性A,各个哈希记录的键分别为a1、a2……an,各个哈希记录的值为第二层哈希表,第二层哈希表的键表示属性B,各个哈希记录的键分别为b1、b2……bn,各个哈希记录的值为第三层哈希表,第三层哈希表的键表示属性C,各个哈希记录的键分别为c1、c-2……cn,各个哈希记录的值为数据的缓存地址。表1:从最内层来看,数据集合1包含的各条数据的属性值分别为a1、b1及c1,数据集合2包含的各条数据的属性值分别为a2、b2及c2,数据集合n包含的各条数据的属性值分别为an、bn及cn。从最外层看,数据是按照属性A进行聚合的,即所有数据按照属性A的值进行分类,属性A的值不同的数据分别属于不同的哈希记录。从第二层看,在第一层的分类基础上,数据是按照属性B进行聚合的,即属性B的值不同的数据分别属于不同的哈希记录。依次类推,直至最内一层的哈希表。需要说明的是,每一层哈希表中的各个哈希记录是具有存储顺序的,该顺序是抓取时间先后顺序。由表1所示的第一嵌套哈希表可以看出,第一嵌套哈希表利用每层哈希表的键分别记录不同类型属性的数据的缓存地址,且当多个数据同一类型的属性值相同时,这多个数据的缓存地址值会存储在同一个哈希记录中。生成上述表1所示第一嵌套哈希表的具体过程为:假设抓取到的数据具有三种类型的属性,分别为属性A、属性B及属性C。抓取到的数据分别为(d1,d2,d3….dn),各条数据暂存到缓存中,便可获取到每条数据在缓存中的地址。建立一张哈希表HA,该哈希表HA作为最外层的哈希表,该哈希表HA的键用于存储抓取到的数据的属性A的值,值用于存储下一层的哈希表HB;该哈希表HB的键用于存储抓取到的数据的属性B的值,值用于存储下一层的哈希表HC;该哈希表HC的键用于存储抓取到的数据的属性C的值,值用于存储数据在缓存中地址。第一步,获取抓取到的第一条数据d1,该第一条数据的属性A的值为Ad,在该哈希表HA中查找键为Ad的哈希记录,若找到,则进行后续步骤,否则,在该哈希表HA中添加一条键为Ad且值为空哈希表的记录。第二步,假设上一步在哈希表HA中查找到的(或添加的)记录为rhb,记录rhb的值也是一张哈希表HB。该第一条数据d1的属性B的值为Bd,在哈希表HB中查找键为Bd的哈希记录,若找到,则进行后续步骤,否则,在该哈希表HB中添加一条键为Bd且值为空哈希表的记录。第三步,假设上一步在哈希表HB中查找到的(或添加的)记录为rhc,记录rhc的值也是一张哈希表HC。该第一条数据d1的属性C的值为Cd,在哈希表HC中查找键为Cd的哈希记录,若找到,则进行后续步骤,否则,在该哈希表HC中添加一条键为Cd且值为空数据集合的记录。第四步,假设上一步在哈希表HC中查找到的(或添加的)记录为rds,则rds的值为数据集合,该数据集合中包含的是d1在缓存中的地址,至此,完成一条数据的缓存地址的存储过程。接下来继续获取抓取到的下一条数据d2,同理,将数据d2的缓存地址按照上述步骤进行存储,将抓取到的数据的缓存地址存储完成后即生成第一嵌套哈希表。下面用表2、表3及表4来说明各层哈希表。其中:从最外层来看,数据的缓存地址是按照属性A的值进行聚合并排序,如表2所示:表2:进入下一层看,数据的缓存地址是按照属性B的值进行聚合并排序的,如表3所示:表3:“属性B”值为b1的数据的缓存地址“属性B”值为b2的数据的缓存地址…“属性B”值为bn的数据的缓存地址进入下一层看,数据的缓存地址是按照属性C的值进行聚合并排序的,如表4所示:表4:“属性C”值为c1的数据的缓存地址“属性C”值为c2的数据的缓存地址…“属性C”值为cn的数据的缓存地址S3:根据预设遍历顺序,依次获取所述第N层第一哈希表中的地址值。S4:根据获取各个所述地址值的顺序,依次将第一缓存中各个所述地址值对应的数据存储至硬盘。首先将第一缓存中的数据存储在第二缓存中,再将第二缓存中的数据依次存储至硬盘。具体地,将第一缓存中的数据按照第一嵌套哈希表的遍历顺序存储至第二缓存中,由于第一嵌套哈希表是按照属性类型分类存储地址值的,则依据该遍历顺序将各个地址值对应的数据存储到第二缓存中后,第二缓存中属于同一类型属性的数据会连续存储,将该第二缓存中的数据依次存储至硬盘,从而硬盘中存储的数据也是按照属性类型连续存储的。该种实现方式中,利用第二缓存将第一缓存中的数据存储至硬盘,避免直接将第一缓存中的数据存储至硬盘时,多次写入硬盘造成的硬盘I/O接口压力。为了方便数据的读取,生成并存储第二哈希表,该第二哈希表用于记录每种类型的属性对应的数据在硬盘中的起始地址及数据长度。具体地,第二嵌套哈希表由N层第二哈希表嵌套组成,每层第二哈希表的键为三元组,且第一层至第N-1层第二哈希表的值依次为下一层的第二哈希表,第N层第二哈希表的值为各条数据在硬盘中的地址值;各层三元组的第一元素依次为N个相同类型的属性,每层三元组的第二元素为各自层对应类型的属性包含的数据在硬盘中的起始地址,每层三元组的第三元素为各自层对应类型的属性包含的数据在硬盘中的数据长度。第二嵌套哈希表利用键的三元组记录属性值、数据存储的起始地址及数据长度。该表的具体形式可参见表5所示。表5:从表5可以看出,属性A的属性值分别为(a1、a2…an),属性B的属性值分别(b1、b2…bn),属性C的属性值分别为(c1、c2…cn);属性值为a1的连续数据的起始地址为addr_a1,数据长度为len_a1,属性值为a1及b1的连续数据的起始地址为addr_b1、数据长度为len_b1,以此类推,可知其他数据。利用该第二嵌套哈希表可以进行数据读取,具体如下所述:根据抓取到的数据的属性类型,利用上述各个实施例将抓取到的数据存储至硬盘,以方便数据读取,即当接收到数据读取指令时,依据生成的第二嵌套哈希表,从硬盘中读取存储的数据。具体地,如图2所示,该读取过程包括:1)当接收到数据读取指令时,提取数据读取指令中的属性类型及属性值。其中,数据读取指令中包括属性类型及属性值。例如,属性类型为时间段及四元组即源IP地址、源端口、目标IP地址以及目标端口。2):在第二嵌套哈希表中,确定与属性类型及属性值对应的目标三元组。以上述表5所示的第二嵌套哈希表为例,查找该表中属性类型为提取的属性类型且属性值为提取的属性值的三元组,假设属性类型为A且属性值为a1,则查找到的三元组为(a1,addr_a1,len_a1);又如属性类型为A及B,属性值分别为a1及b2,则查找到的三元组为(b2,addr_b2,len_b2)。3):依据目标三元组的第二元素及第三元素,从硬盘中读取存储的数据。即以目标三元组的第二元素的起始地址为起始点,从硬盘中读取第三元素表示的数据长度的连续数据,该段连续数据即是需要读取的数据。例如,抓取到的数据的属性类型包括时间及TCP会话数据包,进一步地,TCP会话数据包的属性类型是四元组,那么存储的数据类型包括时间及四元组,当将数据按照上述实施例提供的存储方式存储到硬盘中后,数据按照属性类型进行了重排,即具有相同时间和/或相同四元组的数据连续存储,且第二嵌套哈希表中记录有连续存储的相同时间和/或相同四元组的数据的起始地址及数据长度,这样在读取某个时间段内某四元组的数据时,只需在第二嵌套哈希表中查找到该段数据的起始地址及数据长度,从该起始地址开始读取该段数据长度的连续数据即可。如图3所示,本发明的数据存储装置包括第一缓存存储单元、第一哈希表生成单元、缓存地址值获取单元和硬盘数据存储单元。第一缓存存储单元用于依据抓取数据的先后顺序,将抓取到的多条数据存储至第一缓存,其中,各条数据具有N个相同类型的属性。第一哈希表生成单元用于依据多条数据在第一缓存中的位置,生成第一嵌套哈希表,第一嵌套哈希表由N层第一哈希表嵌套组成。各层第一哈希表的键依次为N个相同类型的属性,且第一层至第N-1层第一哈希表的值依次为下一层的第一哈希表,第N层第一哈希表的值为各条数据在第一缓存中的地址值。缓存地址值获取单元用于根据预设遍历顺序,依次获取第N层第一哈希表中的地址值。硬盘数据存储单元用于根据获取各个地址值的顺序,依次将第一缓存中各个地址值对应的数据存储至硬盘。硬盘数据存储单元包括第二缓存存储子单元和硬盘数据存储子单元,第二缓存存储子单元用于根据获取各个地址值的顺序,依次将第一缓存中各个地址值对应的数据存储至第二缓存中。硬盘数据存储子单元用于将第二缓存中的数据依次存储至硬盘。该数据存储装置还包括第二哈希表生成单元,用于生成并存储第二嵌套哈希表;其中,第二嵌套哈希表由N层第二哈希表嵌套组成,每层第二哈希表的键为三元组,且第一层至第N-1层第二哈希表的值依次为下一层的第二哈希表,第N层第二哈希表的值为各条数据在硬盘中的地址值。各层三元组的第一元素依次为N个相同类型的属性,每层三元组的第二元素为各自层对应类型的属性包含的数据在硬盘中的起始地址,每层三元组的第三元素为各自层对应类型的属性包含的数据在硬盘中的数据长度。该数据存储装置还包括硬盘数据读取单元,用于依据第二嵌套哈希表,从硬盘中读取存储的数据。硬盘数据读取单元包括读取指令接收子单元、目标三元组确定子单元及硬盘数据读取子单元。其中,读取指令接收子单元用于当接收到数据读取指令时,提取数据读取指令中的属性类型及属性值;目标三元组确定子单元用于在第二嵌套哈希表中,确定与属性类型及属性值对应的目标三元组;硬盘数据读取子单元用于依据目标三元组的第二元素及第三元素,从硬盘中读取存储的数据。以上所述的实施例,只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1