一种时序数据的聚合优化处理方法与流程

文档序号:16550885发布日期:2019-01-08 21:06阅读:1420来源:国知局
一种时序数据的聚合优化处理方法与流程

本发明涉及数据处理领域,具体涉及一种时序数据的聚合优化处理方法。



背景技术:

时序数据是指时间序列数据,是一种按照时间顺序记录的数据列,有专门的时序数据库来处理时序数据的存储和查询。

现有技术中,通常一个时序数据库里包含有多个时间序列数据,除单一时间序列数据的读取之外,通常需要将多个时间序列数据进行聚合计算操作。通常的做法是将每个时间序列单独处理,得到结果,放在缓存里,然后将结果汇总聚合。

然而,相对于每个时间序列都需要扫描一次数据库文件,多个时间序列,就要打开并扫描多次数据库文件,这样导致磁盘io次数大增,影响系统性能。



技术实现要素:

本发明的目的在于克服现有技术的不足,提供一种时序数据的聚合优化处理方法,通过这种方法,无论是对于单一时间序列数据的读取,还是对于多个时间序列的聚合操作,都只需要扫描一次数据文件即可完成,这样大幅减少磁盘io次数,提升整体性能。

本发明提供了一种时序数据的聚合优化处理方法,其包括如下步骤:

将时序数据库文件划分为数据文件和索引文件;

按照计算的起止时间段扫描索引文件,将符合时间段条件的所有需要聚合的时间序列的索引块抽出来后,根据索引块里记录的数据文件偏移量进行排序;

按照排序后的索引块顺序扫描数据文件,对每个数据块进行指定的读取和计算后,将计算结果汇总。

进一步地,索引块排序时,偏移量小的排在前。

进一步地,数据文件包含多个时间序列的数据块。

进一步地,索引文件记录每个时间序列的数据块的信息。

进一步地,索引文件里,每个时间序列,都有一个索引汇总信息块,以及一到多个索引块。索引汇总信息块包含时间序列的id,数据块的个数。

进一步地,每个时间序列有一到多个索引块,每一个数据块有一个对应的索引块,该索引块包含了数据块在数据文件里的偏移量offset,开始时间,结束时间、记录条数和其他信息。

进一步地,指定某一或多个时间序列和时间段后,将符合时间段条件的数据块全部抽出的步骤,包括:

查找索引文件,找到对应的数据块在数据块文件里的偏移量并按偏移量进行排序;

根据排序后的偏移量,从数据块文件里读取数据块;

获取数据块里指定时间段的数据。

进一步地,将时序数据记录写入数据库时,先将其写入内存。

进一步地,当内存的占用达到一定的比例或每隔一定的时间,将内存缓存的时序数据写入磁盘。

进一步地,将时序数据写入磁盘的步骤包括:

1)每个时间序列的数据在内存里按照时间排序;

2)按照数据块大小的设置,对每一个时间序列数据,将内存数据用追加方式写入数据文件,生成一个或多个数据块;

3)对每个新的数据块,将包括开始时间、结束时间、记录条数的数据块信息计入一个新的索引块,写入索引文件;

4)每一个时间序列的索引汇总信息块与索引块信息连续存放,内存数据每次落盘时重新生成新的块索引文件。

本发明的时序数据的聚合优化处理方法,可以实现:

1)如果一个数据文件仅包含一个时间序列数据,数据文件数目会过多,而且聚合操作时,需要对每个参与聚合的时间序列,至少有一次打开和扫描操作,如果参与聚合的时间序列多,打开和扫描文件次数就多,性能会大幅下降,采用一个数据文件包含多个时间序列数据的方式可有效提高性能;

2)数据文件本身存储采集的时序数据,文件会很大,采用追加的方式添加新的数据块;

3)设计有索引文件,索引文件里保存一个时间序列的数据块在数据文件里的偏移量,从而可快速高效的进行查询扫描;

4)将参与聚合的多个时间序列的数据块按照偏移量进行排序,排序后,只需要扫描一次数据文件,就能得到聚合计算的结果

附图说明

图1为时序数据库优化设计后的结构示意图。

具体实施方式

下面详细说明本发明的具体实施,有必要在此指出的是,以下实施只是用于本发明的进一步说明,不能理解为对本发明保护范围的限制,该领域技术熟练人员根据上述本发明内容对本发明做出的一些非本质的改进和调整,仍然属于本发明的保护范围。

本发明提供了一种时序数据的聚合优化处理方法,下面对该方法进行具体的介绍。

将一时序数据库文件划分为两个文件,一个是数据块文件,一个是块索引文件,下面进行进一步介绍:

(1)数据块文件

数据块文件存储采集的时序数据本身,其包含有多个时间序列的数据。为减少随机访问,提高读取速度,数据是按块存储的,每一块数据仅仅属于一个时间序列,但包含多条记录,而且按照时间排序。在读取单一的时间序列数据时,指定时间段,只需要顺序扫描,读取相应的数据块即可完成,性能可以达到最优。

为减少磁盘io操作,内存缓存的数据落盘时,新数据采用追加的方式写入数据块文件,也就是说新的数据永远在文件最后添加,这样就是顺序写,而无需挪动磁头,减少随机读写次数。

根据应用场景,数据块的大小可以配置,每个数据文件包含的时间序列的个数可以配置。

(2)块索引文件

为了快速找到某一时间序列某一时间段的数据块,系统建立有块索引文件。该块索引文件记录了每个时间序列的所有数据块的信息,其结构如图1所示:

在索引文件里,文件头之后,每个时间序列占有固定的字节数,其中包含指向时间序列数据块信息的offset(偏移量)。

1)每个时间序列在索引文件里有索引汇总信息块,有如下信息:

·时间序列的id

·数据块的个数

·其他辅助信息,比如checksum

2)索引汇总信息块之后,有一到多个索引块,一个时间序列在数据文件里的一个数据块都有一个对应的索引块。这个索引块包含如下信息:

·数据块在数据块文件里的offset(偏移量)

·该数据块的开始时间

·该数据块的结束时间

·该数据块里包含的记录条数

·其他辅助信息,比如预聚合的数据

每个时间序列都保证了自己的记录是按照时间排序的,但是不同的时间序列的数据块在数据文件里无法保证是按照时间排序的。如果tij表示时间序列i、数据块j的开始时间,则应该有如下关系:

ti0<ti1<ti2<…<tin

另外一个时间序列k虽然也存在如上的关系,但是无法保证两个序列混合在一起存储时,不同序列的块是按照时间排序的。

(3)写入操作

应用将一条时序数据记录写入数据库时,系统会先写入内存。当内存的占用达到一定的比例或每隔一定的时间,系统根据下面的步骤将内存缓存的时序数据写入磁盘。

1)确保每个时间序列的数据在内存里按照时间排序;

2)按照数据块大小的设置,对每一个时间序列数据,将内存数据用追加方式写入数据块文件,生成一个或多个数据块。

3)对每个新的数据块,将其开始时间、结束时间、记录条数等计入一个索引块,写入块索引文件。

4)为减少随机读写,一个时间序列的索引块在索引文件里需要连续存放,因此内存数据每次落盘时,需要重新生成新的块索引文件。但因为块索引文件不大,因此资源消耗不多。

(4)单一时间序列数据的读取、计算

指定某一时间序列和时间段后,按下面步骤读取数据;

1)查找块索引文件,找到对应的数据块在数据块文件里的偏移量;

2)根据偏移量,从数据块文件里读取数据块;

3)如果要获取的数据仅是一个数据块的一部分,可以按照对半查找,时间间隔比例查找等方法获取指定时间段的数据;

4)如果有多个数据块,处理下一个;

对于单一时间序列,数据块虽然不是物理上连续的,但是已经按照时间排序,因此访问效率很高。

(5)聚合查询、计算

通常多个时间序列的聚合简单处理方式是:每个时间序列单独处理,然后将每个序列的结果最后聚合。但这样做,对于每个序列都需要扫描一次数据块文件,文件io次数与聚合的时间序列的数目成正比,时间序列的数目越多,性能下降越厉害。

因此,本申请进行优化后按下面步骤进行聚合查询、计算:

1)扫描索引文件,按照聚合计算的起止时间段,将符合时间段条件和其他过滤条件的索引块全部抽出来,存放在缓存区,扫描结束后,这个缓存区里包含了所有需要进行聚合的时间序列里满足条件的索引块。

2)索引块里记录有对应的数据块在数据文件里的offset(偏移量),对存放在缓存区的索引块按照offset排序,offset小的排在前。排序结束后,同一个时间序列,如果有多个数据块,索引块可能不连续在一起了,而且索引块的开始时间无法保证是排序的,只保证是按照偏移量(offset)排序的。

3)按照排序后的数据库,扫描数据文件,对每个数据块进行指定的计算(如sum,avg,count等),然后将计算结果汇总。

实施例1:

采取优化之前和之后的性能对比:

测试中对100个时间序列数据做聚合操作(sum,avg,max,min四个),其中一组是每个序列一万条记录,另外一组是每个序列一百万条记录,优化前后四个聚合操作所花时间对比如下(时间单位为毫秒):

从上述两组数据可以看出,100个时间序列进行聚合时,性能提升2倍以上。如果时间序列数据越多,提升的性能会更明显。

尽管为了说明的目的,已描述了本发明的示例性实施方式,但是本领域的技术人员将理解,不脱离所附权利要求中公开的发明的范围和精神的情况下,可以在形式和细节上进行各种修改、添加和替换等的改变,而所有这些改变都应属于本发明所附权利要求的保护范围,并且本发明要求保护的产品各个部门和方法中的各个步骤,可以以任意组合的形式组合在一起。因此,对本发明中所公开的实施方式的描述并非为了限制本发明的范围,而是用于描述本发明。相应地,本发明的范围不受以上实施方式的限制,而是由权利要求或其等同物进行限定。

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