一种面向流式时序数据的数据压缩方法与流程

文档序号:17889673发布日期:2019-06-13 15:29阅读:219来源:国知局
一种面向流式时序数据的数据压缩方法与流程
本发明涉及数据压缩领域,主要涉及到一种面向流式时序数据的数据压缩方法。
背景技术
:时序数据是一种十分常见且存在特定规律的数据,其代表一系列时间点上的观测值按等时间间隔获取所得的数据集合,例如pm2.5的实时测量浓度、股票的实时价格或生产车间的温度传感器测量值等等,即时序数据描述了被测量主体在某一时间范围内的每个时间点上的测量值。近年来,伴随着物联网、大数据和人工智能技术的发展,时序数据的规模呈现一个爆发式的增长态势,以百度无人车为例,其每辆车每天采集到的数据规模便可达8tb。为此,相关企业需要不断添置架设大量的存储设备来应对不断增长的数据存储需求。然而,更大、更多的存储容量会占用更大的系统支出和能耗资源,带来巨大的成本负担。因此,如何面向时序数据的特点进行有效的压缩与封装便成为当前时序数据库开发中一个不容忽视的难题与挑战。从建模的角度考虑,时序数据主要包含三个重要部分,分别为主体、时间戳和测量值。由于被测量主体的信息在短时间内不会发生改变,所以面向时序数据的压缩方案主要针对时间戳数据和相应的测量值数据。其中,时间戳数据一般作为数据存储的主键,其采集周期在大多数情况下具有一个固定的值,虽然接收到的数据间隔往往受传输介质的影响,但其仍在一个恒定的值附近上下波动;观测值数据是在一定时间间隔内连续采集,其前后的关联程度必定较离散数据更为紧密,这意味着其变化通常会更小。现有技术的数据压缩方式可以大致分为无损压缩和有损压缩两大类。其中无损压缩方法中常用的zlib或lz系列算法直接对原始数据进行压缩,其实现较为简单,但由于其未能利用时序数据的特点,导致其针对时序数据的压缩率不高,无法满足相应的存储需求;有损压缩方式中常用的旋转门算法通过设置“死区值”和“死区时间”属性来实现数据压缩,虽然其压缩率较高,但由于在有些情况下其对精度的损失会对原有的信息存储造成破坏,所以也不适用于较高精度的时序数据压缩。此外,现有技术在实现时序数据的持久化存储时,单单数据压缩并不足以确保数据存储的一致性等要求。同时,压缩参数也需合理处置,以满足正常的数据检索、读取需求。时序数据处理技术主要用于处理秒级、毫秒级等高频数据,这些类型的数据往往在短时间内就可以产生极大的数据量,因此时序数据的存储需要在满足相应的精度要求的同时,最大化利用磁盘空间,而现有技术的压缩算法在上述方面的实现上效果并不理想,技术实现要素:针对以上问题,本发明提出了一种面向流式时序数据的数据封装方法,分别对时间戳数据和观测值数据进行两种不同的压缩方式,以及相应的数据块封装格式。为了实现上述的发明目的,本发明包括以下步骤:步骤1,数据清洗,所述数据清洗包括数据的缺失值处理、异常值处理,再对数据进行类型识别,得到时间标记数据和观测值数据;步骤2,数据压缩,所述将封装后的时间标记数据进行时间戳压缩,将观测值数据进行观测值数据压缩;步骤3,所述时间戳数据压缩数据和所述观测值数据压缩数据进行可变长编码;步骤4,数据封装,所述封装是将数据按不同类型的数据列压缩存储在数据文件。本发明具有以下优势:压缩比高,压缩/解压缩速度快,数据精度高,数据一致性有保障,局部数据检索、读取无需解压全部数据块。附图说明图1为本发明的整体流程图;图2为存储的偏差值设置了可变长的编码方式;图3为观测值数据压缩的可变长编码;图4为数据文件封装结构图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。本发明包括以下步骤:步骤1,数据清洗,所述数据清洗包括数据的缺失值处理、异常值处理,再对数据进行类型识别,得到时间标记数据和观测值数据;步骤2,数据压缩,所述将封装后的时间标记数据进行时间戳压缩,将观测值数据进行观测值数据压缩;步骤3,所述时间戳数据压缩数据和所述观测值数据压缩数据进行可变长编码;步骤4,数据封装,所述封装是将数据按不同类型的数据列压缩存储在数据文件。本发明的整体压缩流程图1所示。在这一流程中,本发明首先对流式数据进行预处理,包括数据的缺失值处理、异常值处理和顺序调整等,从而确保其进入数据缓存区前变成按时间排序的完整数据;然后本发明按照相应的数据结构将其预存储到数据缓存中,待缓存区中的数据量达到预先设定的压缩阈值后,对数据缓存区进行只读锁定,再对数据进行类型识别和结构封装,将封装后的时间标记数据流入时间戳数据压缩装置,观测值数据流入观测值数据压缩装置;当数据从压缩装置中流出后再将其存储到相应的数据缓存区中等待上层模块的进一步处理。在步骤2中的时间戳压缩中,时间戳数据t0,t1,…,tn是一个单调递增的序列。由于数据采集源的时间间隔一般是固定的,ti-1与ti之间的差值也大致在这一恒定值附近上下波动,其偏差主要来源于数据在介质中的传输。因此,相对于记录整个的时间戳数据,仅仅保留其与根据固定差值计算得到的理论值间的偏差将会节省大量的存储空间。而由于并不是所有情况下本发明都能获得数据采集设备的时间间隔信息,为此本发明通过对所有的差值取平均的方式来填补固定差值这一信息缺口。如表1所示,本发明预先求取整个缓存块的平均时间差值,估计出其连续的采样间隔为1000ms。接下来本发明求取每个时间戳数据与理论时间戳数据间的差值,例如1537513051014的差值14便是通过实际数值(1537513051014)减去理论数值(1537513051000)得到。以这种方式计算出所有的差值数据后,本发明所需要存储的信息就从表1中第一列的时间数据变成了1537513050000、1000、14、2这一串数据。而为了进一步提升压缩的效果,降低差值的存储空间,本发明对存储的偏差值设置了可变长的编码方式如图2所示。可变长编码的具体方式为:步骤1,输入时间戳数据与编码的分组长度;步骤2计算时间戳数据的二进制编码;步骤3,判断所述二进制编码是否为分组长度的整数倍,如果是则依据分组长度对编码进行分割,如果否则对编码进行前置补位,然后再依据分组长度对编码进行分割;步骤4,判断分割片段是否为最后一组,如果是则跳转至步骤5,如果否,则将该片段的前置标志位设置为0,指向下一个前段,并继续重复步骤4;步骤5,将分割片段为最后一组的前置标志位设置为1;步骤6,输出时间戳数据的分组编码。具体实例如表一所示,在此处固定分组的参数l为3,即3bit一组的方式。以“14”为例,首先求得其二进制表示为01110(第一位为符号位),然后根据3bit一组的方式将其分段,不足3bit在前面补位,这样便得到了两组存储单元001和110。之后进入标志位的设置步骤,本发明以标志“1”来代表该组编码的尾部分组,即得到0001和1110。其中设置分组标志位的目的是为了能够清楚地判定所存储数值的完整区域,便于之后的解压缩。timestamp(ms)deltaofdelta(ms)sddcode1537513050000--15375130510141400011110153751305200221010表1该方法最后的压缩率为:其中len为相应数字的存储大小,f为时间戳压缩算法函数计算出的存储大小,l为固定编码的每个分组大小。作为传感器或其他设备采集的数据,与时间戳相对应的观测值也具有一定的连续性。然而,这种连续两个采样点之间的差值并不稳定,意味着取差值的方差将变得很大。因此,根据观测值的数据特征和相关的计算复杂度提出新的有损压缩算法。首先本发明求取观测值数据的二进制表示,然后根据其精度需要进行存储精度的缩减工作,这是基于ieee754中对64位浮点数的编码方式。根据其编码方式可以看到,仅仅使用其52位尾数编码的前半部分就可以满足大多数数据精度的需要,而越靠后的编码位对整体数值的精度影响越小,甚至可以忽略不计。为此,本发明进行相应的尾部置零,将对数值精度几乎没有影响的尾数编码位置为0:其中zero_num为在不影响存储精度的情况下尾数段置零的个数,n为想要保留的观测值数据精度(例如60.746888,n的值为6),而ldot为double类型尾数部分的个数,默认为52。之后本发明对处理后的二进制编码数据进行进一步压缩操作,通过计算其与上一条数据编码的异或值来存储相应的信息差。如表2所示为观测值数据压缩的loss&xor部分,double列为数据原始的二进制编码表示,lossdouble为进行尾部置零后的编码表示,而xorvalue则是与上一条数据的异或差值。其中当原数据为0时,本发明设置相应的标志位来进行标记,同时将xorvalue数据设置为0xffffffffffffffff来进行占位,同样在解压缩时也会在输出0后进行跳过处理,不进入异或操作流。srcdatadoublelossdoublexorvalue60.7468880x40445fbacb4289120x40445fbacb000000-60.7213920x40445c70c996b7670x40445c70c90000000x000003ca0200000060.7439360x40445f609dcf893f0x40445f609d0000000x000003105400000060.7439360x40445f609dcf893f0x40445f609d0000000x00.000000--0xffffffffffffffff表2在计算出数据的异或差值后,本发明又利用了特殊设计的可变长编码方式对异或差值进行处理如图3所示。所述处理的步骤为:步骤1,定义控制位编码,开始位置编码,有效长度编码;步骤2,判断该观测值是否为0,如果是,则跳转至步骤6,如果否,则跳转至步骤3;步骤3,将控制位编码首位设置为1,根据数据编码第一个1出现的位置计算开始位置编码,根据开始位置和最后一个1出现的位置计算有效位长度编码;步骤4,判断该观测值数据的开始位置编码是否与上一组数据的开始位置编码相同,如果是,则将控制位编码第二位设置为1,如果否,则将控制位第二位设置为0;步骤5,判断该观测值的有效长度编码是否与上一组数据的有效长度相同,如果是,则将控制位编码第三位设置为1,如果否,将控制位编码第三位设置为0;步骤6,输出控制位编码ctlbits,开始位置编码start,有效长度编码length。表3为一个具体实例的观测值数据压缩的可变长编码,其中ctlbits为整体的标志位,从0-2位分别标志原数据是否为0、第一个“1”的起始位置是否与上一条一致、有效位的长度是否与上一条一致;start指的是xor结果中第一个“1”的位置;length指的是有效位片段的长度,即第一个“1”与最后一个“1”中间的部分;而corepart则是有效位片段。表3存储在磁盘上的数据文件是持久数据的最终形式,如何以最佳方式保存数据也是必须考虑的内容。如图4所示为数据文件封装结构图,封装结构为四个部分:1)首先是文件头,其中主要包含了文件的识别信息、文件压缩算法、文件压缩参数、文件数据索引等内容,2)包含了数据的key值,即时间戳,为压缩后的二进制数据,3)包含了数据的value值,即观察值,为压缩后的二进制数据,4)包含了文件头等所有数据的校验值,确保文件封装数据的一致性、可靠性。本发明按不同类型的数据列将数据压缩存储在数据文件中,使数据的检索和查询变得更加容易。同时为了确保数据的一致性和安全性,本发明还为数据文件设计了相应的检查代码策略。由于时间序列数据是通过可变长度方法压缩的,因此最终数据文件也是可变长度的。此外,每个单独数据文件的文件头还包含部分索引信息来管理数据。最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1