《一种历史数据存储及索引方法.pdf》由会员分享,可在线阅读,更多相关《一种历史数据存储及索引方法.pdf(21页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN104090987A43申请公布日20141008CN104090987A21申请号201410364895722申请日20140728G06F17/3020060171申请人华中科技大学地址430074湖北省武汉市洪山区珞喻路1037号72发明人王非刘涛74专利代理机构武汉东喻专利代理事务所普通合伙42224代理人李佑宏54发明名称一种历史数据存储及索引方法57摘要本发明公开了一种历史数据的存储及索引方法,属于实时历史数据库领域。本发明根据工业历史数据存储格式的特点,给出了一种简单高效的历史数据的存储方法和一种高效的索引机制。历史数据的存储方法一方面通过压缩缓存历史数据以及。
2、优化数据归档整理流程将磁盘I/O尽可能的减少,另一方面通过将数据归档整理过程中的磁盘I/O负载均衡的分布到各个时间点上,从而保证满足当前历史数据的存储要求,同时该存储方法具有动态扩展的特性;索引机制可以实现对历史数据的快速访问,同时数据库进行动态扩张的时候能够通过动态修改索引文件使得系统对于数据的访问不受影响。51INTCL权利要求书4页说明书9页附图7页19中华人民共和国国家知识产权局12发明专利申请权利要求书4页说明书9页附图7页10申请公布号CN104090987ACN104090987A1/4页21一种历史数据存储方法,其特征在于,包括步骤1从一级缓存读取一条历史数据插入请求,所述插入。
3、请求包含档案点的编号、所述档案点的数据值及所述数据值的时间戳,所述档案点指一个数据源的时间序列数据;步骤2利用有损压缩算法对所述插入请求中的所述数据值进行有损压缩,如果所述数据值没有被压缩掉,则将所述数据值和所述时间戳写入所述档案点在二级缓存对应的处于写状态的二级缓冲区中,在所述二级缓存中,每个档案点均对应两个二级缓冲区,其中一个二级缓冲区处于写状态时,另一个就处于读状态,当一个档案点的所述数据值及所述时间戳写入所述二级缓存时,首先确定该档案点对应的当前处于写状态的二级缓冲区,然后根据二级缓冲区的缓冲区头确定具体的写入位置,再完成所述数据值及所述时间戳的写入,最后更新当前处于写状态的二级缓冲区。
4、的缓冲区头信息;步骤3如果当前处于写状态的二级缓冲区已经写满或者其定时器定时已到达,则将该档案点对应的所述两个二级缓冲区的读、写状态互换,并将处于读状态的二级缓冲区所存储的归档历史数据写入临时归档文件,所述临时归档文件仅存储今天的归档历史数据,具体的写入位置根据档案点编号在临时归档索引文件查询,完成写入后,再次更新临时归档索引文件的写入位置信息;步骤4每当进入新的一天,遍历所有档案点,将其在临时归档文件中的归档历史数据全部写入正式归档文件,每次总是写入所述正式归档文件的尾部,完成写入后,再将写入开始位置记录到归档索引文件;在整理临时归档文件之前,先为新的一天创建临时归档索引文件和临时归档文件;。
5、整理完毕之后,删除整理过的临时归档索引文件和临时归档文件。2如权利要求1所述的方法,其特征在于,在所述步骤1之前,还包括初始化操作,所述初始化操作具体包括以下子步骤01创建所述一级缓存及所述二级缓存,并为每个档案点创建一组所述二级缓冲区,其大小按照如下公式进行计算CACHE2SIZEITEMSSIZEOF数据值SIZEOF时间戳其中,ITEMS表示系统最大存储的数据项数目;SIZEOF数据值表示每个数据值所需存储空间;SIZEOF时间戳表示每个时间戳所需存储空间;02检查是否存在今天或者今天以前的临时归档文件,如果是则执行步骤03,否则执行步骤04;03将存在的临时归档文件整理归档到正式归档文。
6、件,并在完成之后删除所述临时归档文件和临时索引文件;04检查是否存在日期索引文件,如果不存在则新建一个日期索引文件;检查是否存在正式归档文件,如果不存在则新建一个空的正式归档文件及其对应的归档索引文件,并在所述日期索引文件的尾部插入对应的索引块;分别新建今天和明天的临时归档文件和临时索引文件。3如权利要求1或2所述的方法,其特征在于,每个二级缓冲区均包括缓冲区头和数据,所述缓冲区头包含读写状态标志位、所述二级缓冲区中第一个数据的时间戳、最新数据的时间戳和已占用空间大小,其中,所述读写状态标志位用于标识所述二级缓冲区当前的状态;所述第一个数据的时间戳表示所述二级缓冲区中保存的第一个数据的时间戳;。
7、所述最新数据的时间戳则表示最新数据的时间戳;所述已占用空间大小记录了所述二级缓冲区权利要求书CN104090987A2/4页3中已存储数据内容的大小;所述二级缓冲区的数据包含对应档案点的时间戳和数据值。4如权利要求1或2所述的方法,其特征在于,所述步骤3具体包括以下子步骤31根据今天的临时归档文件的状态标志位,判断所述临时归档文件是否处于空闲状态,如果是则执行步骤32,否则执行步骤33;32将所述临时归档文件的状态标志位更新为写入状态;33获取一个档案点编号,并根据所述档案点编号从所述临时索引文件中读取所述档案点的临时索引单元,利用所述临时索引单元中的当前数据块首地址,从所述临时归档文件中读取。
8、所述当前数据块的数据区大小,并根据所述档案点编号获取其二级缓存的地址信息;34根据所述档案点对应的处于读状态的二级缓冲区的缓冲区头中的已占用空间大小、当前数据块的数据区大小以及数据块的上限,判断当前数据块能否容纳所述处于读状态的二级缓冲区中的所有数据,如果可以则执行步骤36,否则执行步骤35;35在所述临时归档文件的尾部新创建一个数据块,将所述当前数据块的NEXT指针指向新创建的数据块在临时归档文件中的偏移地址,并将所述档案点在所述临时索引文件中的所述临时索引单元中的当前数据块首地址更新为所述新创建数据块在所述临时归档文件中的偏移地址;36将所述处于读状态的二级缓冲区中的数据写入当前数据块,用。
9、所述处于读状态的二级缓冲区的缓冲区头中的所述已占用空间大小更新当前数据块的数据区大小,将所述处于读状态的二级缓冲区中的所述第一个数据的时间戳、所述最新数据的时间戳和所述已占用空间大小均初始化为0,继续执行步骤33直至所有的档案点都处理完成。5如权利要求4所述的方法,其特征在于,所述临时归档文件包含文件头和归档数据区,所述文件头包含所述状态标志位和文件大小,所述状态标志位说明所述临时归档文件当前处于什么状态,所述文件大小包括所述归档数据区和所述文件头的大小。6如权利要求5所述的方法,其特征在于,所述临时归档文件的所述归档数据区由多个档案点数据块组成,每个档案点数据块对应一个档案点一段时间段内的历。
10、史归档数据,每个档案点可以包含多个档案点数据块,所述档案点数据块包括数据区大小、NEXT指针和数据区,其中,所述数据区存储档案点的数据,所述数据区大小为所述数据区中数据所占存储空间大小,所述NEXT指针为下一个档案点数据块在所述临时归档文件中偏移地址,从而形成一个档案点数据块链表。7如权利要求4所述的方法,其特征在于,在所述临时索引文件中为每个档案点分配一个临时索引单元,在所述临时索引单元中存储着档案点首个数据块的首地址和当前数据块首地址,其中,首个数据块的首地址指的是所述首个数据块在所述临时归档文件中的偏移地址,当前数据块首地址指的是当前正在归档数据的数据块可供写入数据的区域在所述临时归档文。
11、件中的偏移地址。8如权利要求4所述的方法,其特征在于,所述步骤4具体包括以下子步骤41系统实时监测当前时间是否到了将临时归档文件数据整理写入正式归档文件的时间阈值TORDER,如果到达所述时间阈值TORDER则执行步骤42,否则继续实时监测当前时间;42扫描昨天的临时归档文件中所有档案点的压缩数据容量之和,根据正式归档文权利要求书CN104090987A3/4页4件大小上限判断当前的正式归档文件是否可以容纳,是则执行步骤45,否则执行步骤43;43按照档案点编号从小到大的顺序整理昨天的临时归档文件中的数据,将每个档案点在所述临时归档文件中对应数据块的数据按照时间顺序整合到一起,得到档案点一天的。
12、压缩数据集;44逐一按照档案点编号从小到大的顺序将每个档案点的压缩数据集写入到当前正式归档文件,同时,在对应的归档索引文件中增加一个归档索引数据块,记录每个档案点的压缩数据集在当前正式归档文件中的偏移地址及其长度,然后,在日期索引文件尾部增加一个日期索引数据项,记录新增加的归档索引数据块在当前归档索引文件中的偏移地址及其对应的日期,其中,所述日期索引文件由多个索引块构成,每个索引块对应一个正式归档文件;45新建一个空的正式归档文件及其对应的归档索引文件,并在所述日期索引文件的尾部插入对应的索引块,将新创建的正式归档文件作为当前正式归档文件,将数据集写入新建归档文件并更新所述日期索引文件和所述归。
13、档索引文件;46当昨天的临时归档文件整理完毕之后,会将昨天的临时归档文件以及临时索引文件删除,并新建明天的临时归档文件以及临时索引文件以确保每天临时文件在跨天数据存储的时候做到无缝切换。9一种基于权利要求1所述历史数据存储方法的历史数据索引方法,其特征在于,包括步骤1获取一个查询请求,其包含档案点编号、查询的起始时间TBEGIN和结束时间TEND;步骤2将所述查询请求中包含的查询时间段按自然天划分为N个同一自然天内的子查询任务,其中N表示所述查询时间段包含的自然天数目;步骤3获取一个未执行的子查询任务;步骤4根据所述子查询任务的起始时间的“年月日”信息,判断起始时间是否为今天,如果是则执行步骤。
14、5,否则执行步骤7;步骤5根据所述子查询任务中的档案点编号计算档案点的临时索引单元在今天的临时索引文件中对应的偏移地址,计算公式如下临时索引单元偏移地址SIZEOF临时索引单元档案点编号1其中,SIZEOF临时索引单元表示每个档案点的临时索引单元的长度;根据所述临时索引单元的偏移地址从今天的临时索引文件中读取所述档案点的临时索引单元,从而获得首个数据块的首地址和当前数据块首地址;步骤6从所述档案点的首个数据块开始,遍历整个数据块链表,按顺序读取数据块中的数据区并缓存到压缩数据集DATA,还读取所述档案点对应的当前处于写状态的二级缓冲区中的压缩数据并缓存到压缩数据集DATA,继续执行步骤9;步骤。
15、7根据所述子查询任务包含的起始时间的“年月日”信息获取日期索引文件的索引块,进一步从所述索引块中获取正式归档文件存储位置及文件名、对应的归档索引文件存储目录及文件名、以及查询日期对应的日期索引数据项,进一步根据所述日期索引数据项中的归档索引数据在对应归档索引文件中的偏移地址及档案点编号,获取查询日期这一天所述档案点的索引数据,包括所述查询日期这一天的数据在对应正式归档文件中的权利要求书CN104090987A4/4页5偏移地址以及长度;步骤8根据所述步骤7获得的索引信息,从相应的正式归档文件中读取出所述档案点这一天对应的压缩数据集DATA;步骤9根据所述档案点的数据更新周期,对所述压缩数据集D。
16、ATA中的数据进行解压缩,得到按时间先后顺序排列的所述档案点一整天的解压数据集合DEDATA;步骤10如果所述子查询任务的起始时间等于结束时间,表示查询一个特定时间戳的数据,则在所述解压数据集DEDATA中查找时间戳等于起始时间的数据DA,如果存在则返回数据DA,否则返回空的结果集,如果所述起始时间不等于所述结束时间,表示查询一个特定时间段的数据,则将所述解压数据集DEDATA中满足时间戳大于等于所述起始时间并且小于等于所述结束时间条件的数据按时间先后顺序插入到子查询任务结果集合,将第I个子查询任务TI查询所得到的结果数据集记为RSI,其中,I的取值范围为1N;步骤11判断是否所有子查询任务均。
17、已执行完毕,如果不是则继续执行所述步骤3,否则执行步骤12;步骤12将所有子查询任务所得到的结果数据集RSI按照时间先后顺序进行合并,即得到待查询档案点在所述起始时间TBEGIN至所述结束时间TEND时间段内的所有历史数据,最后将合并后的最终结果集返回。权利要求书CN104090987A1/9页6一种历史数据存储及索引方法技术领域0001本发明属于实时历史数据库技术领域,更具体地,涉及一种历史数据存储及索引方法。背景技术0002工业信息化已经成为21世纪全球工业领域的主旋律,近几年来信息化进程开始以一种深度和广度共同发展的势头不断深入。随着物联网的兴起,大量传感器以及智能终端广泛应用于传统工业。
18、领域,更进一步的推动了工业信息化的发展进程。0003在传统的工业生产流程中,实时数据库已经应用广泛。其主要用于一些数据量较小的工业生产系统的实时监控以及数据持久化,涉及的行业包括电力、石油、冶金、化工等。实时历史数据库以档案数据点作为基本单位来描述生产数据。一个数据库的档案数据点对应传感器中的一个物理数据源,例如某一条输电线的电压、某一个检测点的温度等。档案数据点所采集到的数据是离散数据,都带有时间戳。从现场采集到的生产过程数据经过一系列处理之后最终保存在实时历史数据库当中。此类数据通常在后续的过程回溯或者数据分析的过程中使用。0004随着工业信息化的深入发展,决策者对历史数据的存储效率以及数。
19、据访问速度的要求越来越高,因此当前实时历史数据库存在的历史数据存取效率不足的问题愈发突出。面对历史数据存取效率要求越来越高的需求,目前尚无完整可用的实施方案既可以满足当前的数据存取要求,又保证系统具有动态扩展性来应对持续增长的数据存储和处理的需求。发明内容0005针对现有技术的以上缺陷或改进需求,本发明提供一种历史数据的存储及索引方法,根据工业数据存储格式的特点,给出了一种简单高效的历史数据文件的存储方法和一种高效的索引机制,能够满足当前历史数据的高效存取要求,同时能够保证具有动态扩展的特性。该存储方法一方面通过压缩缓存历史数据以及优化数据归档整理流程将磁盘I/O尽可能的减少,另一方面通过将归。
20、档整理过程中的磁盘I/O负载均衡的分布到各个时间点上,从而保证满足当前历史数据的存储要求,同时该存储方法具有动态扩展的特性。该索引机制可以实现对历史数据的快速访问,同时数据库进行动态扩张的时候能够通过动态修改索引文件使得系统对于数据的访问不受影响。0006为实现上述目的,按照本发明的一个方面,提供了一种历史数据的存储方法,包括0007步骤1从一级缓存读取一条历史数据插入请求,所述插入请求包含档案点的编号、所述档案点的数据值及所述数据值的时间戳,所述档案点指一个数据源的时间序列数据;0008步骤2利用有损压缩算法对所述插入请求中的所述数据值进行有损压缩,如果所说明书CN104090987A2/9。
21、页7述数据值没有被压缩掉,则将所述数据值和所述时间戳写入所述档案点在二级缓存对应的处于写状态的二级缓冲区中,在所述二级缓存中,每个档案点均对应两个二级缓冲区,其中一个二级缓冲区处于写状态时,另一个就处于读状态,当一个档案点的所述数据值及所述时间戳写入所述二级缓存时,首先确定该档案点对应的当前处于写状态的二级缓冲区,然后根据二级缓冲区的缓冲区头确定具体的写入位置,再完成所述数据值及所述时间戳的写入,最后更新当前处于写状态的二级缓冲区的缓冲区头信息;0009步骤3如果当前处于写状态的二级缓冲区已经写满或者其定时器定时已到达,则将该档案点对应的所述两个二级缓冲区的读、写状态互换,并将处于读状态的二级。
22、缓冲区所存储的归档历史数据写入临时归档文件,所述临时归档文件仅存储今天的归档历史数据,具体的写入位置根据档案点编号在临时归档索引文件查询,完成写入后,再次更新临时归档索引文件的写入位置信息;0010步骤4每当进入新的一天,遍历所有档案点,将其在临时归档文件中的归档历史数据全部写入正式归档文件,每次总是写入所述正式归档文件的尾部,完成写入后,再将写入开始位置记录到归档索引文件;在整理临时归档文件之前,先为新的一天创建临时归档索引文件和临时归档文件;整理完毕之后,删除整理过的临时归档索引文件和临时归档文件。0011按照本发明的另一方面,提供了一种历史数据的索引方法,包括0012步骤1获取一个查询请。
23、求,其包含档案点编号、查询的起始时间TBEGIN和结束时间TEND;0013步骤2将所述查询请求中包含的查询时间段按自然天划分为N个同一自然天内的子查询任务,其中N表示所述查询时间段包含的自然天数目;0014步骤3获取一个未执行的子查询任务;0015步骤4根据所述子查询任务的起始时间的“年月日”信息,判断起始时间是否为今天,如果是则执行步骤5,否则执行步骤7;0016步骤5根据所述子查询任务中的档案点编号计算档案点的临时索引单元在今天的临时索引文件中对应的偏移地址,计算公式如下0017临时索引单元偏移地址SIZEOF临时索引单元档案点编号10018其中,SIZEOF临时索引单元表示每个档案点的。
24、临时索引单元的长度;根据所述临时索引单元的偏移地址从今天的临时索引文件中读取所述档案点的临时索引单元,从而获得首个数据块的首地址和当前数据块首地址;0019步骤6从所述档案点的首个数据块开始,遍历整个数据块链表,按顺序读取数据块中的数据区并缓存到压缩数据集DATA,还读取所述档案点对应的当前处于写状态的二级缓冲区中的压缩数据并缓存到压缩数据集DATA,继续执行步骤9;0020步骤7根据所述子查询任务包含的起始时间的“年月日”信息获取日期索引文件的索引块,进一步从所述索引块中获取正式归档文件存储位置及文件名、对应的归档索引文件存储目录及文件名、以及查询日期对应的日期索引数据项,进一步根据所述日期。
25、索引数据项中的归档索引数据在对应归档索引文件中的偏移地址及档案点编号,获取查询日期这一天所述档案点的索引数据,包括所述查询日期这一天的数据在对应正式归档文件中的偏移地址以及长度;说明书CN104090987A3/9页80021步骤8根据所述步骤7获得的索引信息,从相应的正式归档文件中读取出所述档案点这一天对应的压缩数据集DATA;0022步骤9根据所述档案点的数据更新周期,对所述压缩数据集DATA中的数据进行解压缩,得到按时间先后顺序排列的所述档案点一整天的解压数据集合DEDATA;0023步骤10如果所述子查询任务的起始时间等于结束时间,表示查询一个特定时间戳的数据,则在所述解压数据集DED。
26、ATA中查找时间戳等于起始时间的数据DA,如果存在则返回数据DA,否则返回空的结果集,如果所述起始时间不等于所述结束时间,表示查询一个特定时间段的数据,则将所述解压数据集DEDATA中满足时间戳大于等于所述起始时间并且小于等于所述结束时间条件的数据按时间先后顺序插入到子查询任务结果集合,将第I个子查询任务TI查询所得到的结果数据集记为RSI,其中,I的取值范围为1N;0024步骤11判断是否所有子查询任务均已执行完毕,如果不是则继续执行所述步骤3,否则执行步骤12;0025步骤12将所有子查询任务所得到的结果数据集RSI按照时间先后顺序进行合并,即得到待查询档案点在所述起始时间TBEGIN至所。
27、述结束时间TEND时间段内的所有历史数据,最后将合并后的最终结果集返回。0026总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果0027首先,利用A、B两组二级缓存的交替使用,可以提高数据的缓存能力,防止数据丢失;0028其次,通过设计临时归档文件和临时索引文件,鉴于其文件结构简单,可以大大减少数据归档时的磁盘操作次数,从而提高数据的归档能力;0029再次,通过设计临时归档文件整理方法以及紧缩式正式归档文件,可以大大减少正式归档文件的存储空间;0030最后,通过日期索引和归档索引,可以大大降低在正式归档文件中查询过程中的磁盘操作次数,从而提高查询效率。附图说明0031图。
28、1为本发明实施例中历史数据持久化存储过程的总体示意图;0032图2为本发明实施例二级缓存的结构示意图;0033图3为本发明实施例中的临时归档文件与临时索引文件结构示意图;0034图4为本发明实施例中正式归档文件、日期索引文件和归档索引文件的结构示意图;0035图5为本发明实施例中数据持久化存储方法流程图;0036图6为本发明实施例中将二级缓存中的数据临时归档存储到临时归档文件中的方法流程图;0037图7为本发明实施例中将临时归档文件整理到正式归档文件的方法流程图;0038图8为本发明实施例提供的索引一个档案点在任意时间段内历史数据的方法流程图。说明书CN104090987A4/9页9具体实施方。
29、式0039为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。0040由于工业历史数据存储对于精度的要求不是很高,因此没有必要将所有数据都存储,需要对其进行压缩。为了减少历史数据持久化存储的时候写磁盘的次数,有必要先将历史数据先缓存起来,从而可以一次性将一段时间的历史数据写入磁盘数据文件中。0041图1所示为本发明实施例中历史数据持久化存储过程的总体示意图。在本发明实施例中,历史数据主。
30、要经历了从缓存到临时归档文件,再从临时归档文件到正式归档文件的过程。系统先初始化,包括创建一级缓存、二级缓存与各类文件。其中,一级缓存采用先进先出队列的结构,其大小可根据档案点数量及其更新速度设定,计算公式如下0042CACHE1SIZENUM档案点SIZEOF数据插入请求0043其中,NUM档案点表示系统中包含的档案点数量上限,此上限受限于本发明运行的硬件平台的处理能力;SIZEOF数据插入请求表示一个数据插入请求所需的存储空间,优选的参数为64字节。二级缓存的结构与大小将在下文结合图2进行详细说明。各类文件的创建将在下文结合图5进行详细说明。0044外部数据源模块将包含档案点的数据插入请求。
31、周期性地写入一级缓存,其中,档案点指一个数据源的时间序列数据,其编号从1开始,每个档案点的数据可以是浮点数、整形数或布尔型数。外部数据源模块可以持续不断地向一级缓存写入数据插入请求,本发明实施例中系统也会同步从一级缓存中持续地、逐一读取数据插入请求,再对插入请求中的数据进行有损压缩,本发明实施例中采用的是旋转门压缩算法,但不限于此算法,相当于只将拐点数据或者一些突变数据存入二级缓存。在二级缓存中会缓存一段时间的数据,当二级缓存定时器到达或者二级缓存写满的时候,系统就会将二级缓存中的数据写入临时归档文件中去。临时归档文件仅存储今天的数据,等到今天过了之后,会在第二天的凌晨时分,在确保前一天的数据。
32、都写入了临时文件之后,系统会将临时文件整理写入正式归档文件。0045图2所示为本发明实施例二级缓存的结构示意图。二级缓存分为多个档案点的缓冲区,每个档案点拥有A、B两组二级缓冲区,该两个二级缓冲区总是保持一个为读状态,另一个为写状态,当其中一个二级缓冲区的归档定时器的周期到达或该二级缓冲区写满时,则交换两个二级缓冲区的读写状态。每个二级缓冲区均包括缓冲区头和数据,缓冲区头包含读写状态标志位、二级缓冲区中第一个数据的时间戳、最新数据的时间戳和已占用空间大小。其中,读写状态标志位用于标识该二级缓冲区当前的状态;第一个数据的时间戳表示该二级缓冲区中保存的第一个数据的时间戳,精确到毫秒,每个时间戳占据。
33、9字节,其中年占据2字节,月、日、时、分、秒分别占据1字节,毫秒占据2字节;最新数据的时间戳则表示最新数据的时间戳即使这个数据被压缩算法压缩掉;已占用空间大小记录了当前二级缓冲区中已存储数据内容的大小。二级缓冲区的数据包含对应档案点的时间戳和数据值。0046每个档案点的每一组二级缓冲区的大小按照如下公式进行计算0047CACHE2SIZEITEMSSIZEOF数据值SIZEOF时间戳0048其中,ITEMS表示系统最大存储的数据项数目,优选的参数为256;SIZEOF数据说明书CN104090987A5/9页10值表示每个数据值所需存储空间,由数据值的数据类型和操作系统寻址位数共同决定,操作系。
34、统寻址位数一般为32位或64位;SIZEOF时间戳表示时间戳所需存储空间,时间戳包含“年月日时分秒毫秒”,在本发明实施例中为9个字节。0049图3所示为本发明实施例的临时归档文件与临时索引文件的结构示意图。其中临时归档文件名形如TDATA_YYYYMMDDDAT,例如TDATA_2014319DAT;临时索引文件名形如TINDEX_YYYYMMDDINDEX,例如TINDEX_2014319INDEX。临时归档文件包含文件头和归档数据区,文件头包含状态标志位和文件大小,状态标志位说明该临时归档文件当前处于什么状态,在本发明实施例中,具体状态包括空闲、归档和整理等;文件大小包括归档数据区和文件头。
35、的大小。如图3所示,在临时索引文件中为每个档案点分配了一个临时索引单元,在临时索引单元中存储着该档案点首个数据块的首地址和当前数据块首地址。其中,首个数据块的首地址指的是首个数据块在临时归档文件中的偏移地址;当前数据块首地址指的是当前正在归档数据的数据块可供写入数据的区域在临时归档文件中的偏移地址。临时归档文件的归档数据区由多个档案点数据块组成,每个档案点数据块对应一个档案点一段时间段内的历史归档数据,每个档案点可以包含多个档案点数据块。档案点数据块包括三个部分数据区大小、NEXT指针和数据区。其中,数据区存储档案点的数据,数据区大小为数据区中数据所占存储空间大小;NEXT指针为下一个档案点数。
36、据块在临时归档文件中偏移地址,从而形成一个档案点数据块链表。0050系统在初始化的时候会替每个档案点在临时归档文件中预分配一块数据块来存储档案点一天的历史数据,此时数据区大小初始化为0,NEXT指针初始化为空地址。同时,每个档案点在临时索引单元中的首个数据块的首地址和最后一个数据块首地址均初始化为预分配数据块在在临时归档文件中的偏移地址。0051当二级缓存中的数据被写入临时归档文件,则需要根据每次写入数据块的字节数更新数据块写偏移地址。而如果当前的数据块被写满了,系统会在临时归档文件末尾为该档案点再追加分配一个数据块,并用当前这个数据块的NEXT指针记录下新分配数据块在临时归档文件中的偏移地址。
37、。此时,临时索引单元中的首个数据块的首地址保持不变,而当前数据块首地址就会更新为新分配数据块在临时归档文件中的偏移地址。0052临时归档文件和临时索引文件都属于临时文件,当昨天的临时归档文件中的数据整理完毕后,昨天的临时文件都会被删除,同时还会创建明天的临时文件,使系统总是存在今天和明天的临时归档文件和临时索引文件,以便每天的临时文件能够做到无缝切换使用。0053图4所示为本发明实施例中正式归档文件、日期索引文件和归档索引文件的结构示意图,以及这些文件之间的关系。其中正式归档文件名形如HISDATA_NDAT,其中N代表文件序号,例如第一个正式归档文件为HISDATA_1DAT;日期索引文件有。
38、且只有一个,其文件名形如TIMEINDEX;归档索引文件与正式归档文件对应,其文件名形如HISDATA_NINDEX,其中N与正式归档文件名中的序号一致。为保证本发明可适用于不同文件系统,每个正式归档文件的存储上限均可以根据实际文件系统进行设置,例如FAT32文件系统中正式归档文件的存储上限不能超过4GB,NTFS文件系统存储上限则可以设为大于4GB的值,具体上限还可以根据实际应用需求进行修改,但优选的正式归档文件存储上限不应低于2GB。当一个正式归档文件达到设置的存储上限,则创建一个新的正式归档文件和归档索说明书CN104090987A106/9页11引文件,其序号都将自增1。在本发明实施例。
39、中,正式归档文件如图4所示,从文件头开始顺序存储每个档案点每一天的数据。0054日期索引文件由多个索引块构成,每个索引块对应一个正式归档文件。每个索引块均包含对应的正式归档文件中所存储数据的开始日期包含年、月、日、结束日期包含年、月、日、存储数据的天数、正式归档文件存储目录及文件名、正式归档文件对应的归档索引文件存储目录及文件名,以及日期索引数据项。其中,日期索引数据项的数量与存储的数据的天数相等。每一个日期索引数据项包含日期及其归档索引数据在对应归档索引文件中的偏移地址。0055归档索引文件对应正式归档文件,正式归档文件中存储数据的天数等于归档索引文件中归档索引数据的天数。归档索引文件由多个。
40、归档索引数据块构成,每个归档索引数据块对应正式归档文件中一天的所有档案点数据的索引信息。归档索引数据块中每个档案点的索引数据包含了该档案点一天的数据在对应正式归档文件中的偏移地址以及数据长度。0056图5所示为本发明实施例中数据持久化存储方法的流程图,具体包括以下步骤0057在步骤501中,系统初始化,创建一级缓存,并根据系统中的最大档案点数量按上文所述方式为每个档案点创建一组二级缓存;0058在步骤502中,检查是否存在今天或者今天以前的临时归档文件,如果是则执行步骤503,否则执行步骤504;0059在步骤503中,将存在的临时归档文件整理归档到正式归档文件,并在完成之后删除该临时归档文件。
41、和临时索引文件;0060在步骤504中,检查是否存在日期索引文件,如果不存在则按照前述日期索引文件的命名规则新建一个日期索引文件;检查是否存在正式归档文件,如果不存在则按照前述正式归档文件和归档索引文件的命名规则新建一个空的正式归档文件及其对应的归档索引文件,并在日期索引文件的尾部插入对应的索引块;按照前述临时归档文件和临时索引文件的命名规则分别新建今天和明天的临时归档文件和临时索引文件;0061在步骤505中,从一级缓存中读取历史数据插入请求,解析请求中的档案点编号及数据对应的时间戳;0062在步骤506中,如果插入请求中的数据时间戳早于该档案点当前处于写状态的二级缓存中保存的最新数据时间戳。
42、,则丢弃该插入请求,重新执行步骤505,否则执行步骤507;0063在步骤507中,将档案点对应的处于写状态的二级缓冲区的缓冲区头中的最新数据时间戳更新为该的数据的时间戳,并执行有损压缩算法,例如旋转门压缩算法,但不限于此算法;0064在步骤508中,判断数据是否被压缩掉,是则执行步骤509,否则执行步骤510;0065在步骤509中,根据系统当前时间判断归档周期是否已到,该归档周期可由实际应用要求决定,本发明实施例优选的归档周期为10分钟,如果是则执行步骤512,否则执行步骤505;0066在步骤510中,将数据及其时间戳写入档案点对应的处于写状态的二级缓冲区,并更新缓冲区头中的最新数据时间。
43、戳,并用已占用空间加上本次写入数据的字节数更新已说明书CN104090987A117/9页12占用空间;0067在步骤511中,根据档案点对应的处于写状态的二级缓冲区的缓冲区头中已占用空间,判断该二级缓冲区是否已经写满,或者根据系统当前时间判断归档周期是否已到,如果是则执行步骤512,否则执行步骤505;0068在步骤512中,将档案点的A、B两组二级缓冲区读写状态互换,并将已更换为读状态的二级缓冲区所存储的数据写入临时归档文件并重新初始化该二级缓冲区;0069在步骤513中,检查系统当前时间,判断是否进入新的一天,如果是则执行步骤514,否则执行步骤505;0070在步骤514中,将昨天的临。
44、时归档文件整理归档到正式归档文件,完成之后删除昨天的临时归档文件和临时索引文件,并创建明天的临时归档文件和临时索引文件,以便每天的临时文件能够做到无缝切换使用。0071图6所示为本发明实施例中将一个档案点在二级缓存中的数据转存到临时归档文件中的流程图,具体包括以下步骤0072在步骤601中,根据今天的临时归档文件的状态标志位,判断临时归档文件是否处于空闲状态,如果是则执行步骤602,否则执行步骤603;0073在步骤602中,将今天的临时归档文件的状态标志位更新为写入状态;0074在步骤603中,获取一个档案点编号,并根据档案点编号从临时索引文件中读取该档案点的临时索引单元,利用临时索引单元中。
45、的当前数据块首地址,从临时归档文件中读取当前数据块的数据区大小,并根据档案点编号获取其二级缓存的地址信息;0075在步骤604中,根据该档案点对应的处于读状态的二级缓冲区的缓冲区头中的已占用空间、当前数据块的数据区大小以及数据块的上限,判断当前数据块能否容纳该处于读状态的二级缓冲区中的所有数据,如果可以则执行步骤606,否则执行步骤605;0076在步骤605中,在临时归档文件的尾部新创建一个数据块,优选的数据块大小为16K字节;将当前数据块的NEXT指针指向新创建的数据块在临时归档文件中的偏移地址,并将该档案点在临时索引文件中的临时索引单元中的当前数据块首地址更新为新创建数据块在临时归档文件。
46、中的偏移地址;0077在步骤606中,将该处于读状态的二级缓冲区中的数据写入当前数据块,用该处于读状态的二级缓冲区的缓冲区头中的已占用空间更新当前数据块的数据区大小;将该处于读状态的二级缓冲区中的第一个数据的时间戳、最新数据的时间戳和已占用空间大小均初始化为0,继续执行步骤603直至所有的档案点都处理完成。0078图7所示为本发明实施例中整理临时归档文件形成正式归档文件的方法流程图,具体包括以下步骤0079在步骤701中,系统实时监测当前时间是否到了将临时归档文件数据整理写入正式归档文件的时间阈值TORDER,如果到了时间阈值TORDER则执行步骤702,否则继续实时监测当前时间,在本发明实施。
47、例中,优选的时间阈值TORDER为15分钟,以确保所有二级缓存中的数据都被写入昨天的临时归档文件;0080在步骤702中,扫描昨天的临时归档文件中所有档案点的压缩数据容量之和,根据正式归档文件大小上限判断当前的正式归档文件是否可以容纳,是则执行步骤705,否则执行步骤703;说明书CN104090987A128/9页130081在步骤703中,按照档案点编号从小到大的顺序整理昨天的临时归档文件中的数据,将每个档案点在临时归档文件中对应数据块的数据按照时间顺序整合到一起,得到该档案点一天的压缩数据集;0082在步骤704中,逐一按照档案点编号从小到大的顺序将每个档案点的压缩数据集写入到当前正式归。
48、档文件,同时,在对应的归档索引文件中增加一个归档索引数据块,记录每个档案点的压缩数据集在当前正式归档文件中的偏移地址及其长度,然后,在日期索引文件尾部增加一个日期索引数据项,记录新增加的归档索引数据块在当前归档索引文件中的偏移地址及其对应的日期;0083在步骤705中,按照前述正式归档文件和归档索引文件的命名规则新建一个空的正式归档文件及其对应的归档索引文件,并在日期索引文件的尾部插入对应的索引块,将新创建的正式归档文件作为当前正式归档文件,将数据集写入新建归档文件并更新日期索引文件和归档索引文件;0084在步骤706中,当昨天的临时归档文件整理完毕之后,会将昨天的临时归档文件以及临时索引文件。
49、删除,并新建明天的临时归档文件以及临时索引文件以确保每天临时文件在跨天数据存储的时候做到无缝切换。0085由于历史数据在正式归档文件中同一个档案点同一天的压缩数据是存在一起的,故本发明实施例的索引方法可以快速定位一个档案点一天内某时间段内的历史数据,也可以索引具体时刻的历史数据。0086图8所示为本发明实施例提供的索引一个档案点在任意时间段内历史数据的方法流程图,具体包括以下步骤0087在步骤801中,获取一个查询请求,其包含档案点编号、查询的起始时间TBEGIN和结束时间TEND,起始时间TBEGIN和结束时间TEND均包含“年月日时分秒毫秒”;0088在步骤802中,将查询请求中包含的查询时间段按自然天划分为N个同一自然天内的子查询任务,其中N表示查询请求中包含的查询时间段包含的自然天数目,每个子查询任务的起止时间都处在同一个自然天内;用TI表示第I个子查询任务,I的取值范围为1N,其中子查询任务T1的起止时间为起始时间TBEGIN至TBEGIN所在自然天的23时59分59秒999毫秒,子查询任务TN的起止时间为结束时间TEND所在自然天的0时0分0秒0毫秒至TEND,而子查询任务T2,T3,TN1代表中间包含自然天的完整一天时间,即同一个自然天内的0时0分0秒0毫秒至23时59分59秒999毫秒;0089在步骤803中,获取一个未执行的子查询任务;0090在。