您好,欢迎来到年旅网。
搜索
您的当前位置:首页一种历史数据存储及索引方法[发明专利]

一种历史数据存储及索引方法[发明专利]

来源:年旅网
(19)中华人民共和国国家知识产权局

(12)发明专利申请

(10)申请公布号(10)申请公布号 CN 104090987 A(43)申请公布日 2014.10.08

(21)申请号 20141035.7(22)申请日 2014.07.28

(71)申请人华中科技大学

地址430074 湖北省武汉市洪山区珞喻路

1037号(72)发明人王非 刘涛

(74)专利代理机构武汉东喻专利代理事务所

(普通合伙) 42224

代理人李佑宏(51)Int.Cl.

G06F 17/30(2006.01)

权利要求书4页 说明书9页 附图7页权利要求书4页 说明书9页 附图7页

()发明名称

一种历史数据存储及索引方法(57)摘要

本发明公开了一种历史数据的存储及索引方法,属于实时历史数据库领域。本发明根据工业历史数据存储格式的特点,给出了一种简单高效的历史数据的存储方法和一种高效的索引机制。历史数据的存储方法一方面通过压缩缓存历史数据以及优化数据归档整理流程将磁盘I/O尽可能的减少,另一方面通过将数据归档整理过程中的磁盘I/O负载均衡的分布到各个时间点上,从而保证满足当前历史数据的存储要求,同时该存储方法具有动态扩展的特性;索引机制可以实现对历史数据的快速访问,同时数据库进行动态扩张的时候能够通过动态修改索引文件使得系统对于数据的访问不受影响。CN 104090987 A CN 104090987 A

权 利 要 求 书

1/4页

1.一种历史数据存储方法,其特征在于,包括:

步骤1从一级缓存读取一条历史数据插入请求,所述插入请求包含档案点的编号、所述档案点的数据值及所述数据值的时间戳,所述档案点指一个数据源的时间序列数据;

步骤2利用有损压缩算法对所述插入请求中的所述数据值进行有损压缩,如果所述数据值没有被压缩掉,则将所述数据值和所述时间戳写入所述档案点在二级缓存对应的处于写状态的二级缓冲区中,在所述二级缓存中,每个档案点均对应两个二级缓冲区,其中一个二级缓冲区处于写状态时,另一个就处于读状态,当一个档案点的所述数据值及所述时间戳写入所述二级缓存时,首先确定该档案点对应的当前处于写状态的二级缓冲区,然后根据二级缓冲区的缓冲区头确定具体的写入位置,再完成所述数据值及所述时间戳的写入,最后更新当前处于写状态的二级缓冲区的缓冲区头信息;

步骤3如果当前处于写状态的二级缓冲区已经写满或者其定时器定时已到达,则将该档案点对应的所述两个二级缓冲区的读、写状态互换,并将处于读状态的二级缓冲区所存储的归档历史数据写入临时归档文件,所述临时归档文件仅存储今天的归档历史数据,具体的写入位置根据档案点编号在临时归档索引文件查询,完成写入后,再次更新临时归档索引文件的写入位置信息;

步骤4每当进入新的一天,遍历所有档案点,将其在临时归档文件中的归档历史数据全部写入正式归档文件,每次总是写入所述正式归档文件的尾部,完成写入后,再将写入开始位置记录到归档索引文件;在整理临时归档文件之前,先为新的一天创建临时归档索引文件和临时归档文件;整理完毕之后,删除整理过的临时归档索引文件和临时归档文件。

2.如权利要求1所述的方法,其特征在于,在所述步骤1之前,还包括初始化操作,所述初始化操作具体包括以下子步骤:

(0-1)创建所述一级缓存及所述二级缓存,并为每个档案点创建一组所述二级缓冲区,其大小按照如下公式进行计算:

Cache2Size=Items×[sizeof(数据值)+sizeof(时间戳)]其中,Items表示系统最大存储的数据项数目;sizeof(数据值)表示每个数据值所需存储空间;sizeof(时间戳)表示每个时间戳所需存储空间;

(0-2)检查是否存在今天或者今天以前的临时归档文件,如果是则执行步骤(0-3),否则执行步骤(0-4);

(0-3)将存在的临时归档文件整理归档到正式归档文件,并在完成之后删除所述临时归档文件和临时索引文件;

(0-4)检查是否存在日期索引文件,如果不存在则新建一个日期索引文件;检查是否存在正式归档文件,如果不存在则新建一个空的正式归档文件及其对应的归档索引文件,并在所述日期索引文件的尾部插入对应的索引块;分别新建今天和明天的临时归档文件和临时索引文件。

3.如权利要求1或2所述的方法,其特征在于,每个二级缓冲区均包括缓冲区头和数据,所述缓冲区头包含读写状态标志位、所述二级缓冲区中第一个数据的时间戳、最新数据的时间戳和已占用空间大小,其中,所述读写状态标志位用于标识所述二级缓冲区当前的状态;所述第一个数据的时间戳表示所述二级缓冲区中保存的第一个数据的时间戳;所述最新数据的时间戳则表示最新数据的时间戳;所述已占用空间大小记录了所述二级缓冲区

2

CN 104090987 A

权 利 要 求 书

2/4页

中已存储数据内容的大小;所述二级缓冲区的数据包含对应档案点的时间戳和数据值。

4.如权利要求1或2所述的方法,其特征在于,所述步骤3具体包括以下子步骤:(3-1)根据今天的临时归档文件的状态标志位,判断所述临时归档文件是否处于空闲状态,如果是则执行步骤(3-2),否则执行步骤(3-3);

(3-2)将所述临时归档文件的状态标志位更新为写入状态;(3-3)获取一个档案点编号,并根据所述档案点编号从所述临时索引文件中读取所述档案点的临时索引单元,利用所述临时索引单元中的当前数据块首地址,从所述临时归档文件中读取所述当前数据块的数据区大小,并根据所述档案点编号获取其二级缓存的地址信息;

(3-4)根据所述档案点对应的处于读状态的二级缓冲区的缓冲区头中的已占用空间大小、当前数据块的数据区大小以及数据块的上限,判断当前数据块能否容纳所述处于读状态的二级缓冲区中的所有数据,如果可以则执行步骤(3-6),否则执行步骤(3-5);

(3-5)在所述临时归档文件的尾部新创建一个数据块,将所述当前数据块的Next指针指向新创建的数据块在临时归档文件中的偏移地址,并将所述档案点在所述临时索引文件中的所述临时索引单元中的当前数据块首地址更新为所述新创建数据块在所述临时归档文件中的偏移地址;

(3-6)将所述处于读状态的二级缓冲区中的数据写入当前数据块,用所述处于读状态的二级缓冲区的缓冲区头中的所述已占用空间大小更新当前数据块的数据区大小,将所述处于读状态的二级缓冲区中的所述第一个数据的时间戳、所述最新数据的时间戳和所述已占用空间大小均初始化为0,继续执行步骤(3-3)直至所有的档案点都处理完成。

5.如权利要求4所述的方法,其特征在于,所述临时归档文件包含文件头和归档数据区,所述文件头包含所述状态标志位和文件大小,所述状态标志位说明所述临时归档文件当前处于什么状态,所述文件大小包括所述归档数据区和所述文件头的大小。

6.如权利要求5所述的方法,其特征在于,所述临时归档文件的所述归档数据区由多个档案点数据块组成,每个档案点数据块对应一个档案点一段时间段内的历史归档数据,每个档案点可以包含多个档案点数据块,所述档案点数据块包括数据区大小、Next指针和数据区,其中,所述数据区存储档案点的数据,所述数据区大小为所述数据区中数据所占存储空间大小,所述Next指针为下一个档案点数据块在所述临时归档文件中偏移地址,从而形成一个档案点数据块链表。

7.如权利要求4所述的方法,其特征在于,在所述临时索引文件中为每个档案点分配一个临时索引单元,在所述临时索引单元中存储着档案点首个数据块的首地址和当前数据块首地址,其中,首个数据块的首地址指的是所述首个数据块在所述临时归档文件中的偏移地址,当前数据块首地址指的是当前正在归档数据的数据块可供写入数据的区域在所述临时归档文件中的偏移地址。

8.如权利要求4所述的方法,其特征在于,所述步骤4具体包括以下子步骤:

(4-1)系统实时监测当前时间是否到了将临时归档文件数据整理写入正式归档文件的时间阈值TOrder,如果到达所述时间阈值TOrder则执行步骤(4-2),否则继续实时监测当前时间;

(4-2)扫描昨天的临时归档文件中所有档案点的压缩数据容量之和,根据正式归档文

3

CN 104090987 A

权 利 要 求 书

3/4页

件大小上限判断当前的正式归档文件是否可以容纳,是则执行步骤(4-5),否则执行步骤(4-3);

(4-3)按照档案点编号从小到大的顺序整理昨天的临时归档文件中的数据,将每个档案点在所述临时归档文件中对应数据块的数据按照时间顺序整合到一起,得到档案点一天的压缩数据集;

(4-4)逐一按照档案点编号从小到大的顺序将每个档案点的压缩数据集写入到当前正式归档文件,同时,在对应的归档索引文件中增加一个归档索引数据块,记录每个档案点的压缩数据集在当前正式归档文件中的偏移地址及其长度,然后,在日期索引文件尾部增加一个日期索引数据项,记录新增加的归档索引数据块在当前归档索引文件中的偏移地址及其对应的日期,其中,所述日期索引文件由多个索引块构成,每个索引块对应一个正式归档文件;

(4-5)新建一个空的正式归档文件及其对应的归档索引文件,并在所述日期索引文件的尾部插入对应的索引块,将新创建的正式归档文件作为当前正式归档文件,将数据集写入新建归档文件并更新所述日期索引文件和所述归档索引文件;

(4-6)当昨天的临时归档文件整理完毕之后,会将昨天的临时归档文件以及临时索引文件删除,并新建明天的临时归档文件以及临时索引文件以确保每天临时文件在跨天数据存储的时候做到无缝切换。

9.一种基于权利要求1所述历史数据存储方法的历史数据索引方法,其特征在于,包括:

步骤1获取一个查询请求,其包含档案点编号、查询的起始时间TBEGIN和结束时间TEND;步骤2将所述查询请求中包含的查询时间段按自然天划分为N个同一自然天内的子查询任务,其中N表示所述查询时间段包含的自然天数目;

步骤3获取一个未执行的子查询任务;步骤4根据所述子查询任务的起始时间的“年-月-日”信息,判断起始时间是否为今天,如果是则执行步骤5,否则执行步骤7;

步骤5根据所述子查询任务中的档案点编号计算档案点的临时索引单元在今天的临时索引文件中对应的偏移地址,计算公式如下:临时索引单元偏移地址=sizeof(临时索引单元)×(档案点编号-1)

其中,sizeof(临时索引单元)表示每个档案点的临时索引单元的长度;根据所述临时索引单元的偏移地址从今天的临时索引文件中读取所述档案点的临时索引单元,从而获得首个数据块的首地址和当前数据块首地址;

步骤6从所述档案点的首个数据块开始,遍历整个数据块链表,按顺序读取数据块中的数据区并缓存到压缩数据集Data,还读取所述档案点对应的当前处于写状态的二级缓冲区中的压缩数据并缓存到压缩数据集Data,继续执行步骤9;

步骤7根据所述子查询任务包含的起始时间的“年-月-日”信息获取日期索引文件的索引块,进一步从所述索引块中获取正式归档文件存储位置及文件名、对应的归档索引文件存储目录及文件名、以及查询日期对应的日期索引数据项,进一步根据所述日期索引

获取查询日期数据项中的归档索引数据在对应归档索引文件中的偏移地址及档案点编号,

这一天所述档案点的索引数据,包括所述查询日期这一天的数据在对应正式归档文件中的

4

CN 104090987 A

权 利 要 求 书

4/4页

偏移地址以及长度;

步骤8根据所述步骤7获得的索引信息,从相应的正式归档文件中读取出所述档案点这一天对应的压缩数据集Data;

步骤9根据所述档案点的数据更新周期,对所述压缩数据集Data中的数据进行解压缩,得到按时间先后顺序排列的所述档案点一整天的解压数据集合DeData;

步骤10如果所述子查询任务的起始时间等于结束时间,表示查询一个特定时间戳的数据,则在所述解压数据集DeData中查找时间戳等于起始时间的数据DA,如果存在则返回数据DA,否则返回空的结果集,如果所述起始时间不等于所述结束时间,表示查询一个特定时间段的数据,则将所述解压数据集DeData中满足时间戳大于等于所述起始时间并且小于等于所述结束时间条件的数据按时间先后顺序插入到子查询任务结果集合,将第i个子查询任务Ti查询所得到的结果数据集记为RSi,其中,i的取值范围为1~N;

步骤11判断是否所有子查询任务均已执行完毕,如果不是则继续执行所述步骤3,否则执行步骤12;

步骤12将所有子查询任务所得到的结果数据集RSi按照时间先后顺序进行合并,即得到待查询档案点在所述起始时间TBEGIN至所述结束时间TEND时间段内的所有历史数据,最后将合并后的最终结果集返回。

5

CN 104090987 A

说 明 书

一种历史数据存储及索引方法

1/9页

技术领域

[0001]

本发明属于实时历史数据库技术领域,更具体地,涉及一种历史数据存储及索引

方法。背景技术

工业信息化已经成为21世纪全球工业领域的主旋律,近几年来信息化进程开始以一种深度和广度共同发展的势头不断深入。随着物联网的兴起,大量传感器以及智能终端广泛应用于传统工业领域,更进一步的推动了工业信息化的发展进程。[0003] 在传统的工业生产流程中,实时数据库已经应用广泛。其主要用于一些数据量较小的工业生产系统的实时监控以及数据持久化,涉及的行业包括电力、石油、冶金、化工等。实时历史数据库以档案数据点作为基本单位来描述生产数据。一个数据库的档案数据点对应传感器中的一个物理数据源,例如某一条输电线的电压、某一个检测点的温度等。档案数据点所采集到的数据是离散数据,都带有时间戳。从现场采集到的生产过程数据经过一系列处理之后最终保存在实时历史数据库当中。此类数据通常在后续的过程回溯或者数据分析的过程中使用。

[0004] 随着工业信息化的深入发展,决策者对历史数据的存储效率以及数据访问速度的要求越来越高,因此当前实时历史数据库存在的历史数据存取效率不足的问题愈发突出。面对历史数据存取效率要求越来越高的需求,目前尚无完整可用的实施方案既可以满足当前的数据存取要求,又保证系统具有动态扩展性来应对持续增长的数据存储和处理的需求。

[0002]

发明内容

针对现有技术的以上缺陷或改进需求,本发明提供一种历史数据的存储及索引方

法,根据工业数据存储格式的特点,给出了一种简单高效的历史数据文件的存储方法和一种高效的索引机制,能够满足当前历史数据的高效存取要求,同时能够保证具有动态扩展的特性。该存储方法一方面通过压缩缓存历史数据以及优化数据归档整理流程将磁盘I/O尽可能的减少,另一方面通过将归档整理过程中的磁盘I/O负载均衡的分布到各个时间点上,从而保证满足当前历史数据的存储要求,同时该存储方法具有动态扩展的特性。该索引

[0005]

机制可以实现对历史数据的快速访问,同时数据库进行动态扩张的时候能够通过动态修改索引文件使得系统对于数据的访问不受影响。[0006] 为实现上述目的,按照本发明的一个方面,提供了一种历史数据的存储方法,包括:

[0007] 步骤1从一级缓存读取一条历史数据插入请求,所述插入请求包含档案点的编号、所述档案点的数据值及所述数据值的时间戳,所述档案点指一个数据源的时间序列数据;

[0008] 步骤2利用有损压缩算法对所述插入请求中的所述数据值进行有损压缩,如果所

6

CN 104090987 A

说 明 书

2/9页

述数据值没有被压缩掉,则将所述数据值和所述时间戳写入所述档案点在二级缓存对应的处于写状态的二级缓冲区中,在所述二级缓存中,每个档案点均对应两个二级缓冲区,其中一个二级缓冲区处于写状态时,另一个就处于读状态,当一个档案点的所述数据值及所述时间戳写入所述二级缓存时,首先确定该档案点对应的当前处于写状态的二级缓冲区,然后根据二级缓冲区的缓冲区头确定具体的写入位置,再完成所述数据值及所述时间戳的写入,最后更新当前处于写状态的二级缓冲区的缓冲区头信息;

[0009] 步骤3如果当前处于写状态的二级缓冲区已经写满或者其定时器定时已到达,则将该档案点对应的所述两个二级缓冲区的读、写状态互换,并将处于读状态的二级缓冲区所存储的归档历史数据写入临时归档文件,所述临时归档文件仅存储今天的归档历史数据,具体的写入位置根据档案点编号在临时归档索引文件查询,完成写入后,再次更新临时归档索引文件的写入位置信息;[0010] 步骤4每当进入新的一天,遍历所有档案点,将其在临时归档文件中的归档历史数据全部写入正式归档文件,每次总是写入所述正式归档文件的尾部,完成写入后,再将写入开始位置记录到归档索引文件;在整理临时归档文件之前,先为新的一天创建临时归档索引文件和临时归档文件;整理完毕之后,删除整理过的临时归档索引文件和临时归档文件。

[0011] 按照本发明的另一方面,提供了一种历史数据的索引方法,包括:[0012] 步骤1获取一个查询请求,其包含档案点编号、查询的起始时间TBEGIN和结束时间TEND;

[0013] 步骤2将所述查询请求中包含的查询时间段按自然天划分为N个同一自然天内的子查询任务,其中N表示所述查询时间段包含的自然天数目;[0014] 步骤3获取一个未执行的子查询任务;[0015] 步骤4根据所述子查询任务的起始时间的“年-月-日”信息,判断起始时间是否为今天,如果是则执行步骤5,否则执行步骤7;

[0016] 步骤5根据所述子查询任务中的档案点编号计算档案点的临时索引单元在今天的临时索引文件中对应的偏移地址,计算公式如下:

[0017] 临时索引单元偏移地址=sizeof(临时索引单元)×(档案点编号-1)[0018] 其中,sizeof(临时索引单元)表示每个档案点的临时索引单元的长度;根据所述临时索引单元的偏移地址从今天的临时索引文件中读取所述档案点的临时索引单元,从而获得首个数据块的首地址和当前数据块首地址;[0019] 步骤6从所述档案点的首个数据块开始,遍历整个数据块链表,按顺序读取数据块中的数据区并缓存到压缩数据集Data,还读取所述档案点对应的当前处于写状态的二级缓冲区中的压缩数据并缓存到压缩数据集Data,继续执行步骤9;[0020] 步骤7根据所述子查询任务包含的起始时间的“年-月-日”信息获取日期索引文件的索引块,进一步从所述索引块中获取正式归档文件存储位置及文件名、对应的归档索引文件存储目录及文件名、以及查询日期对应的日期索引数据项,进一步根据所述日期索引数据项中的归档索引数据在对应归档索引文件中的偏移地址及档案点编号,获取查询日期这一天所述档案点的索引数据,包括所述查询日期这一天的数据在对应正式归档文件中的偏移地址以及长度;

7

CN 104090987 A[0021]

说 明 书

3/9页

步骤8根据所述步骤7获得的索引信息,从相应的正式归档文件中读取出所述档案点这一天对应的压缩数据集Data;

[0022] 步骤9根据所述档案点的数据更新周期,对所述压缩数据集Data中的数据进行解压缩,得到按时间先后顺序排列的所述档案点一整天的解压数据集合DeData;[0023] 步骤10如果所述子查询任务的起始时间等于结束时间,表示查询一个特定时间戳的数据,则在所述解压数据集DeData中查找时间戳等于起始时间的数据DA,如果存在则返回数据DA,否则返回空的结果集,如果所述起始时间不等于所述结束时间,表示查询一个特定时间段的数据,则将所述解压数据集DeData中满足时间戳大于等于所述起始时间并且小于等于所述结束时间条件的数据按时间先后顺序插入到子查询任务结果集合,将第i个子查询任务Ti查询所得到的结果数据集记为RSi,其中,i的取值范围为1~N;[0024] 步骤11判断是否所有子查询任务均已执行完毕,如果不是则继续执行所述步骤3,否则执行步骤12;

[0025] 步骤12将所有子查询任务所得到的结果数据集RSi按照时间先后顺序进行合并,即得到待查询档案点在所述起始时间TBEGIN至所述结束时间TEND时间段内的所有历史数据,最后将合并后的最终结果集返回。[0026] 总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:

[0027] 首先,利用A、B两组二级缓存的交替使用,可以提高数据的缓存能力,防止数据丢失;

[0028] 其次,通过设计临时归档文件和临时索引文件,鉴于其文件结构简单,可以大大减少数据归档时的磁盘操作次数,从而提高数据的归档能力;[0029] 再次,通过设计临时归档文件整理方法以及紧缩式正式归档文件,可以大大减少正式归档文件的存储空间;[0030] 最后,通过日期索引和归档索引,可以大大降低在正式归档文件中查询过程中的磁盘操作次数,从而提高查询效率。附图说明

图1为本发明实施例中历史数据持久化存储过程的总体示意图;[0032] 图2为本发明实施例二级缓存的结构示意图;

[0033] 图3为本发明实施例中的临时归档文件与临时索引文件结构示意图;[0034] 图4为本发明实施例中正式归档文件、日期索引文件和归档索引文件的结构示意图;

[0035] 图5为本发明实施例中数据持久化存储方法流程图;

[0036] 图6为本发明实施例中将二级缓存中的数据临时归档存储到临时归档文件中的方法流程图;

[0037] 图7为本发明实施例中将临时归档文件整理到正式归档文件的方法流程图;[0038] 图8为本发明实施例提供的索引一个档案点在任意时间段内历史数据的方法流程图。

[0031]

8

CN 104090987 A

说 明 书

4/9页

具体实施方式

[0039] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

[0040] 由于工业历史数据存储对于精度的要求不是很高,因此没有必要将所有数据都存储,需要对其进行压缩。为了减少历史数据持久化存储的时候写磁盘的次数,有必要先将历史数据先缓存起来,从而可以一次性将一段时间的历史数据写入磁盘数据文件中。

[0041] 图1所示为本发明实施例中历史数据持久化存储过程的总体示意图。在本发明实施例中,历史数据主要经历了从缓存到临时归档文件,再从临时归档文件到正式归档文件的过程。系统先初始化,包括创建一级缓存、二级缓存与各类文件。其中,一级缓存采用先进先出队列的结构,其大小可根据档案点数量及其更新速度设定,计算公式如下:[0042] Cache1Size=Num(档案点)×sizeof(数据插入请求)[0043] 其中,Num(档案点)表示系统中包含的档案点数量上限,此上限受限于本发明运行的硬件平台的处理能力;sizeof(数据插入请求)表示一个数据插入请求所需的存储空间,优选的参数为字节。二级缓存的结构与大小将在下文结合图2进行详细说明。各类文件的创建将在下文结合图5进行详细说明。

外部数据源模块将包含档案点的数据插入请求周期性地写入一级缓存,其中,档

案点指一个数据源的时间序列数据,其编号从1开始,每个档案点的数据可以是浮点数、整形数或布尔型数。外部数据源模块可以持续不断地向一级缓存写入数据插入请求,本发明实施例中系统也会同步从一级缓存中持续地、逐一读取数据插入请求,再对插入请求中的数据进行有损压缩,本发明实施例中采用的是旋转门压缩算法,但不限于此算法,相当于只将拐点数据或者一些突变数据存入二级缓存。在二级缓存中会缓存一段时间的数据,当二级缓存定时器到达或者二级缓存写满的时候,系统就会将二级缓存中的数据写入临时归档文件中去。临时归档文件仅存储今天的数据,等到今天过了之后,会在第二天的凌晨时分,在确保前一天的数据都写入了临时文件之后,系统会将临时文件整理写入正式归档文件。[0045] 图2所示为本发明实施例二级缓存的结构示意图。二级缓存分为多个档案点的缓冲区,每个档案点拥有A、B两组二级缓冲区,该两个二级缓冲区总是保持一个为读状态,另一个为写状态,当其中一个二级缓冲区的归档定时器的周期到达或该二级缓冲区写满时,则交换两个二级缓冲区的读写状态。每个二级缓冲区均包括缓冲区头和数据,缓冲区头包含读写状态标志位、二级缓冲区中第一个数据的时间戳、最新数据的时间戳和已占用空间大小。其中,读写状态标志位用于标识该二级缓冲区当前的状态;第一个数据的时间戳表示该二级缓冲区中保存的第一个数据的时间戳,精确到毫秒,每个时间戳占据9字节,其中年占据2字节,月、日、时、分、秒分别占据1字节,毫秒占据2字节;最新数据的时间戳则表示最新数据的时间戳(即使这个数据被压缩算法压缩掉);已占用空间大小记录了当前二级缓冲区中已存储数据内容的大小。二级缓冲区的数据包含对应档案点的时间戳和数据值。

[0044]

每个档案点的每一组二级缓冲区的大小按照如下公式进行计算:

[0047] Cache2Size=Items×[sizeof(数据值)+sizeof(时间戳)][0048] 其中,Items表示系统最大存储的数据项数目,优选的参数为256;sizeof(数据

[0046]

9

CN 104090987 A

说 明 书

5/9页

值)表示每个数据值所需存储空间,由数据值的数据类型和操作系统寻址位数共同决定,操作系统寻址位数一般为32位或位;sizeof(时间戳)表示时间戳所需存储空间,时间戳包含“年-月-日时:分:秒.毫秒”,在本发明实施例中为9个字节。

[0049] 图3所示为本发明实施例的临时归档文件与临时索引文件的结构示意图。其中临时归档文件名形如tData_YYYY-MM-DD.dat,例如tData_2014-3-19.dat;临时索引文件名形如tIndex_YYYY-MM-DD.index,例如tIndex_2014-3-19.index。临时归档文件包含文件头和归档数据区,文件头包含:状态标志位和文件大小,状态标志位说明该临时归档文件当前处于什么状态,在本发明实施例中,具体状态包括空闲、归档和整理等;文件大小包括归档数据区和文件头的大小。如图3所示,在临时索引文件中为每个档案点分配了一个临时索引单元,在临时索引单元中存储着该档案点首个数据块的首地址和当前数据块首地址。其中,首个数据块的首地址指的是首个数据块在临时归档文件中的偏移地址;当前数据块首地址指的是当前正在归档数据的数据块可供写入数据的区域在临时归档文件中的偏移地址。临时归档文件的归档数据区由多个档案点数据块组成,每个档案点数据块对应一个档案点一段时间段内的历史归档数据,每个档案点可以包含多个档案点数据块。档案点数据块包括三个部分:数据区大小、Next指针和数据区。其中,数据区存储档案点的数据,数据区大小为数据区中数据所占存储空间大小;Next指针为下一个档案点数据块在临时归档文件中偏移地址,从而形成一个档案点数据块链表。

[0050] 系统在初始化的时候会替每个档案点在临时归档文件中预分配一块数据块来存储档案点一天的历史数据,此时数据区大小初始化为0,Next指针初始化为空地址。同时,每个档案点在临时索引单元中的首个数据块的首地址和最后一个数据块首地址均初始化为预分配数据块在在临时归档文件中的偏移地址。[0051] 当二级缓存中的数据被写入临时归档文件,则需要根据每次写入数据块的字节数更新数据块写偏移地址。而如果当前的数据块被写满了,系统会在临时归档文件末尾为该档案点再追加分配一个数据块,并用当前这个数据块的Next指针记录下新分配数据块在临时归档文件中的偏移地址。此时,临时索引单元中的首个数据块的首地址保持不变,而当前数据块首地址就会更新为新分配数据块在临时归档文件中的偏移地址。[0052] 临时归档文件和临时索引文件都属于临时文件,当昨天的临时归档文件中的数据整理完毕后,昨天的临时文件都会被删除,同时还会创建明天的临时文件,使系统总是存在今天和明天的临时归档文件和临时索引文件,以便每天的临时文件能够做到无缝切换使用。

图4所示为本发明实施例中正式归档文件、日期索引文件和归档索引文件的结构

示意图,以及这些文件之间的关系。其中正式归档文件名形如hisdata_N.dat,其中N代表文件序号,例如第一个正式归档文件为hisdata_1.dat;日期索引文件有且只有一个,其文件名形如time.index;归档索引文件与正式归档文件对应,其文件名形如hisdata_N.index,其中N与正式归档文件名中的序号一致。为保证本发明可适用于不同文件系统,每个正式归档文件的存储上限均可以根据实际文件系统进行设置,例如:FAT32文件系统中正式归档文件的存储上限不能超过4GB,NTFS文件系统存储上限则可以设为大于4GB的值,具体上限还可以根据实际应用需求进行修改,但优选的正式归档文件存储上限不应低于2GB。当一个正式归档文件达到设置的存储上限,则创建一个新的正式归档文件和归档索

[0053]

10

CN 104090987 A

说 明 书

6/9页

引文件,其序号都将自增1。在本发明实施例中,正式归档文件如图4所示,从文件头开始顺序存储每个档案点每一天的数据。

[00] 日期索引文件由多个索引块构成,每个索引块对应一个正式归档文件。每个索引块均包含对应的正式归档文件中所存储数据的开始日期(包含年、月、日)、结束日期(包含年、月、日)、存储数据的天数、正式归档文件存储目录及文件名、正式归档文件对应的归档索引文件存储目录及文件名,以及日期索引数据项。其中,日期索引数据项的数量与存储的数据的天数相等。每一个日期索引数据项包含日期及其归档索引数据在对应归档索引文件中的偏移地址。

[0055] 归档索引文件对应正式归档文件,正式归档文件中存储数据的天数等于归档索引文件中归档索引数据的天数。归档索引文件由多个归档索引数据块构成,每个归档索引数据块对应正式归档文件中一天的所有档案点数据的索引信息。归档索引数据块中每个档案点的索引数据包含了该档案点一天的数据在对应正式归档文件中的偏移地址以及数据长度。

[0056] 图5所示为本发明实施例中数据持久化存储方法的流程图,具体包括以下步骤:[0057] 在步骤501中,系统初始化,创建一级缓存,并根据系统中的最大档案点数量按上文所述方式为每个档案点创建一组二级缓存;

在步骤502中,检查是否存在今天或者今天以前的临时归档文件,如果是则执行

步骤503,否则执行步骤504;[0059] 在步骤503中,将存在的临时归档文件整理归档到正式归档文件,并在完成之后删除该临时归档文件和临时索引文件;[0060] 在步骤504中,检查是否存在日期索引文件,如果不存在则按照前述日期索引文件的命名规则新建一个日期索引文件;检查是否存在正式归档文件,如果不存在则按照前述正式归档文件和归档索引文件的命名规则新建一个空的正式归档文件及其对应的归档索引文件,并在日期索引文件的尾部插入对应的索引块;按照前述临时归档文件和临时索引文件的命名规则分别新建今天和明天的临时归档文件和临时索引文件;[0061] 在步骤505中,从一级缓存中读取历史数据插入请求,解析请求中的档案点编号及数据对应的时间戳;[0062] 在步骤506中,如果插入请求中的数据时间戳早于该档案点当前处于写状态的二级缓存中保存的最新数据时间戳,则丢弃该插入请求,重新执行步骤505,否则执行步骤507;

[0063] 在步骤507中,将档案点对应的处于写状态的二级缓冲区的缓冲区头中的最新数据时间戳更新为该的数据的时间戳,并执行有损压缩算法,例如旋转门压缩算法,但不限于此算法;

[00] 在步骤508中,判断数据是否被压缩掉,是则执行步骤509,否则执行步骤510;[0065] 在步骤509中,根据系统当前时间判断归档周期是否已到,该归档周期可由实际应用要求决定,本发明实施例优选的归档周期为10分钟,如果是则执行步骤512,否则执行步骤505;

[0058]

在步骤510中,将数据及其时间戳写入档案点对应的处于写状态的二级缓冲区,

并更新缓冲区头中的最新数据时间戳,并用已占用空间加上本次写入数据的字节数更新已

[0066]

11

CN 104090987 A

说 明 书

7/9页

占用空间;

[0067] 在步骤511中,根据档案点对应的处于写状态的二级缓冲区的缓冲区头中已占用空间,判断该二级缓冲区是否已经写满,或者根据系统当前时间判断归档周期是否已到,如果是则执行步骤512,否则执行步骤505;[0068] 在步骤512中,将档案点的A、B两组二级缓冲区读写状态互换,并将已更换为读状态的二级缓冲区所存储的数据写入临时归档文件并重新初始化该二级缓冲区;[0069] 在步骤513中,检查系统当前时间,判断是否进入新的一天,如果是则执行步骤514,否则执行步骤505;[0070] 在步骤514中,将昨天的临时归档文件整理归档到正式归档文件,完成之后删除昨天的临时归档文件和临时索引文件,并创建明天的临时归档文件和临时索引文件,以便每天的临时文件能够做到无缝切换使用。

[0071] 图6所示为本发明实施例中将一个档案点在二级缓存中的数据转存到临时归档文件中的流程图,具体包括以下步骤:[0072] 在步骤601中,根据今天的临时归档文件的状态标志位,判断临时归档文件是否处于空闲状态,如果是则执行步骤602,否则执行步骤603;在步骤602中,将今天的临时归档文件的状态标志位更新为写入状态;[0074] 在步骤603中,获取一个档案点编号,并根据档案点编号从临时索引文件中读取该档案点的临时索引单元,利用临时索引单元中的当前数据块首地址,从临时归档文件中读取当前数据块的数据区大小,并根据档案点编号获取其二级缓存的地址信息;[0075] 在步骤604中,根据该档案点对应的处于读状态的二级缓冲区的缓冲区头中的已占用空间、当前数据块的数据区大小以及数据块的上限,判断当前数据块能否容纳该处于读状态的二级缓冲区中的所有数据,如果可以则执行步骤606,否则执行步骤605;[0076] 在步骤605中,在临时归档文件的尾部新创建一个数据块,优选的数据块大小为16K字节;将当前数据块的Next指针指向新创建的数据块在临时归档文件中的偏移地址,并将该档案点在临时索引文件中的临时索引单元中的当前数据块首地址更新为新创建数据块在临时归档文件中的偏移地址;[0077] 在步骤606中,将该处于读状态的二级缓冲区中的数据写入当前数据块,用该处于读状态的二级缓冲区的缓冲区头中的已占用空间更新当前数据块的数据区大小;将该处于读状态的二级缓冲区中的第一个数据的时间戳、最新数据的时间戳和已占用空间大小均初始化为0,继续执行步骤603直至所有的档案点都处理完成。

[0078] 图7所示为本发明实施例中整理临时归档文件形成正式归档文件的方法流程图,具体包括以下步骤:[0079] 在步骤701中,系统实时监测当前时间是否到了将临时归档文件数据整理写入正式归档文件的时间阈值TOrder,如果到了时间阈值TOrder则执行步骤702,否则继续实时监测当前时间,在本发明实施例中,优选的时间阈值TOrder为15分钟,以确保所有二级缓存中的数据都被写入昨天的临时归档文件;

[0073]

在步骤702中,扫描昨天的临时归档文件中所有档案点的压缩数据容量之和,根

据正式归档文件大小上限判断当前的正式归档文件是否可以容纳,是则执行步骤705,否则执行步骤703;

[0080]

12

CN 104090987 A[0081]

说 明 书

8/9页

在步骤703中,按照档案点编号从小到大的顺序整理昨天的临时归档文件中的数据,将每个档案点在临时归档文件中对应数据块的数据按照时间顺序整合到一起,得到该档案点一天的压缩数据集;[0082] 在步骤704中,逐一按照档案点编号从小到大的顺序将每个档案点的压缩数据集写入到当前正式归档文件,同时,在对应的归档索引文件中增加一个归档索引数据块,记录每个档案点的压缩数据集在当前正式归档文件中的偏移地址及其长度,然后,在日期索引文件尾部增加一个日期索引数据项,记录新增加的归档索引数据块在当前归档索引文件中的偏移地址及其对应的日期;[0083] 在步骤705中,按照前述正式归档文件和归档索引文件的命名规则新建一个空的正式归档文件及其对应的归档索引文件,并在日期索引文件的尾部插入对应的索引块,将新创建的正式归档文件作为当前正式归档文件,将数据集写入新建归档文件并更新日期索引文件和归档索引文件;[0084] 在步骤706中,当昨天的临时归档文件整理完毕之后,会将昨天的临时归档文件以及临时索引文件删除,并新建明天的临时归档文件以及临时索引文件以确保每天临时文件在跨天数据存储的时候做到无缝切换。

由于历史数据在正式归档文件中同一个档案点同一天的压缩数据是存在一起的,

故本发明实施例的索引方法可以快速定位一个档案点一天内某时间段内的历史数据,也可以索引具体时刻的历史数据。

[0086] 图8所示为本发明实施例提供的索引一个档案点在任意时间段内历史数据的方法流程图,具体包括以下步骤:[0087] 在步骤801中,获取一个查询请求,其包含档案点编号、查询的起始时间TBEGIN和结束时间TEND,起始时间TBEGIN和结束时间TEND均包含“年-月-日时:分:秒.毫秒”;[0088] 在步骤802中,将查询请求中包含的查询时间段按自然天划分为N个同一自然天内的子查询任务,其中N表示查询请求中包含的查询时间段包含的自然天数目,每个子查询任务的起止时间都处在同一个自然天内;用Ti表示第i个子查询任务,i的取值范围为1~N,其中子查询任务T1的起止时间为起始时间TBEGIN至TBEGIN所在自然天的23时59分59秒999毫秒,子查询任务TN的起止时间为结束时间TEND所在自然天的0时0分0秒0毫秒至TEND,而子查询任务T2,T3,…,TN-1代表中间包含自然天的完整一天时间,即同一个自然天内的0时0分0秒0毫秒至23时59分59秒999毫秒;[00] 在步骤803中,获取一个未执行的子查询任务;[0090] 在步骤804中,根据子查询任务的起始时间的“年-月-日”信息,判断该子查询任务的起始时间是否为今天,如果是则执行步骤805,否则执行步骤807;[0091] 在步骤805中,根据子查询任务中的档案点编号计算该档案点的临时索引单元在今天的临时索引文件中对应的偏移地址,计算公式如下:

[0092] 临时索引单元偏移地址=sizeof(临时索引单元)×(档案点编号-1)[0093] 其中,sizeof(临时索引单元)表示每个档案点的临时索引单元的长度,在本发明实施例中优选的参数为16字节;根据临时索引单元的偏移地址从今天的临时索引文件中读取该档案点的临时索引单元,从而获得首个数据块的首地址和当前数据块首地址;

[0085] [0094]

在步骤806中,从该档案点的首个数据块开始,遍历整个数据块链表,按顺序读取

13

CN 104090987 A

说 明 书

9/9页

数据块中的数据区并缓存到压缩数据集Data,还读取该档案点对应的当前处于写状态的二级缓冲区中的压缩数据并缓存到压缩数据集Data,继续执行步骤809;[0095] 在步骤807中,根据子查询任务包含的起始时间的“年-月-日”信息获取日期索引文件的索引块,进一步从索引块中获取正式归档文件存储位置及文件名、对应的归档索引文件存储目录及文件名、以及查询日期对应的日期索引数据项,进一步根据日期索引数据项中的归档索引数据在对应归档索引文件中的偏移地址及档案点编号,获取查询日期这一天该档案点的索引数据,包括查询日期这一天的数据在对应正式归档文件中的偏移地址以及长度;

[0096] 在步骤808中,根据步骤807获得的索引信息,从相应的正式归档文件中读取出该档案点这一天对应的压缩数据集Data;[0097] 在步骤809中,根据该档案点的数据更新周期,对压缩数据集Data中的数据进行解压缩,得到按时间先后顺序排列的该档案点一整天的解压数据集合DeData;[0098] 在步骤810中,如果子查询任务的起始时间等于结束时间,表示查询一个特定时间戳的数据,则在解压数据集DeData中查找时间戳等于起始时间的数据DA,如果存在则返回数据DA,否则返回空的结果集;如果起始时间不等于结束时间,表示查询一个特定时间段的数据,则将解压数据集DeData中满足时间戳大于等于起始时间并且小于等于结束时间条件的数据按时间先后顺序插入到子查询任务结果集合;将第i个子查询任务Ti查询所得到的结果数据集记为RSi;[0099] 在步骤811中,判断是否所有子查询任务均已执行完毕,如果不是则继续执行步骤803,否则执行步骤812;[0100] 在步骤812中,将N个时间段内,所有子查询任务所得到的结果数据集RSi按照时间先后顺序进行合并,即得到待查询档案点在起始时间TBEGIN至结束时间TEND时间段内的所有历史数据,最后将合并后的最终结果集返回。[0101] 本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

14

CN 104090987 A

说 明 书 附 图

1/7页

图1

图2

15

CN 104090987 A

说 明 书 附 图

2/7页

图3

16

CN 104090987 A

说 明 书 附 图

3/7页

图4

17

CN 104090987 A

说 明 书 附 图

4/7页

图5

18

CN 104090987 A

说 明 书 附 图

5/7页

图6

19

CN 104090987 A

说 明 书 附 图

6/7页

图7

20

CN 104090987 A

说 明 书 附 图

7/7页

图8

21

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务