首页> 中国专利> 一种历史记录存储方法、装置、电子设备以及存储介质

一种历史记录存储方法、装置、电子设备以及存储介质

摘要

本发明涉及一种历史记录存储方法,其特征在于,所述方法至少包括:基于数据写入时间和数据类型将数据变量存储在对应的至少一个数据表内,将一个变量的每分钟内的数据只记录一次年、月、日、时、分钟的时间单位信息,将每分钟内的数据时间以不高于秒级的时间粒度进行记录。相对于现有技术的缺陷,本发明通过改变历史记录中的数据存储格式和查找路径,设计按照数据类型和数据产生的时间建表,让相同类型的数据且时间相近的数据尽量在一个数据文件中,能够明显提高读写速度并大量节省磁盘空间。

著录项

  • 公开/公告号CN112214493A

    专利类型发明专利

  • 公开/公告日2021-01-12

    原文格式PDF

  • 申请/专利权人 北京九思易自动化软件有限公司;

    申请/专利号CN202011127959.3

  • 发明设计人 路超;徐新文;种道阳;

    申请日2020-10-20

  • 分类号G06F16/22(20190101);G06F16/215(20190101);G06F16/2455(20190101);G06F12/0897(20160101);

  • 代理机构11129 北京海虹嘉诚知识产权代理有限公司;

  • 代理人何志欣

  • 地址 100080 北京市海淀区华清嘉园7号楼1001室

  • 入库时间 2023-06-19 09:32:16

说明书

技术领域

本发明涉及数据存储技术领域,尤其涉及一种历史记录存储方法、装置、电子设备以及存储介质。

背景技术

在工业SCADA软件领域,需要由底层将采集而来的数据进行管理和存储。工业数据采集,大部分情况下对数据的实时性要求较高,并且需要对过去的很长时间内的数据进行保存。系统规模越大,采集的点数相应的也会提高,由于数据采集频率较高,因此需要管理和存储的数据量会非常大。如果不经过任何处理,针对原始数据进行存储,会占用大量的存储空间,当数据量很大时,针对原始数据的查询也非常耗时。

例如,中国专利CN108319714A公开了一种基于HBase的列存储压缩方法,包括从HBase读取各列数据,对各列数据进行重新排序并存储于各区中;统计随机块的统计量以计算各区之间的相似因子S,相似因子S为判断区间相似度的定义量,通过两区的统计量T特征分量的绝对差值得到,并判断列分布均匀或离散;若分布均匀,则采用混级列压缩方式;若分布离散,则采用混级区压缩方式。该发明虽然采用相似因子S对读取的数据进行重新排序并分区存储,但是重复内容的数据依然存在,并没有明显减少数据的存储量。

中国专利CN110543281A公开了一种数据存储实现方法、装置、设备及存储介质,包括如下步骤:数据写入时,对数据进行热数据检测;根据检测结果判断是否是热数据,若是,不进行数据压缩,将数据写入存储盘;若不是,对数据进行压缩比检测;判断检测的数据的压缩比是否小于预设的压缩阈值,若是,不进行数据压缩,将数据写入存储盘;否则,进行数据压缩,将压缩后数据写入存储盘。该发明通过数据压缩的方式,只是减少了数据存储的空间,没有做到数据量的减少。

中国专利CN110941564A公开了一种存储空间分配方法、装置、电子设备以及存储介质,所述方法包括:获取多路数据流中第一路数据流的当前数据;监测当前帧数据的数据量是否超过第一最大存储数据量;当监测到当前帧数据的数据量超过第一最大存储数据量时,释放目标存储空间中已分配给多路数据流的存储空间,并根据当前帧数据的数据量和原已分配给多路数据流的存储空间的最大存储数据量,从目标存储空间两端中的第二端开始,重新为多路数据流分配存储空间,以实现在不产生存储空间碎片的前提下,节约存储空间。该发明是根据数据大小实现对存储空间的合理分配,避免出现空间碎片,从而节约存储空间。但是,该发明依然没有实现真正的数据流删减。

中国专利CN102629235B公开了一种提高DDR存储器读写速率的方法,在向DDR存储器写入数据前将原始数据进行封装,并在数据包的头部构造一个数据包起始标识符SOF,在数据包的尾部构造一个数据包结束标识符EOF,然后,将数据包批量顺序写入DDR存储器;在从DDR存储器批量读取数据时,通过搜索数据流中的SOF,找到需要读取的数据包的起始位置,通过EOF定位需要读取的数据包的结束位置;对读取的数据包进行解封装处理以恢复出原始数据帧。该发明是对数据按照长度进行封装并添加标签,未进行合理的分类,从而无法提高数据读写速度。

基于现有的缺陷,本发明提出一种设计数据存储结构,其目标是实现数据的存储,达到读写速度快,占用磁盘空间少,查询速度快的目的。

此外,一方面由于对本领域技术人员的理解存在差异;另一方面由于发明人做出本发明时研究了大量文献和专利,但篇幅所限并未详细罗列所有的细节与内容,然而这绝非本发明不具备这些现有技术的特征,相反本发明已经具备现有技术的所有特征,而且申请人保留在背景技术中增加相关现有技术之权利。

发明内容

针对现有技术之不足,本发明提供一种历史记录存储方法,其特征在于,所述方法至少包括:

将数据进行数据类型分类,基于数据写入时间和数据类型将数据变量存储在对应的至少一个数据表内以形成一级缓存数据;本发明通过将数据重新分类并进行分类记录,尽可能的采用顺序读写的方式,降低随机读写带来的耗时与不必要的时间花费,让相同类型的数据且时间相近的数据尽量在一个数据文件中,磁盘就不需要寻道的机械动作,每次写入尽量多的数据,读写速度就会快。本发明通过大块的数据集中写入,而不用小块数据多次写入,同时为了提高数据读取的性能,考虑对数据的写入设计合理的索引结构以及数据的统计分析,能够尽可能减少数据查询读取的数据量。

将一个变量在一分钟内的数据只记录一次年、月、日、时、分钟的时间单位信息,将一分钟内的数据时间以小于分钟级别的时间单位进行记录以形成二级缓存数据;对一分钟内的数据以分类压缩的方式缓存。统计二级缓存数据的统计数据并且按照预设的存储结构将数据写入磁盘本发明通过将数据进行分类合并的二次缓存,采用合理的数据算法设计,去掉数据中重复的内容,实现了节省磁盘空间,既少存,又不丢失信息的良好技术效果。

优选的,所述方法还包括:

在所述内存缓冲区存满和/或超过设定时间的情况下,将所述内存缓存区内的内存数据写入磁盘。在缓存区存满后后批量写入磁盘,有利于提高读写速度。

优选的,所述方法还包括:

建立表名索引表并且基于数据表的信息更新表名索引表,其中,

所述表名索引表至少记载所述数据表的名称、数据起止时间和/或数据类型,在响应查询指令的情况下,基于所述数据类型和所述数据起止时间确定所述表名索引表记载的数据表名称,从而在与所述数据表名称对应的数据表中查询数据。通过建立表名索引表,能够精确定位每个数据的时间范围及跨越表格,更加迅速的确定数据存储区域以及存储范围,可以使用多级并行检索,从而提高效率。

优选的,所述方法还包括:所述表名索引表还包括用于存储处于当前数据使用状态的数据表的当前表,在系统启动的情况下,查询和/或读取所述当前表记载的内存对象。当前表的设置,能够使得系统在运行时只使用内存对象,更好提高系统查询数据表的检索速度。

优选的,所述数据表中的数据结构至少包括变量标识,数据产生时间和二进制数据,所述二进制数据字段包含一个变量在一分钟内产生的数据,所述数据的属性至少包括产生时间、数值和/或质量戳,其中产生时间的时间单位为小于分钟级别的时间单位。本发明的数据结构的设置,能够有利于数据的分类以及快速存储,明显地降低数据的存储量且不遗漏数据信息。

优选的,所述数据表名称至少包括数据类型字符串信息和序号信息,所述数据类型字符串的变量名为替换形成的短整形ID标识。将数据表名称的数据类型字符串缩短字节,有利于减少占用空间和提高查询效率,数值比较效率远大于字符串比较效率。

优选的,在所述质量戳表示数据非异常的情况下,所述数据表不记录数据的质量戳;在所述质量戳表示数据异常的情况下,所述数据表记录一分钟内第一个质量异常的数据;在所述质量戳表示数据质量不确定的情况下,所述数据表记录所述质量戳的状态。本发明对质量戳的记录方式,能够可以减少90%以上的质量戳空间占用,从而节省出更大的磁盘空间。

本发明还提供一种历史记录存储装置,其特征在于,所述装置至少包括分类模块和合并模块,分类模块用于将数据进行数据类型分类,基于数据写入时间和数据类型将数据变量存储在对应的至少一个数据表内以形成一级缓存数据;合并模块用于将所述一级缓存数据合并且更新为二级缓存数据,其中,将一个变量在一分钟内的数据只记录一次年、月、日、时、分钟的时间单位信息,将一分钟内的数据时间以小于分钟级别的时间单位进行记录以形成二级缓存数据;对一分钟内的数据以分类压缩的方式缓存。本发明的历史记录存储装置,按照设定的顺序进行数据的存储和读取,读取粗度快,相同数据占用磁盘空间小,从而能够存储更多的数据。

本发明的历史记录存储装置,还包括统计模块,所述统计模块将二级缓存数据的统计数据按照预设的存储结构将数据写入磁盘,其中,

数据统计的内容至少包括:

与开关量缓冲区相关的数据变化次数、占空比;

与整形缓冲区和实型缓冲区相关的数据最大值、最小值和/或平均值。

本发明还提供一种历史记录存储电子设备,其特征在于,包括存储器和处理器,所述存储器与处理器连接,存储器,用于存储数据,处理器,用于根据本发明的历史记录存储方法处理数据。本发明的历史记录存储电子设备,通过采用顺序读写的方式,降低随机读写带来的耗时与不必要的时间花费,让相同类型的数据且时间相近的数据尽量在一个数据文件中,磁盘就不需要寻道的机械动作,每次写入尽量多的数据,读写速度就会快。

本发明还提供一种历史记录存储介质,其特征在于,所述存储介质上存储有数据存储程序,所述数据处理程序被处理器执行时实现本发明所述历史记录存储方法。本发明的历史记录存储介质,不仅读写速度快,而且通过一分钟内的数据的时间信息的秒级单位的记录,去掉数据中的重复内容,实现既节省磁盘空间又不丢失信息的良好效果。

附图说明

图1是本发明的装置的模块示意图;

图2是本发明的其中一种存在原始数据的占空比的时间示意图;

图3是本发明的另一种占空比的时间示意图;

图4是本发明的其中一种无数据的占空比的时间示意图;

图5是本发明的其中一种存在原始数据的数据统计内容示意图;

图6是本发明的其中一种无数据的数据统计内容示意图。

附图标记列表

10:分类模块;20:合并模块;30:统计模块。

具体实施方式

下面结合附图进行详细说明。

现有技术的缺陷在于,历史记录数据的每个变量记录在一个数据表中。当有数据写入时,要保持很多个数据表表,这样就增加了磁盘寻道的时间,导致读写速度慢。现有技术的缺陷还在于,比如记录一个整形变量的值,每秒记录一次,每次记录(变量名、时间、变量值、质量戳)时间包括年月日时分秒,在一分钟内所有记录的时间的年月日时分部分都是重复的,只有秒部分不同。重复的内容占用大量的磁盘空间,并且导致信息存量较少。

针对现有技术中的存储空间占用大、原始数据查询耗时的缺陷,本发明提供一种历史记录存储方法及装置,以实现数据的存储,达到读写速度快,占用磁盘空间少,查询速度快的目的。

如图1所示,本发明的历史记录存储装置,所述装置至少包括分类模块10和合并模块20。合并模块20与分类模块10建立通信连接,以进行数据传输。分类模块10用于将数据进行数据类型分类,基于数据写入时间和数据类型将数据变量存储在对应的至少一个数据表内以形成一级缓存数据。合并模块20用于将所述一级缓存数据合并且更新为二级缓存数据,其中,将一个变量在一分钟内的数据只记录一次年、月、日、时、分钟的时间单位信息,将一分钟内的数据时间以小于分钟级别的时间单位进行记录以形成二级缓存数据;对一分钟内的数据以分类压缩的方式缓存。

本发明的历史记录存储装置还包括统计模块30。统计模块30分别与分类模块10和合并模块20建立通信连接,以进行数据传输。统计模块30用于执行实时统计工作。

本发明中的分类模块10、合并模块20和统计模块30均可以是专用集成芯片、服务器、处理器或者云服务器。优选的,分类模块10、合并模块20和统计模块可以分体设置,也可以一体式设置。例如分类模块10、合并模块20和统计模块30集成为一个专用集成芯片、处理器、服务器或者云服务器。

工业现场采集得到的数据具有多种类型,至少包括模拟量,开关量,字符串等。分析归类成计算机数值类型至少包括:整形数据,实型数据,bool型数据,时间型数据。

分类模块10接收到的原始数据中,其单条数据基本数据成员至少包括点名,值,时间戳,质量戳。点名用于标示数据点。值为数据值。时间戳是指与值对应的时间点。质量戳表征原始数据的状态,是否可信。

由于同时采集得到的原始数据的点数较多,分类模块10对缓冲区进行分类,至少包括4类缓冲区,整形缓冲区,实型缓冲区,字符串型缓冲区和开关量缓冲区。同一类型的缓冲区内部需要缓冲多个标签点数据。

为了提高对所有标签点区分的效率,分类模块10对标签ID进行定义,对标签名称进行替换。标签点数据的基本数据结构为Dictionary,其中Key值ID为整形数据,Value类型为相应的数值数组。不同类型的数据分别属于不同的数据类型。对应为int[].doublue[],bool[],string[]。分类模块接收到原始数据后,将原始数据按照类型添加到相应缓冲区,形成一级缓冲数据。

缓冲区内的每个类型的缓冲区能够缓冲指定时间内的数据。指定时间为0~10分钟。指定时间优选为一分钟。对于秒级数据,一分钟内数据量为60条,常规数据量<=60。在缓冲区满足条件的情况下,合并模块20对指定时间内的数据进行归类压缩处理,其归类压缩的基本方法如下:

S1:将原始数据的变量名字,符串类型等用一个两字节的短整形ID标识替换,有利于减少占用空间和提高查询效率,数值比较效率远大于字符串比较效率。

S2:将指定时间内的全部缓冲数据中的时间部分的年、月、日、时、分只记录一次,指定时间内的每个数据时间戳只保留秒的部分,能够减少时间戳数据75%的空间占用。

S3:对于质量戳数据非异常的,不做记录,只有在质量戳异常的情况下记录质量戳数据。一般情况下,绝大多数的质量戳正常,可以减少90%以上的质量戳空间占用。

S4:将数据部分打包成二进制数据,一方面提高了数据的安全性,另一方面降低了占用空间。

随着智能设备的发展以及用途的扩展,使用移动端查看存储的历史记录数据为更普遍的现象。移动端至少包括智能手机、平板电脑、便携式电脑等便携移动的终端设备。

通过移动端查看数据,不需要看大量数据本身,而往往只是以模拟显示的方式体现数据趋势。因此,本发明的历史记录存储装置通过对数据的质量戳的识别,对于没有出现质量问题的数据不需要特殊处理;对于出现质量问题的数据,不将问题数据直接发送至移动端,而是在含有分类模块、合并模块、统计模块的处理器或服务器端即历史记录存储装置完成处理。其中,历史记录存储装置将针对移动端模拟显示的处理模块处理后的数据的信令下发给移动端,以便按模拟方式显示恶化的数据。

优选的,本发明针对移动端模拟显示的处理模块,基于质量戳发送部分必要的部分数据以体现数据趋势。在响应于移动端的精确数据的请求的情况下,本发明的历史记录存储装置向移动端模拟显示的处理模块发送更多的数据。基于质量戳确定的恶化的数据,移动端的画面可以通过颜色或附加标记的方式显示恶化数据。

例如,基于移动端的画面展示的局限性,往往以数据图的方式展示数据以及数据变化趋势。此时,数据图不是高清的,仅需要必要的数据就能够展示数据的变化趋势,能够减少历史数据存储装置向移动端发送的数据量。在用户通过移动端放大数据图来展示高清质量的数据图的情况下,移动端的模拟显示的处理模块向历史记录存储模块再次请求所需要部分的详细的数据,以形成高清的数据图。数据图在展示画面时可以以指定的颜色或标记展示恶化数据。

即本发明通过质量戳的分类记录,既能够减少历史记录存储的质量戳的空间占用,还能够利用异常状态的质量戳来显示恶化数据,以实现历史记录存储装置与移动端之间的数据的少量传输。用户在移动端查看数据图时,也能够根据需要查看数据的变化趋势以及高清数据图。数据图包括以数据曲线、柱状图、饼状图等等统计方式形成的若干种数据图。

优选的,对于趋势类数据的查询,尤其是报表类数据的显示、曲线显示和图表显示等等,本发明的统计数据很大程度上亦可以缓解查询数据数量过大的问题。

本发明的原始数据的数据结构如表1所示,包括3个字段:ID变量标识,DTime数据产生时间,value二进制数据。

表1原始数据的数据结构

其中,ID变量标识是变量名称对应的标识,采用smallint类型,数值范围-32768到32767。DTime数据产生的时间为datetime2(2)日期型,存贮占6byte。

Int,double,bool三种类型的数据存储结构采用二进制数据压缩存储,压缩方法如下所述。

Tm(datetime2(2),6Byte)表示表1中该行记录的二进制数据的时间的年、月、日、时、分,秒以后部分是变量标识在指定时间内产生的第一条数据的时间。DTime字段是主键,DTime字段是datetime2(2)类型;每个数据的时间的秒以后的部分,存储在二进制数据中。

value二进制数据字段包含至少一个变量在指定时间内产生的全部数据。例如,超过1分钟的数据保存到新的数据行,每个数据的属性包括:产生时间、数值、质量戳。其中产生时间的时间单位为小于分钟级别的时间单位。例如,产生时间为秒、毫秒、微秒等等。

表2:value二进制数据字段的存储结构

如表2所示,value二进制数据至少包括:数据个数n、时间+数据、质量戳3部分组成。其中,数据个数n是二进制数据的第一、第二个字节,2byte表示一个(0~65535)整数n。n表示一分钟内产生数据的个数。

时间占2byte,用0~60000之间的整数代表1分钟内的第m个毫秒。当二进制数据转换为Tuple(id,time,value,quality)数据时,数据的时间戳=每行数据DTime的年月日时分+m毫秒。

数据值(int型)占4Byte。(float类型浮点数据为近似值;不能精确地表示。可以近似表示-3.40E+38至-1.18E-38、0以及1.18E-38至3.40E+38,占4个字节,bool占1Byte)。

合并模块20将质量戳全部放在数据后面。

在所述质量戳表示数据非异常的情况下,所述数据表不记录数据的质量戳。例如,质量好的数据不记录质量戳。

在所述质量戳表示数据异常的情况下,所述数据表记录一分钟内第一个质量异常的数据。例如,质量坏的数据只记录第一个质量变坏的数据。

在所述质量戳表示数据质量不确定的情况下,所述数据表记录所述质量戳的状态。即在质量不确定时,对于需要记录的质量戳,记录其不确定的各种状态。例如,用2种质量戳分别表示启动和停止2种操作。本发明的质量部分,每个质量信息占用3Byte,第一第二个Byte表示该质量信息是第i个数据的质量,第三个Byte代表质量的状态值。

表3:本发明的质量戳的状态值

表3中,用1Byte表示0~255个状态。

在所述内存缓冲区不足和/或超过设定时间的情况下,合并模块将所述内存缓存区内的内存数据写入磁盘。

本发明的统计模块30对所有存储的数据进行统计,以提高读取的效率,便于长周期的数据读取、查询使用。统计数据至少包括一端时间内的平均值,最大值,最小值,总量等等。

其中,Bool,Double,int三种数据需要存储统计值,string类型数据不统计。

优选的,统计模块30对于开关量缓冲区的统计内容至少包括变化次数和占空比,如图2~图4所示。即统计模块30基于开关量缓冲区内的一级缓冲数据统计变化次数和占空比。

变化次数N:如果当前值与上一个值不同,那么变化次数N加1;如两者值相同,变化次数N保持不变。

占空比R:

如图2所示,在统计期间内,如果有原始数据,第一个数据是false,统计期的起始时间到第一个数据的时间差算作值为true的数据持续时间。

如图3所示,在统计期间内,最后一个数据的时间到统计期结束,算作最后一个数据的持续时间。

如图4所示,如果没有数据,按照前一个原始数据计算统计值。

优选的,统计模块30对于整形缓冲区和实型缓冲区的统计内容至少包括:max最大值及其所有最大值发生的时间,min最小值及其所有最小值发生时间,avg平均值,如图5~图6所示。即统计模块30基于整形缓冲区和实型缓冲区内的一级缓冲数据统计max最大值、min最小值及其最大值和最小值发生的时间。

统计模块30计算avg平均值的方式为:以数据持续的时间为权重,计算加权平均。

如图5所示,v表示数据值,t表示在统计期间内,如果有原始数据,在统计期之前查找一个最近的原始数据,取该原始数据的值和统计期内第一个数据的时间做权重。在统计期间内,最后一个数据的时间到统计期结束,算作最后一个数据的持续时间。

如图5所示,统计期内的第一个数据为v,第一个数据持续时间为t;第二个数据为v

如图6所示,在统计期间内,如果没有数据,按照前一个原始数据计算统计值,则Avg=v

统计模块30将统计的统计数据进行存储,写入磁盘。

现有技术中的算术平均值avg=(avg*n+v)/(n+1)=avg+(v-avg)/(n+1)可以避免avg*n造成溢出。本发明的加权平均avg=(avg*数据持续时间总和+数据*数据持续时间)/(数据持续时间总和+数据持续时间)。

本发明采用新加权平均计算的优势在于,不仅能够避免计算过程中数据溢出的情况,还能够对于大量数据的汇总过程进行简化。

优选的,合并模块20将合并的二级缓存数据按照预设的存储结构写入磁盘。优选的,预设的存储结构至少包括:表名索引表、变量名索引表、数据表和统计表。

表名索引表TableInfo用于保存每个数据表的名称、数据起止时间、数据类型。在单个数据表的数据量超过200万行的情况下建立新的数据表,并且将新数据表的信息更新到表名索引表TableInfo。在响应查询指令的情况下,在表名索引表TableInfo中基于数据类型、起止时间范围查询并确定符合查询条件的至少一个数据表,然后从确定的数据表中查询数据。

与现有技术方案相比,本发明设置表名索引表可以精确定位每个数据的时间范围及跨越表格,更加迅速的确定数据存储区域以及存储范围,从而能够使用多级并行检索来提高效率。

表名索引表至少包括当前表MainTable,即当前表MainTable属于表名索引表中的一种。当前表MainTable用于记录当前系统正在工作的数据表。

当前表MainTable的表结构与表名索引表TableInfo的结构相同,如表4所示,用于存储当前数据的正在使用的表,用于获取当前写入数据表的信息。从当前表MainTable中知道当前数据要保存到哪个数据表中。每个数据类型只有一个当前表MainTable。当前表MainTable最多只有4行数据,在创建新的数据表时更新当前表MainTable的信息。

表4当前表MainTable的表结构

优选的,MainTable表只在系统启动时查询一次,将当前表信息从磁盘中读入内存,为当前表名对象。运行时只使用内存对象,速度更快,使用当前表MainTable可以更好提高系统插入表检索速度,表信息发生变化时更新到硬盘存储,以保证系统启动时数据同步。

本发明的数据表按数据类型建立。相同数据类型的不同变量值保存在同一张数据表中。每张数据固定保存200万行记录。当写入数据之后,存储容量如果超过200万行,创建新数据表。本发明的数据表的数据是经过大量数据测试得来,在200万数值处综合写入,查询性能最优。当数据量增大时,采用分表的策略。数据表命名以数据类型的字符串加整数的序号组合方式,即:数据表名称=数据类型字符串+整数n。

例如:int型的第一张数据表名字就是int1,第二张表就是int2…intn。

本发明中,以二进制数据压缩存贮int,double,bool三种类型的数据。

本发明中的统计表的统计周期优选为1小时,按自然时间整点计算。当天每个小时的统计数据保存到临时统计表StatTemp中。本发明的统计周期1小时是综合查询时间考虑的合理的统计粒度。

临时统计表StatTemp保存当天每个小时的统计数据,临时统计表直接采用id和统计时间statDate定位数据。超过1天的数据,将每个变量的统计数据合并成一个二进制的数据包存入统计表,已存入统计表的值将从临时统计表StatTemp中删除。统计数据是由每天的统计数据压缩成一个数据包,因此,需要使用临时统计表存储当天的数据,完成后再汇总写入最终统计表。

优选的,本发明的临时统计表将数据汇总入统计表的方法包括:

S21:DataType以一个正整数代表数据类型:Bool-1,Double-2,int-3,三种需要计算统计值的数据都存放在临时统计表StatTemp中,以DataType值区分。

S22:1个小时内的统计数据转化为二进制,保存在Varbinary字段,如表5所示。

S221:Varbinary字段的前16个字节依次按照最大值vmax、最小值vmin、平均值vavg、记录行数avgrows,每个数据占用4个字节。

S222:Varbinary字段的17、18字节用shortint表示最大值的个数,第19、20字节用shortint表示最小值的个数。

S223:Varbinary字段的第21个字节起保存最大值的时间,每个时间用sqlserver2008的数据类型time(2)表示,time(2)占用3个字节,精确到0.01秒;最小值时间放在最大值时间之后,最小值时间存储的起始位置=21+3*最大值个数。

临时统计表中的Double类型存入StatDouble表,int类型存入StatInt表。

表5临时统计表的数据结构

表6统计表的数据结构

本发明的统计表的数据结构如表6所示。

统计表保存最终的统计数据,一个变量一天24小时的统计数据组成一个二进制数据块,保存为1行。用变量ID和统计日期statDate标识,统计表有3个字段:ID(shortint类型)、statDate(date类型)、Value(varbinary类型)。

其中,不同类型的数据对应不同的统计表:StatBool存bool数据的统计值,StatDouble存double数据的统计值,StatInt存int型数据的统计值。

Value/varbinary字段的前48个字节固定保存0~23点共24个小时的统计数据的索引。每个索引用2个字节的shortint表示统计数据的结束位置。一天24小时中有几个小时可能没有数据,没有数据的那一小时的索引依然存在,保存的结束位置和前一个索引的值相同。

从第49个字节起存放每个小时的统计数据,统计数据来自临时统计表的对应时段的二进制数据,直接引用即可。记录下每个小时的统计数据的二进制数据的长度,将每个小时的二进制数据按照时间顺序连接成1个二进制数据。把每个小时的二进制数据在的结束位置保存在对应的索引中。

在数据恢复时,数据可以转换成对应的数据类型,二进制数据中的时间恢复成一个time(2)类型的时间,与数据的统计日期statDate叠加在一起,得到一个完整的时间。

Bool值对应StatBool统计表的数据结构如表7所示。

将Bool值对应到StatBool统计表的方法如下所示。

Bool统计表保存Bool类型最终的统计数据。一个Bool变量一天24小时的统计数据组成一个二进制数据块,保存为1行。用变量ID和统计日期statDate标识。统计表有3个字段:ID(shortint类型)、statDate(date类型)、Value(varbinary类型)。

Value/varbinary字段的前48个字节固定保存0~23点共24个小时的统计数据的索引。每个索引用2个字节的shortint表示统计数据的结束位置。一天24小时中有几个小时可能没有数据,没有数据的那一小时的索引依然存在,保存的结束位置和前一个索引的值相同。

从第49个字节起存放每个小时的统计数据,统计数据来自临时统计表。临时统计表的变化次数、占空比转化为二进制数据。每个小时的统计数据的二进制数据的长度固定8(4+4)个字节,将每个小时的二进制数据按照时间顺序连接成1个二进制数据,把每个小时的二进制数据在的结束位置保存在对应的索引中;

在数据恢复时,数据可以转换成对应的数据类型。二进制数据中,没有时间,二进制的索引顺序代表统计的小时数,与数据的统计日期statDate叠加在一起,得到一个完整的时间。

优选的,本发明的存储机构还包括备份信息表BackupInfo。备份信息表BackupInfo保持备份信息,包括备份文件的路径和备份的原始数据的时间范围。当数据维护时,要删除的数据比上次备份的EndTime新,就触发一次新的数据备份。即本发明的备份的数据不会重叠。

实施例2

本实施例提供一种历史记录存储的电子设备以及存储介质。

一种历史记录存储电子设备,包括存储器和处理器,所述存储器与处理器连接。存储器,用于存储数据。处理器,用于根据本发明的历史记录存储方法处理数据。

一种历史记录存储介质,所述存储介质上存储有数据存储程序,所述数据处理程序被处理器执行时实现本发明的历史记录存储方法。

需要注意的是,上述具体实施例是示例性的,本领域技术人员可以在本发明公开内容的启发下想出各种解决方案,而这些解决方案也都属于本发明的公开范围并落入本发明的保护范围之内。本领域技术人员应该明白,本发明说明书及其附图均为说明性而并非构成对权利要求的限制。本发明的保护范围由权利要求及其等同物限定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号