基于周期对数的二维时序数据存储和查询方法
【专利摘要】本发明公开了一种基于周期对数的二维时序数据存储和查询方法,主要特点如下:(1)多级目录式结构;(2)将周期取对数作为索引;(3)按起始结束时间进行分块。本发明能够实现大量数据的分块存储,在使用较小内存的情况下仍能正常工作,并且此结构在两个维度上具有很高的存储和查询效率,为大数据提供了一种新型的快速存储和查询方法。
【专利说明】基于周期对数的二维时序数据存储和查询方法
【技术领域】
[0001]本发明涉及一种基于周期对数的二维时序数据存储和查询方法,适用于时序数据存储和查询【技术领域】。
【背景技术】
[0002]二维时序数据主要来自于一类按照时间周期返回数据的传感器,这类传感器会被安装在需要实时监测的设备上,比如仪表盘、锅炉等,通过传感器传回监测设备的属性数据,比如某一时刻的温度、锅炉的压力等,系统可以完整的记录下设备的整个运行状况,在设备出现问题时可以通过历史记录进行问题分析和问题定位。当前的应用发展趋势表明,被监测个体的数目正在迅速增长,同时随着技术的进步以及应用的需求,数据回传的周期也越来越短。对于大量二维时序数据,要进行两个维度的快速存储和查询,传统的朴素方法在数据量激增的时候,在某一维度上的查询将进行很多I/o操作,效率非常低。由于时序数据量通常非常之大,为每个数据都建立索引空间很不现实,为此,我们设计一种基于周期对数的二维数据存储方法,建立索引,提高查询效率。
【发明内容】
[0003]发明目的:针对现有技术中存在的问题,本发明提供一种基于周期对数的二维时序数据存储和查询方法,通过设计基于周期对数的数据存储结构,建立索引,实现对时序数据的二个维度的插入与查询功能。为了便于说明,此处说明一下应用背景:有若干个设备,分别按一定周期产生数据。查询某一设备一段时间内的数据称为批量查询,查询某一时间点,一批设备的数据称为断面查询;批量提交和断面提交即为对应的插入操作。
[0004]技术方案:一种基于周期对数的二维时序数据存储和查询方法,采用分块存储,其主要存储特点如下:
[0005](I)采用多级目录结构:最底层为一个数据块,多个数据块构成一个节点,多个节点串成一条链;
[0006](2)每条链有个唯一参数t,只存储周期在[2\ 2t+1)上的数据;
[0007](3)在参数为t的链上的节点有个唯一的参数i,只存储周期在[(1-l)*I*2t+1,i*I*2t+1)上的数据(其中I为常数)。
[0008]本发明采用上述技术方案,具有以下有益效果:通过设计基于周期对数的数据存储结构,建立索引,能够实现大量数据的分块存储,在使用较小内存的情况下仍能正常工作,并且此结构在两个维度上具有很高的存储和查询效率。
【专利附图】
【附图说明】
[0009]图1是数据存储结构图;
[0010]图2是索引结构图;
[0011]图3是批量查询算法流程图。【具体实施方式】
[0012]下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
[0013]基于周期对数的二维时序数据存储和查询方法,主要步骤如下:
[0014]1、设计数据存储结构
[0015]我们设计的数据存储结构如图1所示:
[0016]图中每一个小长方体代表一个数据块,存储数据,S、F代表每个数据块的开始时间和终止时间;每三个叠在一起的长方体代表一个数据块节点(并不代表每个数据块节点只有三个数据块,可以有任意个);每个横排的多个数据块节点为一条数据链,每条链都有不同的时间参数T,同一条链上的时间参数相同,多条链组成一个数据表。
[0017]设计过程可以从下述的几个方面来说明:
[0018](1)数据块的设计
[0019]数据块的大小:数据块不应太小,否则查询数据量很大时会有很多IO操作,对于PC来说,参考大小为64M。
[0020]存储时间的限制:因为每个数据块的大小应该是事先固定的,所以每个数据块必须有规定的时间范围。假设时间下界为S,时间上界为f,则数据块存储的是某一设备在时间段[s,f]内的数据。
[0021]存储设备的限制:每个设备的数据都有固定的时间间隔,在同一个节点中应该尽量避免同时存储两个时间间隔相差很大的设备,否则会导致在某些情况下,对于大周期设备的批量查询,会跨越非常多的文件(块),这是不希望看到的。
[0022]为了解决这一问题,我们将时间间隔之比小于等于2的设备存储在同一数据块中,而为了使得设备的时间间隔之比小于等于2,我们为每条链(见下)增加了一个时间参数t,使每条链只存储时间周期在[2\2?+1)内的设备。
[0023](2)数据块节点的设计
[0024]由于数据量很大,一个数据块64M可能不能存储所有满足时间周期在[2\2?+1)内的设备数据,需要多个数据块来存储,我们将所有时间参数t相同的数据块定义为一个数据块节点。为了保证节点的连续性,引进新的参数i,参数i代表数据块节点处于第几个时间段,引进参数I为数据块宽度,那么,对于数据链上第i个节点存储设备的时间范围为[(1-l)*I*2t+1,i*I*2t+1),在 PC 上,I 的参考值为 10240。
[0025]通过上面的分析,可知每个数据块节点中存储的设备数据的周期都在[2\t+1)之间,并且第i个节点存储的是设备在时间段[(i-l)*I*2t+1,i*I*2t+1)内的数据。并且,各个节点中每个数据块的时间参数和时间上下界是相同的。
[0026](3)数据链的设计
[0027]每个数据块节点只存储了设备在时间段[S,f)内的数据,这些数据只是每个设备数据的一部分,所以要存储设备的所有数据就要将具有同一时间参数t而不同时间段的数据块节点组成一条链,定义为一个数据链。
[0028]每个数据链存储的是设备数据的周期在[2\2?+1)之间的所有设备的数据,包含时间参数t和链与数据块节点之间的索引关系。
[0029](4)整个数据表的设计
[0030]每条数据链存储的是设备数据的周期在[2\21之间的所有设备的数据,所以将具有不同时间参数t的数据链组成一个表,这个表存储了每个设备的所有数据,将这个表定义为数据表。
[0031]2、设计索引
[0032]针对上面所描述的数据存储结构,我们设计的索引如图2所示。
[0033]图中的Table代表整个数据表,Chain代表上面所提到的数据链,一个数据表Table是由若干个数据链组成的。数据链Chain包含两个参数:Node和t, Node代表数据块节点,一个数据链是由若干个数据块节点Node组成的;t代表时间参数,在存储结构的设计中已经提到过,数据块节点的存储对设备的周期有一定的限制,只存储时间周期在[2\2?+1)内的设备。数据块节点Node包含四个参数:Block、1、t和last,Block代表一个数据块,一个数据块节点是由若干个数据块Block组成的;参数i用于和参数t共同决定数据块存储数据的起始时间和终止时间,第i个节点存储设备的时间范围为[(1-l)*I*2t+1,i*I*2t+1) ;t和数据块节点中的t含义是相同的;last代表当前活跃的块,在写入数据操作中把新添加的数据存放在活跃块里。数据块Block包含三个参数:Item、CUr和filename。Item代表数据块中存储的设备信息,一个数据块中存储着多个设备,所以数据块Block是由若干个Item组成的;cur代表当前数据大小filename代表所要查询的设备存储的文件名。Item包含三个参数:offset、size和s, offset代表数据的地址偏移量;size代表本块中存储设备个数最大值;s代表本数据块中存储设备的开始时间。
[0034]3、抽象数据结构描述`
[0035]根据索引的设计,我们可以进一步定义数据的抽象结构,如下:
[0036]( I)数据表的抽象数据结构
[0037]定义数据表为Table,其数据类型如下所示:
[0038]Table
[0039]map<int, Chain〉
[0040]map是STL中提供的关联容器,键-值的集合。在数据表Table中,map〈int, Chain〉表示可以根据时间参数t找到相应的数据链。
[0041](2)数据链的抽象数据结构
[0042]定义数据链为Chain,其数据类型如下所示:
[0043]Chain
[0044]t
[0045]map<int, Node>M;
[0046]在数据链Chain中,时间参数t表示每条链中只能存储时间周期在[2%2?+1)内的设备数据,数据链中的时间参数t也是这条链中的所有数据块节点和数据块的时间参数,参数t的数据类型是int型。map〈int, Node>M表示可以根据参数i找到相应的节点。
[0047](3)数据块节点的抽象数据结构
[0048]定义数据块节点为Node,其数据类型如下所示:
[0049]
【权利要求】
1.一种基于周期对数的二维时序数据存储和查询方法,其特征在于,包括如下步骤: 设计数据存储结构; 设计索引; 对抽象数据结构描述; 实现二维数据的批量存储; 实现二维数据的批量查询; 实现二维数据的断面存储; 实现二维数据的断面查询; 其中,数据存储结构的设计为, (1)采用多级目录结构:最底层为一个用于存储数据的数据块,多个数据块构成一个节点,多个节点串成一条链; (2)每条链有个唯一参数t,只存储周期在[2\2?+1)上的数据; 在参数为t的链上的节点有个唯一的参数i,只存储周期在[(i_l)*I*2t+1, i*I*2t+1)上的数据,其中I为常数。
2.如权利 要求1所述的基于周期对数的二维时序数据存储和查询方法,其特征在于,设计索引具体为: 用Table代表整个数据表,Chain代表数据链,一个数据表Table是由若干个数据链组成的;数据链Chain包含两个参数:Node和t, Node代表数据块节点,一个数据链是由若干个数据块节点Node组成的;t代表时间参数,在存储结构的设计中已经提到过,数据块节点的存储对设备的周期有一定的限制,只存储时间周期在[2\2?)内的设备;数据块节点Node包含四个参数:Block、1、t和last, Block代表一个数据块,一个数据块节点是由若干个数据块Block组成的;参数i用于和参数t共同决定数据块存储数据的起始时间和终止时间,第i个节点存储设备的时间范围为[(i_l)*I*2t+1,i*I*2t+1) ;t和数据块节点中的t含义是相同的;last代表当前活跃的块,在写入数据操作中把新添加的数据存放在活跃块里;数据块Block包含三个参数:Item、cur和filename, Item代表数据块中存储的设备信息,一个数据块中存储着多个设备,所以数据块Block是由若干个Item组成的;CUr代表当前数据大小!filename代表所要查询的设备存储的文件名;Item包含三个参数:offset、size和s,offset代表数据的地址偏移量;size代表本块中存储设备个数最大值;s代表本数据块中存储设备的开始时间。
3.如权利要求2所述的基于周期对数的二维时序数据存储和查询方法,其特征在于:实现二维数据的批量存储 将设备周期以2为底取对数向下取整计算其t值,即LlogU,根据t值找到相对应的链(Chain),若找不到则新创建一个;根据起始时间找到对应的节点(Node),若没有则再创建一新节点,新节点包括一个块(Block), —个块包括一个项(Item),第一个项保证其大小为I ;找到对应节点后,根据设备ID找到对应块,若没有则在当前活跃的块里插入一项,并将此设备ID映射到当前活跃块,若当前活跃块已满,新建一个块作为当前活跃块;找到对应块后,若有此项,则在此项里进行插入,否则新建一个项进行插入。
4.如权利要求3所述的基于周期对数的二维时序数据存储和查询方法,其特征在于,实现二维数据的批量查询具体为: 根据抽象数据类型,对批量查询算法进行如下设计:首先根据设备id找到设备周期,然后对周期以2为底取对数得到t,根据t找到其所对应的链,然后根据链的开始时间找到链上所对应的节点,如果找到的节点的结束时间小于结束时间,就根据设备id找到节点里面的数据块,从数据块里得到数据信息,从文件中读取数据,指针指向下一节点,再根据链的开始时间找到对应节点,循环执行直到找出一段时间内的所有数据。
5.如权利要求4所述的基于周期对数的二维时序数据存储和查询方法,其特征在于,实现二维数据的断面查询具体为: 首先对存储信息进行预处理,建立数据块指针和设备号的映射关系,在建立映射关系的过程中,设备号要在断面查询设备号的范围内;然后在建立的映射关系中,逐个扫描数据块指针,读取对应的 设备信息并存储。
【文档编号】G06F17/30GK103488727SQ201310423324
【公开日】2014年1月1日 申请日期:2013年9月16日 优先权日:2013年9月16日
【发明者】裴正, 倪丹, 何恋, 张雪洁, 周文欢 申请人:河海大学