APP下载

实时数据库中数据压缩算法的研究与实现

2016-05-30胥胜林

科技与企业 2016年6期
关键词:算法

胥胜林

【摘要】由于实时系统往往在短时间内产生大量数据,因此在实时数据库中要保存的数据量非常巨大,给数据的存储、传输、应用都造成了较大的困难。为了解决这一问题,将数据压缩技术引入实时数据库的数据处理过程,目的是为了提高数据库的容量,并保证数据使用的高效性。本文主要分析实时数据库的数据类型,有针对性地研究压缩方案,以提高数据压缩的效率。

【关键词】实时数据库;数据压缩;算法

应用于工业实时数据库的数据压缩算法要求达到两个方面的要求,一是较高的压缩比率,以满足海量数据存储的要求,二是较快的数据压缩和解压处理速度,以满足实时性的要求。目前在实时数据库的数据压缩算法中使用得较多的是基于有损压缩的算法,也就是通过减少采集数据点达到压缩的目的,人为导致数据的缺失,而且精度较低,压缩效果也有限,当数据变化较大时,则要在压缩之前对数据进行滤波处理,所以无法应用于对精度要求较高的工业生产领域。为了解决有损压缩方式存在的问题,可以采用无损数据压缩的算法对历史实时数据进行处理,并且根据不同实时数据的特征选择最为适合的压缩算法。

一、整体数据压缩方案设计

目前有很多实时数据库数据压缩的实施方案,一般情况下采用的是有损的旋转门算法,以及死区限值数据压缩算法,其特点是对实时数据进行处理的速度快,效率高,而且压缩的精度也在可接受范围内。但是对于高精度的工业控制领域,这类算法就不是很适用。造成目前工业实时数据压缩处理效果不尽如人意的原因还包括普通的方案并没有对工业数据库中的数据进行分类分析,而是采用同一种压缩算法对所有类型的数据进行处理。而不同压缩算法在对不同数据处理时表现出的性能是不同的。在实际的生产过程中,实时数据是将采样时间点上,每一个数据采集源上的时间数据、代码数据、数值型数据都发送到处理终端,等文件在缓存中积累到一定的大小后,由压缩模块负责对数据进行压缩和存档。由于上述三类数据的特点不同,不同类别的压缩算法对不同数据的处理效率也不同,所以,在工业实时数据压缩方案的设计中,必须要对数据的特点进行充分研究,选择适合的数据压缩算法,并且对算法进行一定的改进,使之能够具备更好的处理性能。同时,在方案设计时还需要考虑到数据解压的效率问题,在压缩时追求更高的压缩率,但是在对数据进行查询、统计、搜索等操作时,则需要对压缩数据进行解压处理后才能够实施,要提高查询的效率,就需要具有較高的压缩包解压效率。压缩和解压是一对矛盾的关系,所以必须要找到两者的平衡点。一般而言,数据越类似,其压缩的效率越高,而工业实时数据中的不同类别又有其自身的特点,所以在设计历史实时数据压缩方案时,首先对数据进行分类,然后分别采用不同的压缩方法进行处理。为了保证实时数据的精度,采用无损的通用压缩算法为基础,根据数据的特征进行选择和改进。针对于实时数据中的时间型数据和代码型数据,基于其一段时间内的重复率较高,所以采用RLE算法进行处理;对于浮点型数据利用改进的LZW算法进行处理,目的是提高其压缩率;对于布尔量数据,由于其自身占用的字节较少,只需要转换为比特位就可以实现压缩的目标;对于百分量型数据,主要是将LZ78算法与LZW算法相结合进行处理。

二、时间型数据的压缩算法设计

由于工业实时数据的采集是按周期完成的,所以时间型数据的特征是呈现出等差序列的排列方式,但这是理想情况,在实际的采集过程中,由于采集设备、通信线路等各方面因素的影响,有可能会出现1-2个毫秒的偏差,这对于以秒级作为周期的应用环境不会造成影响,即使是以毫秒级作为采集周期的应用,其影响也有限,所以在对时间型数据压缩处理中不考虑这一情况。另一种情况是出现漏点,这也是在实际的生产过程中不可避免的,对于这一情况的处理,一种可行的解决方案是人为地补充该点,并将该点的代码型数据或者浮点型数据设置为异常状态,仍然压缩到实时数据库中,在使用数据时不显示该点。但这一处理方式需要消耗一定的时间,而且也没有实际的意义,所以在本方案的设计中不考虑对这一情况的处理,实际上,漏点情况发生的概率很低。如果将时间型数据看成是等差序列,则只需要记录第一个点的时间值,后继的时间点都可以通过第一个点加上相应的时间周期得到,所以压缩处理过程中,将后一个时间数据减去前一个时间数据,得到一系列的差值,再进行压缩,由于是等差序列,所以差值相同,可采用对这一情况压缩性能最佳的RLE算法进行处理。在理想情况下,如果一个数据包单位内没有出现漏点的情况,则其压缩后只需要两个数据表示,而如果出现漏点的情况,则需要再增加两个数据,由于漏点情况极少出现,所以利用RLE算法对时间型数据处理可以达到极高的压缩效率。

三、代码型数据的压缩算法设计

代码型数据的特点是在一定的时间内不会发生改变,所以对它的压缩也采用RLE算法,而且相对于时间型数据,代码型数据不会出现偏差情况,也不需要进行预处理。在实际的工业实时数据采集环境中测试,采用RLE算法对代码型数据进行压缩,其压缩率可高达96%以上。

四、数值型数据的压缩算法设计

数值型数据是工业实时数据采集中的主要组成部分,也是数据压缩的难点,该类数据又可以分为布尔型数据、浮点型数据、百分量型数据三种,分别设计如下。

1、布尔型数据

该类型的数据只有两个值,非0即1,而在非经压缩的情况下,它需要占用一个字节,由于每一个比特位就可以有两种状态,所以不需要利用通用的无损压缩算法进行处理,只需要将布尔型数据按位设置,由于原本要用8个比特位表示的布尔值,现在只用1个比特位表示,所以这一处理方式可以使压缩率达到7/8。

2、百分量型数据

该类型的数据的特点是变化的幅度较小,用12位比特表示的百分型数据,相邻两个数据点之间的差值一般小于256,所以考虑对其相邻数据点的差值进行计算和压缩。所以选用LZW数据压缩算法,该算法压缩和解压的速度较快,满足实时数据库的应用需求;又考虑到百分量型数据主要是在数值上有差异,所以对传统的LZW算法进行改进,每一次读入的不是字节,而是数值,直接对差值进行压缩处理;又考虑到有可能出现的差值大于256的情况,所以结合LZ78数据压缩算法处理这种情况,将数值加入到字典中,并输出二元组。这一处理方式的优点在于:充分利用了LZW数据压缩算法运算时间短的优点,结合采用值压缩的处理方式,进一步提高了压缩效率;同时,通过引入LZ78算法,确保了一些意外数据值也可以得到处理,保证了实时数据的精度。

3、浮点型数据

工业实时数据中的浮点型数据一般用低精度浮点表示,其占用的字节数为2-4个。浮点数值的特点是在较小的时间间隔内变化不大,所以考虑用压缩相邻两点之间差值的方式实现数据压缩。由于浮点数的特殊性,即使在数值上相差较少,在二进制表达时也完全不同,所以直接选用任何一种通用数据压缩算法都无法取得较好的结果。为了保证处理的实时性,仍然以LZW算法为基础,对其进行改进处理。一是针对于该算法的字典容量存在限制,以及对于字符的匹配效率较低的问题,设计了新的字典生成算法,根据待处理实时数据的形态确定字典的容量,并引入了基于散列函数的数据搜索方法,用于对字符串进行匹配,有效地提高了处理的速度;二是基于LZW算法压缩率不高的问题,对浮点数进行预处理,使其满足LZW算法具有高压缩率时的数据特征,主要的做法是将不规律的浮点型数据差值转换为相应的百分量型数据,再应用LZW算法进行压缩处理。

五、结束语

本文针对传统有损数据压缩算法无法应用于高精度实时数据库的问题,提出了基于不同类型数据采用不同数据压缩算法的解决方案,实现了高精度的数据压缩,解决了数据精度和数据库存储容量之间的矛盾,在实际的应用过程中取得了良好的效果。

参考文献

[1]刘云生等.实时数据库系统(RTDBS)及其特征.华中理工大学学报,2010,06:66-70

[2]杨永军,徐江,许帅,舒逸.实时数据库有损压缩算法的研究.计算机技术与发展,2012(09):59-62

[3]王君.基于实时数据库的有损线性压缩算法研究与改进.微计算机应用,2013(07):99-101

[4]MarkNelson著,贾起东译.数据压缩技术原理与范例.北京:科学出版社,2010,04:312-315

[5]于翔.数据压缩技术分析.青海大学学报(自然科学版),2012,20(5):52-54

[6]刘红霞,牛富丽.实时数据库数据压缩算法探讨与改进.化工自动化及仪表,2013(06):38-40

[7]王泉,齐春,罗新民,梁嵩.LZW压缩算法的改进及其参数优化分析.重庆邮电学院学报(自然科学版),2011(03):42-46

猜你喜欢

算法
基于MapReduce的改进Eclat算法
Travellng thg World Full—time for Rree
进位加法的两种算法
基于CC2530的改进TPSN算法
基于BCH和HOG的Mean Shift跟踪算法
算法初步两点追踪
基于增强随机搜索的OECI-ELM算法
一种改进的整周模糊度去相关算法
一种抗CPS控制层欺骗攻击的算法
Wiener核的快速提取算法