一种历史数据库的压缩方法

文档序号:10655415阅读:652来源:国知局
一种历史数据库的压缩方法【专利摘要】本发明公开了一种历史数据库的压缩方法,其特征在于,包括如下步骤:步骤1、将行式数据库转化为列式数据库,具体为:1a)分表;1b)拼装;步骤2、进行分段线性拟合有损压缩;步骤3、整理数据文件;步骤4、进行数据文件的无损压缩并整理索引,组成完整的两级压缩后的列式数据库。针对现有数据库的特点,分两级压缩,先采取分段线性拟合的有损压缩的方式,后采取数字字典的无损压缩方式,将数据压缩并节省所占用的空间,以满足现代综合监控系统对保存的历史数据的时间长度越来越久的要求,并将误差保持在一定的误差精度范围内。【专利说明】一种历史数据库的压缩方法
技术领域
[0001]本发明涉及一种历史数据库的压缩方法。【
背景技术
】[0002]现代综合监控系统的数据测点的并发量规模越来越大,数据采集的频率要求越来越高,在很多应用场景需要存储海量并发、高频捕捉的时序数据,每天需要存储的原始数据规模可以达到上百G,故需要对数据进行压缩存储。[0003]系统对历史数据的压缩一般采用有损数据压缩算法和无损压缩算法。通用的有损数据压缩算法分为3类:信号变换法、矢量量化法、以及分段线性法。分段线性法实现简单,比较适合历史数据的压缩,主要有:矩形波串法(boxcar,BC)和向后倾斜(backwards1pe,DS)算法、旋转门(swingdoortrending,SDT)。而通用的无损压缩算法有霍夫曼(Huffman)编码、行程编码和字典编码等压缩算法。[0004]目前,综合监控系统的实时数据采集与缓存都是行式的,并且历史数据库的设计也主要是行式数据库,现在一般的历史数据库的设计都含有损压缩和无损压缩两级数据压缩,常见的是旋转门有损压缩+字典编码无损压缩。其存在下述不足:[0005]第一、行式数据库的压缩效率不高,越来越难以适应和满足综合监控系统对历史数据库数据压缩存储的需求。[0006]第二、旋转门压缩算法作为线性拟合的一种算法,具有效率高、压缩比高、误差可控制的优点。但是该算法结构还是相对有些复杂,代码实现难度比最小二乘法拟合的代码实现难度要小,但是还是有一定难度。【
发明内容】[0007]针对上述问题,本发明提供一种历史数据库的压缩方法,针对现有数据库的特点,分两级压缩,先采取分段线性拟合的有损压缩的方式,后采取数字字典的无损压缩方式,将数据压缩并节省所占用的空间,以满足现代综合监控系统对保存的历史数据的时间长度越来越久的要求,并将误差保持在一定的误差精度范围内。[0008]为实现上述技术目的,达到上述技术效果,本发明通过以下技术方案实现:[0009]—种历史数据库的压缩方法,其特征在于,包括如下步骤:[0010]步骤1、将行式数据库转化为列式数据库,具体为:[0011]la)分表:将原有包含若干个测点数据的一个数据库表,分成若干个数据库表,其中,每个数据库表中仅含有单个测点的数据,且数据项是按照原有时间顺序排列;[0012]Ib)拼装:假设分表后获得M行数据,每行数据具有W个字段,则将M行数据按照次序整合为一行,其中,先按照次序存储M行数据的第一个字段,最后按照次序存储M行数据的第W个字段,获得列式数据库;[0013]步骤2、进行分段线性拟合有损压缩;[0014]步骤3、整理数据文件保持各个列式数据文件的一致性;[0015]步骤4、进行数据文件的无损压缩并整理索引,组成完整的两级压缩后的列式数据库。[0016]优选,步骤2中,设时间片为Tp,对应的数据片为Pl,Ρ2...Ρη,数据片的起止两点为Pl和Pn,误差上限为δ,则分段线性拟合的过程是采用四点三段或三点两段分割法来分割并拟合Pl,Ρ2...Ρη组成数据片段PS,具体为:[0017]Ia)四点三段分割法:将数据片的起止两点Pl与Pn连接成线段L后,L左右两侧的误差最大点分别为Pj,Pk两点,如果Pj和Pk到L的距离误差ΔPj和ΔPk中至少有一个超过误差上限6,则根据?1乃,?1^,?11四点将数据分割成?51=?卜中]_少52=?}.种,?53=?1^中11三个子数据片段;[0018]如果Pj和Pk到L的距离误差均未超过误差上限δ,则线段L为Pl-Pn的拟合线段;[0019]Ib)若所有数据点均在L的一侧,则为三点两段分割法:[0020]将数据片的起止两点Pl与Pn连接成线段L后,所有数据点均在L的一侧且误差最大点为Pj点,若Pj到L的距离误差ΔPj超过误差上限δ,则根据Pl,Pj,Pn三点将数据分割成PSl=Pl."Pj,PS2=Pj-Pn两个子数据片段;[0021]如果Pj到L的距离误差未超过误差上限δ,则线段L为Pl-Pn的拟合线段;[0022]2)将分割好的子数据片段PSl,PS2,PS3,按照步骤Ia)或Ib)的方法递归继续分割并作线段拟合,直至各个子数据片段均完成线段拟合;[0023]3)将时间片Tp按上述分割方法分割的各级子数据片段完成的拟合线段按时间顺序拼接成拟合折线,与下一个时间片Tp’用同样方法拟合的折线按照时间顺序拼接,依次类推,实现单测点数据的全时域的分段线性压缩。[0024]优选,步骤3中,将经过分段线性拟合压缩的数据按照长字串的形式存入数据库的同一条记录的相应字段中,如果字段的数据类型为整型或浮点型数值类型,则将该字段拆分为对应的基准值、偏移值步长与偏移值文件三个字段,其中:[0025]基准值字段设定为原分表中一个初始值或者一个计算平均值的标准值;[0026]偏移值步长字段中保存数据的要求的精度并使得计算出的偏移值均为整型;[0027]该文件的文件名在字段偏移值文件中保存。[0028]本发明的有益效果是:[0029]本发明的两级压缩方法,分段线性拟合压缩是有损压缩,该压缩方法采用分治法的原理,该原理简单易操作,通过递归的形式可以层层分解为子问题便于理解,代码实现起来也更加方便。列式数据压缩,将文件索引与数据文件分离,追求同类数据压缩率的最大化。将数据压缩并节省所占用的空间,以满足现代综合监控系统对保存的历史数据的时间长度越来越久的要求,并将误差保持在一定的误差精度范围内。【附图说明】[0030]图1是本发明一种历史数据库的压缩方法的流程图;[0031]图2是本发明四点三段及判别方法的示意图;[0032]图3是本发明列式数据库索引表字段的示意图。【具体实施方式】[0033]下面结合附图和具体的实施例对本发明技术方案作进一步的详细描述,以使本领域的技术人员可以更好的理解本发明并能予以实施,但所举实施例不作为对本发明的限定。[0034]—种历史数据库的压缩方法,如图1所示,包括如下步骤:[0035]步骤1、将行式数据库转化为列式数据库,数据库行转列的方法各有不同,但是基本的思想是将原有的行式数据库看作一个M行N列的表格,将此表格旋转90度做行列的转换,形成一个N行M列的表格。然而,实际转换成适合压缩的列式数据库时,操作上有一些问题,主要问题是分表和一般数据库的列数的限制;[0036]Ia)分表:将原有包含若干个测点数据的一个数据库表(table),分成若干个数据库表,其中,每个数据库表中仅含有单个测点的数据,且数据项是按照原有时间顺序排列。[0037]可以将单测点的数据分表按照时间间隔再次分表,最后的每一个分表仅包含单个测点的一个确定时间片段的顺序数据,而准确的测点ID与时间片段的信息将在该数据库分表的表名中按固定格式体现。[0038]Ib)拼装:假设分表后获得M行数据,每行数据具有W个字段,则将M行数据按照次序整合为一行,其中,先按照次序存储M行数据的第一个字段,最后按照次序存储M行数据的第W个字段,获得列式数据库。[0039]突破一般数据库列数的限制的方法,分表后的M行数据先按照次序整合拼装到一行,如分表中含有M行和三个字段,这三个字段分别是“时间戳”、“数值”、“数据品质”字段:则先按次序存储M个“时间戳”字段,“时间戳”字段后按次序存储M个“数值”字段,“数值”字段后按次序存储M个“数据品质”等字段内容。[0040]将所有数据按次序分别“拼装”到一个长的字串中,以TEXT或者BLOG格式存入一个值字段,而M个长整数也以字串形式。拼装的方式可以是直接拼装的方式完成,也可以通过XML文件“转拼装”方式或其他的方式实现。[0041]步骤2、进行分段线性拟合有损压缩。[0042]优选,步骤2中,设时间片为Tp,对应的数据片为Pl,Ρ2...Ρη,数据片的起止两点为Pl和Ρη,误差上限为δ。时间片(Tp)的选择可以是根据固定时间长度(如若干分钟、若干小时或若干天的数据)选择,也可以是根据固定数据的数量(如固定若干数据点相对应的时间片)选择。[0043]拟合的线段应当满足条件:当且仅当若干时间点的数据相对拟合线段的误差在给定的误差上限S范围以内时,这些若干时间点的数据拟合成一条线段。这条线段的时间范围,就是这些数据段(Td)的起止时间,根据数据段(Td)的起止时间可得拟合线段的两个端点。[0044]如图2所示,分段线性拟合的过程是采用四点三段或三点两段分割法来分割并拟合Pl,Ρ2...Ρη组成数据片段PS,具体为:[0045]Ia)四点三段分割法:将数据片的起止两点Pl与Pn连接成线段L后,L左右两侧的误差最大点分别为Pj,Pk两点,如果Pj和Pk到L的距离误差ΔPj和ΔPk中至少有一个超过误差上限WAΡ_].>δ且ΔPkM,或者ΔPjM且ΡΚδ,或者ΔΡ_].〈δ且ΔPkM),则根据Pl,Pj,Pk,Pn四点将数据分割成PSl=Pl-Pj,PS2=Pj…Pk,PS3=Pk…Pn三个子数据片段;[0046]如果Pj和Pk到L的距离误差均未超过误差上限δ,则线段L为Pl-Pn的拟合线段;[0047]lb)若所有数据点均在L的一侧(S卩Pj和Pk中的一个不存在),则为三点两段分割法:[0048]将数据片的起止两点Pl与Pn连接成线段L后,所有数据点均在L的一侧且误差最大点为Pj点,若Pj到L的距离误差ΔPj超过误差上限δ,则根据Pl,Pj,Pn三点将数据分割成PSl=Pl."Pj,PS2=Pj-Pn两个子数据片段;[0049]如果Pj到L的距离误差未超过误差上限δ,则线段L为Pl-Pn的拟合线段;[0050]判断Pj和Pk是否存在的方法:使用“到角”的概念,即L到L’(L’是Pl与Pj或Pk的连线)的逆时针夹角α,计算到角α正切值tana,如果tana值为正,则Pi在线L的左侧,如果tana值为负,则Pi在线L的右侧。tana值可以根据L与L’的斜率计算而得。如果线L的斜率为K1,线L’的斜率为K2,则根据到角公式tana=(K2-Kl)/(l+Kl*K2)计算而得。[0051]2)将分割好的子数据片段PSl,PS2,PS3,按照步骤Ia)或Ib)的方法递归继续分割并作线段拟合,直至各个子数据片段均完成线段拟合;[0052]3)将时间片Tp按上述分割方法分割的各级子数据片段完成的拟合线段按时间顺序拼接成拟合折线,与下一个时间片Tp’用同样方法拟合的折线按照时间顺序拼接,依次类推,实现单测点数据的全时域的分段线性压缩。针对不同测点数据,用同样的方法压缩,可将数据库的所有测点的数据压缩。[0053]将特定测点的一个时间片Tp内的数据取出做本分段线性拟合,若干个拟合线段连接实现对时间片(Tp)的线性拟合,且保证该时间片内的所有数据到线性拟合的折线的距离误差均不超过误差上限S。[0054]步骤3、整理数据文件保持各个列式数据文件的一致性:采用基准值与偏移量重新组织数据,并将基准值与偏移单位作为索引的一部分保存,同时将偏移值保存在列式数据文件中。这样,可以保持列式数据库的数据简洁,提高下一步无损压缩的效率。另一方面,由于上一步的分段线性拟合中剔除了原始数据中的若干数据,则需将所有相关的列式数据文件(列式时间戳偏移文件、列式数值偏移文件)中的相关数据剔除,保持数据的一致性。[0055]分段线性拟合完成后的数据需要采用基准+偏移的方式,计算组织成为新的以整型为主的数据文件,以便于对数据文件进行无损压缩。将经过分段线性拟合压缩的数据按照长字串的形式存入数据库的同一条记录的相应字段中。[0056]如果字段“数值”中的数据类型为整型,浮点型等数值类型,则将字段“数值”拆分成对应的“基准值”,“偏移值步长”与“偏移值文件”三个字段,“基准值”字段可设定为原分表中一个初始值或者一个计算平均值等合理的标准值,字段“偏移值步长”中保存数据的要求的精度并确保计算出的“偏移值”均为整型,将原分表中“数值”字段中的所有数据(M’个数据)按照“基准值”和“偏移值步长”计算成相应的M,个“偏移值”数据(整型),将每个“偏移值”按照4字节整型的格式依次存入二进制VDAT(数值数据)文件,该文件的文件名应在字段“偏移值文件”中保存;[0057]比如,将经过分段线性拟合压缩的数据按照长字串的形式存入上述“时间戳”、“数值”、“数据品质”等数据库的同一条记录的相应字段中,同时,MRN列的行式数据库的分表,经过上述压缩后成为一条数据库记录,“时间戳”、“数值”、“数据品质”等字段中存有M’个数值(M’=经分段线性压缩后的数据个数),可以将这些字段内的内容转存成相应的DAT(数据)文件,以便于对这些DAT(数据)文件使用无损压缩方法进行再次压缩。[0058]如图3所示,字段“时间戳”,拆分成“基准时间”、“偏移时间单位”和“偏移时间文件”三个字段,“基准时间”字段存原分表中的数据初始时间,字段“偏移时间单位”中可选择合适时间单位(毫秒,秒,分钟等),将原分表中“时间戳”字段中的所有数据(M’个数据)按照“基准时间”和“偏移时间单位”计算成相应的M’个“偏移时间”数据,将每个“偏移时间”按照4字节整型格式依次存入二进制TSDAT(时间戳数据)文件,该文件的文件名应在字段“偏移时间文件”中保存。[0059]同时,“数据品质”等其他字段中保存的M’个数据,根据需要按照占用固定比特数或固定字节数的格式依次存入相应的DAT(数据)文件,并且,该文件的文件名应在相应的字段中保存。[0060]将分表中转存为数据文件的字段扩充为“基准”、“偏移单位”和“偏移量文件”等字段,将整理好的新数据文件的地址存入“偏移量文件”字段;对“时间戳”字段也扩充为“基准时间”、“时间偏移单位”和“时间偏移量文件”等字段,将时间偏移数据文件的地址存入“时间偏移量文件”字段。[0061]步骤4、进行数据文件的无损压缩并整理索引,组成完整的两级压缩后的列式数据库:对整理完成的各个数据文件进行无损压缩,可采用任何数据编码算法(如LZ系列字典编码算法,HufTmann编码算法或行程编码算法等)对其进行压缩。[0062]由于M行N列的行式数据库的分表,经过分段线性拟合压缩后成为一条数据库记录,该条记录可以视为组成列式数据库的DAT(数据)文件的索引,将所有分表中经过分段线性拟合压缩后的记录,全部集中在一个完整的列式数据库索引表中,该索引表的字段,除了包含原始行式数据库表的“测点ID”、“测点名称”等关于测点基本信息的字段以外,还包含“时间戳”、“数值”或“数据品质”等字段拆分而得的若干字段,此外还需要增加“开始时间”与“结束时间”两个字段,如图3所示。[0063]所有DAT(数据)文件,以及整理完成的索引表,组成完整的两级压缩的列式数据库。[0064]本发明的两级压缩方法,分段线性拟合压缩是有损压缩,该压缩方法采用分治法的原理,该原理简单易操作,通过递归的形式可以层层分解为子问题便于理解,代码实现起来也更加方便。列式数据压缩,将文件索引与数据文件分离,追求同类数据压缩率的最大化。将数据压缩并节省所占用的空间,以满足现代综合监控系统对保存的历史数据的时间长度越来越久的要求,并将误差保持在一定的误差精度范围内。[0065]本发明中的“四点三段”(或“三点两段”)分段线性拟合的方法采用递归分解问题的办法,无论是在算法思想上还是算法结构上都还要简单,代码实现的难度更小,效率上与旋转门算法相比在总体上看处于相当水平。[0066]以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或者等效流程变换,或者直接或间接运用在其他相关的
技术领域
,均同理包括在本发明的专利保护范围内。【主权项】1.一种历史数据库的压缩方法,其特征在于,包括如下步骤:步骤1、将行式数据库转化为列式数据库,具体为:Ia)分表:将原有包含若干个测点数据的一个数据库表,分成若干个数据库表,其中,每个数据库表中仅含有单个测点的数据,且数据项是按照原有时间顺序排列;Ib)拼装:假设分表后获得M行数据,每行数据具有W个字段,则将M行数据按照次序整合为一行,其中,先按照次序存储M行数据的第一个字段,最后按照次序存储M行数据的第W个字段,获得列式数据库;步骤2、进行分段线性拟合有损压缩;步骤3、整理数据文件保持各个列式数据文件的一致性;步骤4、进行数据文件的无损压缩并整理索引,组成完整的两级压缩后的列式数据库。2.根据权利要求1所述的一种历史数据库的压缩方法,其特征在于,步骤2中,设时间片为下?,对应的数据片为?1少2"中11,数据片的起止两点为?1和?11,误差上限为3,则分段线性拟合的过程是采用四点三段或三点两段分割法来分割并拟合Pl,P2…Pn组成数据片段PS,具体为:Ia)四点三段分割法:将数据片的起止两点Pl与Pn连接成线段L后,L左右两侧的误差最大点分别为Pj,Pk两点,如果Pj和Pk到L的距离误差ΔPj和ΔPk中至少有一个超过误差上限δ,则根据Pl,Pj,Pk,Pn四点将数据分割成==数据片段;如果Pj和Pk到L的距离误差均未超过误差上限δ,则线段L为Pl...Ρη的拟合线段;Ib)若所有数据点均在L的一侧,则为三点两段分割法:将数据片的起止两点Pl与Pn连接成线段L后,所有数据点均在L的一侧且误差最大点为Pj点,若Pj到L的距离误差ΔPj超过误差上限δ,则根据Pl,Pj,Ρη三点将数据分割成PSl=ΡΙ..Ρ」,Ρ32=Ρ」...Ρη两个子数据片段;如果Pj到L的距离误差未超过误差上限δ,则线段L为Pl...Ρη的拟合线段;2)将分割好的子数据片段PSl,PS2,PS3,按照步骤Ia)或Ib)的方法递归继续分割并作线段拟合,直至各个子数据片段均完成线段拟合;3)将时间片Tp按上述分割方法分割的各级子数据片段完成的拟合线段按时间顺序拼接成拟合折线,与下一个时间片Tp’用同样方法拟合的折线按照时间顺序拼接,依次类推,实现单测点数据的全时域的分段线性压缩。3.根据权利要求1所述的一种历史数据库的压缩方法,其特征在于,步骤3中,将经过分段线性拟合压缩的数据按照长字串的形式存入数据库的同一条记录的相应字段中,如果字段的数据类型为整型或浮点型数值类型,则将该字段拆分为对应的基准值、偏移值步长与偏移值文件三个字段,其中:基准值字段设定为原分表中一个初始值或者一个计算平均值的标准值;偏移值步长字段中保存数据的要求的精度并使得计算出的偏移值均为整型;该文件的文件名在字段偏移值文件中保存。4.根据权利要求1所述的一种历史数据库的压缩方法,其特征在于,步骤4中,对整理完成的各个数据文件进行无损压缩,其中,索引表的字段增加“开始时间”与“结束时间”两个字段。5.根据权利要求4所述的一种历史数据库的压缩方法,其特征在于,无损压缩采用LZ系列字典编码算法。6.根据权利要求4所述的一种历史数据库的压缩方法,其特征在于,无损压缩采用Huffmann编码算法或行程编码算法。【文档编号】G06F17/30GK106021579SQ201610382696【公开日】2016年10月12日【申请日】2016年6月1日【发明人】张迎,金舒,薛亮,周金国,董胜刚,戴宏斌,白忠贺,杨荣昌【申请人】南京国电南自美卓控制系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1