基于实时数据库的有损线性压缩算法研究与改进 (1)
- 格式:pdf
- 大小:325.26 KB
- 文档页数:6
第32卷第7期2011年7月微计算机应用MICROCOMPUTERAPPLICATIONSVol.32No.7Jul.2011
基于实时数据库的有损线性压缩算法研究与改进王君(金陵科技学院南京211169)摘要:首先对常见的实时数据库数据有损线性压缩算法原理进行了讨论,然后提出了一种新的压缩算法———“双旋转门”压缩算法,最后对各个算法的数据压缩能力进行了详细的对比,结果表时该算法与国外实时数据库的专利算法在数据压缩能力达到同样水准。关键词:有损压缩旋转门实时数据库压缩率
ResearchandImprovementofLossLinearCompressionAlgorithmsintheReal-timeDatabase
WANGJun(JinlingInstituteofTechnology,Nanjing,211169,China)Abstract:First,somefamiliarlosslinearcompressionalgorithmsinthereal-timedatabasearediscussedinthispaper.Thenanewcompressionalgorithmnamed‘doubleswingdoors’isbroughtforth.Thecompressionperformanceofallalgorithmsiscomparedatlast,andtheresultisthatthenewalgorithmandproprietaryalgorithmsofforeignreal-timedatabasesachievethesamelevelindatacom-pressionperformance.Keywords:losscompression,swingdoor,real-timedatabase,compressionratio
当前流程行业中需要在生产过程中采集数据点数通常有几千到十几万,数据采集间隔要达到秒级,数据量很大。这些信息对管理层及时了解生产现场的实时情况、实现上层信息系统与底层控制系统的集成都具有重要意义[1]。传统关系型数据库管理生产过程数据还存在占用空间大、存取速度慢等不足[2]。如何能
在如此多的信息中保留有用的数据,一直困扰着我们,直到实时数据库技术的出现。实时数据库RTDB(Re-al-TimeDataBase)系统是数据库与实时系统相结合的一种新型数据库,RTDB系统与普通商用数据库系统
不同[3,4]。其一个重要特性就是实时性,包括数据实时性和事务实时性。电厂厂级实时监控系统中,RTDB
起到了“承上启下”的核心作用[5,6]。而压缩技术又是RTDB的关键技术之一。
当前实时数据库系统用到的压缩算法分为三类:有损压缩、无损压缩以及结合有损和无损压缩的二级压缩。无损压缩以eDNA实时数据库为代表,采用霍夫曼压缩算法,PC机上常用的压缩软件,如WinRAR,也采用无损压缩算法。而有损压缩,在一定的误差要求范围内仅保存少量点,其他时刻的值可通过线性插值算法快速还原,代表就是PI的旋转门算法。本文仅对常见实时数据库的有损线性压缩算法进行研究,并提出一种不同的算法。
1有损线性压缩算法讨论
典型的有损线性压缩算法,包括工业标准的死区压缩算法、PI的旋转门算法,后文对其进行说明。由于本文于2011-05-05收到。微计算机应用2011年PI旋转门算法的专利限制,其他的实时数据库厂家也提出了自己的旋转门算法。1.1工业标准死区压缩算法
死区压缩算法的原理是:对于时间序列的变量数据,规定好变量的变化限值(即死区,或称为阈值),若当前数据与上一个保存的数据的偏差超过了规定的死区,那么就保存当前数据,否则丢弃,如图1所示。这种算法对来自时间序列的连续数据,仅需与前一个保存的数据进行比较即可确定本数据是否需要保存,因此易于理解和实现,大部分采用有损压缩的实时数据库都提供了这种压缩方式。
图1死区压缩算法原理死区算法可以较好的过滤掉噪音,适用于数值稳定的测点,但对于线性漂移(即沿斜线变化)的数据,不能很好的进行压缩,如图2所示。此时,若采用死区压缩算法,那么A、B、C、D都需要保存,实际上仅保存A和D即可,B和C通过线性插值就可以还原。这种情况下,就需要采用一些斜率变化的压缩方式,对沿斜线进行变化的数据进行压缩。
图2死区不适宜处理沿斜线变化数据示意图1.2PI的旋转门算法
[7]
PI实时数据库的旋转门压缩算法,是针对慢变化过程数据的压缩算法,实现简单,涉及的乘除法较少,压缩效率较高,为PI的推广赢得了偌大的名声,其实现原理如图3所示。A点为要保存的点,通过A点和后续点画平行四边形,其竖直方向的边长A1A2为2倍的压缩精度,也就是图上的旋转门范围。当平行四边形能够包围A点与当前点之间的所有点时,继续画平行四边形,如图中的平行四边形3包围了B点和C点;当平行四边形不能包围所有点时,如图中的A点和E点画出的平行四边形4,那么其前一个点即D点需要进行保存;然后从D点开始继续画平行四边形。PI的旋转门算法具体实现时,仅需要计算A1与后续点的最大斜率、A2与后续点的最小斜率以及A点
与当前点的斜率,若这个斜率超出了最大和最小斜率范围,那么当前点的前一个点就需要保存。因此,这个算法计算量少,中间需保存的变量也少,测点值解压缩还原后的最大误差为压缩精度,也即旋转门范围的一半。PI的旋转门算法,是一种优秀的压缩算法,但由于OSI申请了算法专利,因此其他的实时数据库厂家为了不侵犯专利,提出了他们自己的旋转门压缩算法。
417期王君:基于实时数据库的有损线性压缩算法研究与改进
图3PI旋转门算法原理图1.3GEProficyHistorian的旋转门算法
[8]
GEProficyHistorian实时数据库(后文简称PH)也采用了一种旋转门压缩算法,其原理如图4所示。每
一个数据点及其上下允许误差(即压缩精度)组成一条线段,即图中带有箭头的竖直线段。A点是一个要保存的数值,从A点向后续数据点画线,若这条线与这两点间的所有竖直线段都相交,那么继续向下一个数据点划线,图中AD连线与B、C的竖直线段都相交;若连线与这两点间的一个或多个竖直线段没有交点,那么当前点的前一个测点需要进行保存,如图中AE连线,与C、D的竖直线段没有交点,因此,D点需要进行保存,再从D点开始向后续点划线。
图4PH旋转门算法原理图GE旋转门算法具体实现时,需要计算并临时保存上一个保存点(图中A点)与后续点的上限连线中斜
率的最小值,以及与下限连线中斜率的最大值,然后计算A点与当前点的斜率,若这个斜率落在上限斜率的最小值和下限斜率最大值之间时,那么继续计算下一个点;否则当前点的前一个点需要进行保存。与PI的旋转门算法相比,这种算法计算量相当,解压缩还原后测点的精度也一致,即旋转门范围的一半。1.4爱康诺HyperHistorian的旋转门算法
[9]
爱康诺(ICONICS)公司的HyperHistorian实时历史数据库(后文简称HH)也采用了一种旋转门算法。如图5所示,旋转门压缩算法描述如下:A点为保存的点,与其后续点B,根据一定的误差范围,确定2条线A1B和A2B,与A1A2组成旋转门;然后根据A、C点再画2条线A1C和A2C,由于B点在这两条线内(包括
线上),所以B点丢弃,新的旋转门为A1C、A2C和A1A2组成;然后由A、D点画出2条线A1D和A2D,这时,A1C、A2D和A1A2组成新的旋转门,此时C点位于旋转门内,所以C点也丢弃;然后再由A、E点确定两条线A1E和A2E,由于E点位于旋转门外(E点在图5中虚线下方),故保存其前一个点D,然后由D、E开始构造新的旋转门。
51微计算机应用2011年图5HH旋转门算法原理图需要注意的是,这种算法解压缩还原后测点值的精度为图中的整个旋转门范围,而不是旋转门范围的一半。1.5改进的双旋转门算法
上文提到的旋转门算法,都比较容易实现,所以国内一些实时数据库厂家照搬这些旋转门算法,但是无意中会侵犯其他厂家的专利,比如PI就为其旋转门算法申请了专利。本文公布了另一种旋转门算法,可以称其为“双旋转门”算法,压缩率与上面的相当,可以供国内实时数据库厂家参考借鉴。
图6双旋转门算法原理图如图6所示,分别从A1A和AA2开始画两个平行四边形,尽可能包容其后所有点,当达到某个点(如E点)时,两个平行四边形都不能包含这个点,那么这个点的前一个点(图中D点)需要进行保存,然后从新的保存点开始继续画双旋转门。由图6可见,测点的误差在旋转门范围内。由于两个旋转门的竖直边都等于数值的压缩精度,因此数据解压缩还原后,精度可保证在规定的压缩精度内。具体算法与上面的算法类似,可根据比较斜率来实现,涉及的乘除法也与上面提到的其他算法相当。
2算法比较
这些不同算法,其数据的压缩能力是存在差异的,一般根据压缩率[10](或称为压缩比)来进行度量。本文中的模拟数据采用正弦波,每秒1个数据,1小时内的数据(数据总数为3601个),对比不同周期和不同数据精度下这些算法的压缩率。
61