一种时间序列数据处理方法与流程

文档序号:29156947发布日期:2022-03-08 21:20阅读:171来源:国知局
一种时间序列数据处理方法与流程

1.本发明涉及计算机存储技术领域,尤其涉及一种时间序列数据处理方法。


背景技术:

2.高频行情数据是指交易过程中实时产生的数据,全球市场每天产生的数据量已经到百亿级别,单市场每天交易时间产生的数据量可以达到10亿级别。随着证券市场的发展,研究分析高频行情数据的需求越来越大,对行情数据的存储分析系统的需求也越来越大。
3.高频行情数据是一种时间序列数据,它不仅具备普通时序数据的特点,无需更新、时间有序;同时,它还有自身的特点,同一时间具有很多维度的属性,如行情快照数据,一条记录包含上百个相关的属性;随着量化研究工作的开展,需要向现有的时序数据中增加衍生属性,并保存到系统中,也可能删除一些衍生属性。
4.时序数据优选方案是采用列式存储,在存储引擎的设计方面,目前主流的列式存储格式如parquet、orcfile等,能提供很高的压缩效率,但普遍存在的一个问题是,整个表格包含的所有列的数据都存储在同一个文件中,不支持增加列或者删除字段的操作。一旦遇到这类需求,则需要将已有数据读入内存,在内存中合并新的列或者删除旧的列的数据,再重新生成新的数据文件。随着数据容量的增加,会消耗大量的系统资源,效率非常低,缺乏可扩展性。
5.传统的存储模型往往针对冷热数据进行优化。分层过程本身需要对数据进行合并、转存,定期将热数据合并到冷存储,这个过程会产生大量的io,占用大量系统资源。对于tb级别的时间序列数据的存储系统,更是难以承受。
6.传统的数据库查询服务的设计上,数据查询过程都是由查询服务独立完成,对于海量的时序数据进行查询,在完成所有的筛选、过滤,就需要对压缩的数据块重新解压、过滤,而时序数据的压缩比通常都很高,该过程放在服务器端完成,会占用大量的内存资源和处理器资源,降低了服务器的并行处理能力。


技术实现要素:

7.有鉴于此,本发明提供了一种时间序列数据处理方法,该方法在存储引擎的设计上采用分区、分列存储各时序数据的方式,能够在不修改现有数据文件的情况下,高效地增加、删除表格字段;通过将查询过程拆分成粗筛过程和数据精确过滤过程,并把数据精确过滤从查询服务器中分离出来,避免在查询服务器内部进行解压数据、过滤数据等消耗资源的处理,从而极大地提升了服务器的处理能力,以支持海量的时序数据查询。
8.一种时间序列数据处理方法,用于客户端,所述方法具体包括以下步骤:
9.获取用户通过客户端api发送的查询指令;
10.对查询指令进行处理,以将查询指令构造为第一部分查询请求和第二部分查询请求;
11.将第一部分查询请求发送至服务器,以使服务器根据第一部分查询请求从其按照
设定的列存储方式进行存储的时间序列数据中调取相应数据块并将该初步查询结果发送给客户端;
12.根据第二部分查询请求对初步查询结果进行过滤,得到最终查询结果并返回给用户。
13.一种时间序列数据处理方法,用于服务器,所述方法具体包括以下步骤:
14.接收客户端发送的第一部分查询请求;
15.根据第一部分查询请求从其按照设定的列存储方式进行存储的时间序列数据中调取相应的数据块,得到初步查询结果;
16.将初步查询结果发送给客户端,以使客户端根据第二部分查询请求对初步查询结果进行过滤从而得到最终查询结果。
17.优选地,所述第一部分查询请求包括表名t、目标字段、分区d、主键k,
18.根据第一部分查询请求从其按照设定的列存储方式进行存储的时间序列数据中调取相应的数据块的具体步骤为:
19.根据第一部分查询请求的表名t和分区d,确定目标存储目录d/t;
20.从目标存储目录d/t中加载索引文件d/t/i,根据索引文件d/t/i匹配得到主键k对应的分组信息g;
21.读取目标存储目录d/t下包含目标字段的所有数据文件x尾部的索引块,从索引块中查询出分组信息g在对应数据文件内的偏移和尺寸,利用查询得到的偏移和尺寸读取出对应的数据块b,得到初步查询结果。
22.优选地,所述主键k对应的分组信息g包括主键k对应的分组在分区d内的分块起始记录号和记录数。
23.优选地,在确定目标存储目录之前,还需检查表名t和目标字段的有效性及权限信息,若无效即返回错误提示。
24.优选地,第二部分查询请求包括执行时间和其他相关字段;
25.根据第二部分查询请求对初步查询结果进行过滤的具体步骤为:
26.对初步查询结果的数据块进行解码;
27.根据第二部分查询请求的执行时间和其他相关字段对解码后的数据块进行过滤,得到选中记录的下标数组j;
28.对选中记录的下标数组j执行投影操作,得到最终查询结果。
29.优选地,时间序列数据按照设定的列存储方式进行存储的步骤为:
30.在磁盘文件系统中输入时间序列数据及其表名t,每条时间序列数据均包括数据时间、主键k、一个或多个字段f;
31.按照设定的时间粒度对所有的时间序列数据进行分区,每个分区d均对应创建一个存储目录d/t;
32.按照主键k将各分区内的时间序列数据进行分组,得到每个分区的分组信息g,将每条分组信息g分别保存为一个索引文件d/t/i并设置于对应的存储目录d/t下;
33.按照字段f在存储目录d/t下创建数据文件x,一个字段对应创建一个数据文件x,数据文件x包括文件头、数据块、索引块和文件尾。
34.优选地,按照字段f在存储目录d/t下创建数据文件x的步骤为:
35.在数据文件x中写入文件头信息;
36.根据每个分区d内各分组的分组信息g,逐个对各分组中包含有字段f的时间序列数据进行编码,得到数据块b,并将数据块b写入数据文件x;
37.将数据块b在当前文件块中的偏移量和尺寸信息作为索引块追加写入到数据文件x的尾部;
38.将索引块在当前文件块中的偏移量和尺寸信息写到文件尾。
39.优选地,当向磁盘文件系统中输入包含新字段的新的时间序列数据时,包括以下步骤:
40.当磁盘文件系统中输入新的时间序列数据及其表名和分区;
41.根据新的时间序列数据的表名、分区和主键,确定其所属的存储目录并从该存储目录中加载索引文件,重构出分组信息g’,将该分组信息g’保存为新的索引文件设置于该存储目录下;
42.按照新字段在该存储目录下创建出新的数据文件x’。
43.优选地,当需删除磁盘文件系统中包含某一字段的时间序列数据时,包括以下步骤:
44.输入表名、分区和待删除字段;
45.根据表面和分区确定存储目录,删除该存储目录下该待删除字段所对应的数据文件。
46.本发明的有益效果是:
47.1、本发明通过将用户的查询指令分解为第一部分查询请求和第二部分查询请求,使服务器根据第一部分查询请求调取得到粗筛的初步查询结果,再使客户端引擎根据第二部分查询请求对初步查询结果进行精确过滤,把消耗资源的第二部分查询过程放到客户端完成,避免在服务器内部进行解压数据、过滤数据等消耗资源的处理,极大地降低了服务器的性能开销、提升了服务器的处理能力,以支持海量的时序数据查询。
48.2、本发明通过将时间序列数据按照分区、分列的方式进行存储,具有同一相同字段的时间序列数据独立存储在一个数据文件中,当需增加或删除具有某一字段的时间序列数据时只需对应增加或删除根据该字段创建得到的数据文件即可,大大提高了tb级数据更新、删除操作的效率。
49.3、本发明数据存储模块的存储设计区别于传统存储方式,去掉了冷热分层的概念和合并过程,对于tb级的数据的更新、删除操作非常高效,能够高效地操作大容量的时间序列数据。
附图说明
50.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
51.图1是时间序列数据处理系统的结构示意图。
52.图2是查询数据的流程示意图。
53.图3是列式数据文件的结构示意图。
54.图4是分组信息g示意图。
55.图5是时间序列数据处理方法(用于客户端)的流程示意图。
56.图6是时间序列数据处理方法(用于服务器)的流程示意图。
具体实施方式
57.为使本发明的目的、技术方案和优点更加清楚明了,下面通过附图中示出的具体实施例来描述本发明。但是应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
58.为了更好的理解本发明的技术方案,下面结合附图对本发明进行详细描述。
59.首先介绍执行本发明实施例所给出的时间序列数据处理方法的系统,该系统用于客户端和服务端。
60.用于客户端的时间序列数据处理系统,包括客户端api、客户端引擎。
61.客户端api用于为用户提供查询接口,以调用客户端引擎处理查询指令并将从客户端引擎接收到的查询结果返回给用户。
62.客户端引擎用于对查询指令进行处理,以将查询指令构造为第一部分查询请求和第二部分查询请求,并将第一部分查询请求发送至服务器,以使服务器根据第一部分查询请求从数据存储模块中查询调取相应的数据块,再跟进第二部分查询请求对接收到的数据块进行解压过滤,得到最终的查询结果,将该查询结果通过客户端api返回给用户。
63.用于服务端的时间序列数据处理系统,包括服务器和数据存储模块。
64.所述服务器用于根据客户端引擎发送过来的第一部分查询请求从数据存储模块中查询调取相应的数据块并将数据块返回给客户端引擎。
65.所述数据存储模块用于存储时间序列数据。数据存储模块中的时间序列数据按照分区、分列的方式进行存储,具有同一相同字段的时间序列数据独立存储在一个数据文件中,当需增加或删除具有某一字段的时间序列数据时只需对应增加或删除根据该字段创建得到的数据文件即可,大大提高了tb级数据更新、删除操作的效率。
66.具体地,向数据存储模块中存储时间序列数据的步骤为:
67.s1,在磁盘文件系统中输入多条时间序列数据及其表名t,每条时间序列数据均包括数据时间、主键k、一个或多个字段f。
68.s2,按照设定的时间粒度对所有的时间序列数据进行分区,每个分区内是一段时间范围内的时间序列数据。分区作为增加、更新、删除操作的最小粒度。
69.然后,每个分区d均对应创建一个存储目录d/t。
70.s3,按照主键k将每个分区内的时间序列数据进行分组,具有相同主键k的时间序列数据属于同一个分组,每个分组内的时间序列数据使用稳定的排序算法进行排序,确保每个分组内部记录的时间序列数据排列的顺序保持不变。
71.对每个分区内的时间序列数据进行再分组后,即可得到每个分区的分组信息g,分组信息g由若干条分组记录构成,包括主键k对应的分组在其所属分区d内的分块起始记录号sn和记录数cn,如图4所示。
72.然后,将每条分组信息g分别保存为一个索引文件d/t/i,并将索引文件d/t/i设置
于对应的存储目录d/t下。
73.主键k的选择按照查询模式选择。
74.s4,按照字段f在存储目录d/t下创建数据文件x,即具有相同字段f的时间序列数据共同构成一个数据文件,一个字段对应创建一个数据文件x。假设某分区下的所有时间序列数据中共包含2种字段:字段f1和字段f2,利用所有包含字段f1的时间序列数据在存储目录d/t下创建数据文件x1,利用所有包含字段f2的时间序列数据在存储目录d/t下创建数据文件x2。
75.数据文件x由文件头、数据块、索引块和文件尾组成。
76.具体地,按照字段f在存储目录d/t下创建数据文件x的步骤为:
77.s41,在数据文件x中写入文件头信息,文件头信息包括记录文件版本、属性值类型、编码类型和记录条数;
78.s42,根据每个分区d内各分组的分组信息g,逐个对各分组中包含有字段f的时间序列数据进行编码,得到数据块b(在对包含有字段f的时间序列数据进行编码的过程中,按照这些时间序列数据所对应的分组信息g进行逐个编码,同属于一个分组的时间序列数据对应生成一个数据块),将所有的数据块b写入数据文件x,并记录每块数据块的偏移和尺寸;
79.s43,将所有的数据块b在当前文件块中的偏移量和尺寸信息汇总起来作为索引块追加写入到数据文件x的尾部;
80.s44,将索引块在当前文件块中的偏移量和尺寸信息写到文件尾,创建得到数据文件x,如图3所示。
81.进一步地,当向磁盘文件系统中输入包含新字段的新的时间序列数据时,包括以下步骤:
82.s5,向磁盘文件系统中输入新的时间序列数据及其表名和分区,新的时间序列数据也包括数据时间、主键k、一个或多个新增的新字段f’,新的时间序列数据的分区应为步骤s2中已划定分区中的其中一个分区;
83.s6,根据新的时间序列数据的表名、分区和主键,确定其所属的存储目录并从该存储目录中加载索引文件,按照步骤s3的方法重构出分组信息g’,将该分组信息g’保存为新的索引文件设置于该存储目录下;
84.s7,按照步骤s4的方法,按照新字段在该存储目录下创建出新的数据文件x’。
85.进一步地,当需删除磁盘文件系统中包含某一字段的时间序列数据时,包括以下步骤:
86.s8,输入表名、分区和待删除字段;
87.s9,根据表面和分区确定存储目录,删除该存储目录下该待删除字段所对应的数据文件。
88.基于上述时间序列数据处理系统,图5为本发明提供的时间序列数据处理方法(用于客户端)的流程示意图,如图5所示,该方法包括以下步骤:
89.一、获取用户通过客户端api发送的查询指令。
90.二、客户端引擎对查询指令进行处理,以将查询指令构造为第一部分查询请求和第二部分查询请求。
91.第一部分查询请求包括表名t、目标字段、分区d和主键k。
92.第二部分查询请求包括执行时间和其他相关字段。
93.三、将第一部分查询请求发送至服务器,以使服务器根据第一部分查询请求从其按照上述步骤s1-s9所述的列存储方式进行存储的时间序列数据中调取相应数据块并将该初步查询结果发送给客户端。
94.具体地,根据第一部分查询请求从数据存储模块中调取相应数据块的具体步骤为:
95.首先,根据第一部分查询请求的表名t和分区d,确定目标存储目录d/t;
96.然后,从目标存储目录d/t中加载索引文件d/t/i,根据索引文件d/t/i匹配得到主键k对应的分组信息g,即得到主键k对应的分组在其所属分区内的分块起始记录号和记录数;
97.然后,读取目标存储目录d/t下包含目标字段的所有数据文件x尾部的索引块,从索引块中查询出分组信息g在对应数据文件内的偏移和尺寸,利用查询得到的偏移和尺寸读取出对应的数据块b,得到初步查询结果。应当说明的是,第一部分查询请求中的目标字段可以为一个字段,也可为多个字段。当第一部分查询请求中的目标字段为多个字段时,逐个对各个目标字段做本步骤的处理,将得到的所有的数据块b一起构成初步查询结果发送给客户端的客户端引擎。
98.优选地,在确定目标存储目录之前,还需检查表名t和目标字段的有效性及权限信息,若无效即返回错误提示。
99.四、根据第二部分查询请求对初步查询结果进行过滤,得到最终查询结果并返回给用户。
100.具体地,根据第二部分查询请求对初步查询结果进行过滤的具体步骤为:
101.首先,对初步查询结果的数据块进行解码;
102.然后,根据第二部分查询请求的执行时间和其他相关字段对解码后的数据块进行过滤,得到选中记录的下标数组j;
103.最后,对选中记录的下标数组j执行投影操作,得到最终查询结果。
104.本发明给出一种时间序列数据处理方法通过将用户的查询指令分解为第一部分查询请求和第二部分查询请求,使服务器根据第一部分查询请求调取得到粗筛的初步查询结果,再使客户端引擎根据第二部分查询请求对初步查询结果进行精确过滤,把消耗资源的第二部分查询过程放到客户端完成,避免在服务器内部进行解压数据、过滤数据等消耗资源的处理,极大地降低了服务器的性能开销、提升了服务器的处理能力,以支持海量的时序数据查询。
105.图6为本发明提供的时间序列数据处理方法(用于服务器)的流程示意图,如图6所示,该方法包括以下步骤:
106.一、接收客户端发送的第一部分查询请求。
107.二、根据第一部分查询请求从其按照上述步骤s1-s9所述的列存储方式进行存储的时间序列数据中调取相应的数据块,得到初步查询结果。
108.具体地,根据第一部分查询请求从数据存储模块中调取相应数据块的具体步骤为:
109.首先,根据第一部分查询请求的表名t和分区d,确定目标存储目录d/t;
110.然后,从目标存储目录d/t中加载索引文件d/t/i,根据索引文件d/t/i匹配得到主键k对应的分组信息g,即得到主键k对应的分组在其所属分区内的分块起始记录号和记录数;
111.然后,读取目标存储目录d/t下包含目标字段的所有数据文件x尾部的索引块,从索引块中查询出分组信息g在对应数据文件内的偏移和尺寸,利用查询得到的偏移和尺寸读取出对应的数据块b,得到初步查询结果。应当说明的是,第一部分查询请求中的目标字段可以为一个字段,也可为多个字段。当第一部分查询请求中的目标字段为多个字段时,逐个对各个目标字段做本步骤的处理,将得到的所有的数据块b一起构成初步查询结果发送给客户端的客户端引擎。
112.优选地,在确定目标存储目录之前,还需检查表名t和目标字段的有效性及权限信息,若无效即返回错误提示。
113.三、将初步查询结果发送给客户端,以使客户端根据第二部分查询请求对初步查询结果进行过滤从而得到最终查询结果。
114.根据第二部分查询请求对初步查询结果进行过滤的具体步骤为:
115.首先,对初步查询结果的数据块进行解码;
116.然后,根据第二部分查询请求的执行时间和其他相关字段对解码后的数据块进行过滤,得到选中记录的下标数组j;
117.最后,对选中记录的下标数组j执行投影操作,得到最终查询结果。
118.本发明给出一种时间序列数据处理方法通过将用户的查询指令分解为第一部分查询请求和第二部分查询请求,服务器仅根据第一部分查询请求调取得到粗筛的初步查询结果,消耗资源的第二部分查询过程放到客户端完成,避免在服务器内部进行解压数据、过滤数据等消耗资源的处理,极大地降低了服务器的性能开销、提升了服务器的处理能力,以支持海量的时序数据查询。
119.本发明还给出一种电子设备,该电子设备包括处理器、存储器、通讯接口等。处理器可以调用存储器中的逻辑指令,以执行上述时间序列数据处理方法,其中时间序列数据处理方法包括用于客户端的时间序列数据处理方法和用于服务器的时间序列数据处理方法。
120.此外,上述存储器中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备执行本发明实施例所述方法的全部或部分步骤。而前述的存储介质包括u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
121.另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述实施例提供的时间序列数据处理方法,其中时间序列数据处理方法包括用于客户端的时间序列数据处理方法和用于服务器的时间序列
数据处理方法。
122.又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述实施例提供的时间序列数据处理方法,其中时间序列数据处理方法包括用于客户端的时间序列数据处理方法和用于服务器的时间序列数据处理方法。
123.通过以上实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必须的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
124.最后应当明确的是,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1