一种实时数据无损压缩方法及系统技术方案

技术编号:8776109 阅读:292 留言:0更新日期:2013-06-09 18:22
本发明专利技术公开了一种实时数据的无损压缩方法及系统,由两个模块组成,分别为压缩解压模块和内存池模块;所述压缩解压缩是本系统的主模块,负责实时数据的无损压缩和解压缩,其主要操作方法步骤包括:初始化系统;将未处理数据与滑动窗口内数据匹配,获取最大匹配字符串的长度以及偏移位置,如图1所示;将长度和偏移位置与最近产生的匹配字符串的长度和偏移位置做比较;根据比较情况输出对应的结果;同时为实时数据库压缩解压缩进程配备一个内存池以提高性能。采用本发明专利技术能在保证压缩率的前提下,大大减少了内存的消耗,具有较高的性能。

【技术实现步骤摘要】

本专利技术涉及实时数据无损压缩方法及系统,具体是一种针对实时数据库经有损压缩处理后的无损压缩方法及系统。
技术介绍
实时数据库(RTDB-Real Time DataBase)是数据库系统发展的一个分支,是数据库技术结合实时处理技术产生的。实时数据库可用于工厂流程的自动采集、储存和监视,可在线储存每个工艺过程点的多年数据,可以提供清晰、精确的操作情况画面,用户既可浏览工厂当前的生产情况,也可回顾过去的生产情况,可以说,实时数据库对于流程工业系统来说就如同飞机上的“黑匣子”。然而随着工业技术的发展,现在的大型过程控制系统的实时数据种类繁多,来源复杂,更新速度快,精度要求高,要保存的历史数据量非常大。因而如果将这些数据直接储存,会占用非常大的存储空间,还会对数据的传输、备份、分析造成困难。所以实时数据库系统急需引入数据压缩技术。实时数据压缩技术可以分为两大类,分别是有损压缩和无损压缩。大部分实时数据库系统会先对数据进行有损压缩,再使用无损压缩算法进行二次压缩,以达到更大的压缩率。目前比较通用的有损压缩算法主要有两种,第一种是死区压缩算法,这种算法较为简单,它将采集的数据根据预定义的死区进行比较,如果该数据在死区外则记录该数值,否则滤去该数值;另一种是由美国OSI公司研发的旋转门压缩算法(SDT),此算法已经成功的运用在了 PI实时数据库系统中,此算法主要针对的对象是浮点数据类型的数据,其本质是通过一条由起点到终点确定的直线代替一些连续数据点。实时数据无损压缩算法很多源自通用无损压缩算法,包括PPM算法、BWT算法和LZ系列算法等。PPM算法和BWT算法压缩率较高,但是这两种压缩算法耗费的压缩和解压缩时间比较长,不满足实时数据库的要求。而LZ系列算法较为简单,压缩时间更短,扩展性更强,因此本专利技术选择对LZ系列算法中的LZ77算法进行改进。如图1所示,LZ77算法又被称为“滑动窗口压缩算法”,这是由于该算法维护一个虚拟的,可以跟随压缩进程滑动的窗口,这个窗口中的内容即是最近的历史数据,要压缩的字符串如果在该窗口中出现,则输出其长度和出现的位置。而本专利技术对LZ77的改进主要在于处理匹配字符串长度及位置的方式。Wenjun, Huang 等人在 2006 年的 The Sixth World Congress onlntelligentControl and Automation(第六届世界智能控制和自动化会议)上发表的论文《A LosslessData Compression Algorithm for Real-timeDatabase ( 一种实时数据库无损数据压缩算法)》中提出了一种基于LZW算法的实时数据压缩算法。具体为先计算相邻数据的差值,并使用RLE算法和改进的LZW算法对差值进行压缩存储。但是这种压缩算法,无论在压缩和解压缩过程中都需要大量的浮点型数值运算,会对整个系统运行的时间消耗带来不利的影响。本专利技术提出的无损压缩方法计算量小,在压缩时间和解压缩时间上具有更大的优势,特别适合对实时性要求比较高的实时数据库系统。另外,目前高速发展的工业技术对实时数据库系统的性能有着很高的要求,一个实时数据压缩程序在运行的过程中必然需要频繁地动态申请内存,如此会造成三大隐患:一是容易出现内存泄露;二是会在系统中产生大量的内存碎片,降低系统内存的利用率;三是系统的内存分配函数往往通过系统调用实现,而系统调用比普通函数调用更加耗时。本专利技术通过构建内存池可以缓解这一性能问题。所谓内存池是指在真正使用内存之前,先申请分配一定数量的的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。
技术实现思路
为了适应实时数据库压缩解压缩进程对实时性的要求,本专利技术提出了一种实时数据的无损压缩方法及系统,专门针对经有损压缩后的数据进行二次压缩。该方法在保证压缩率的前提下,压缩与解压缩时间都具有一定优势,而且采取优化措施大大减少内存消耗,具有较高的性能。本专利技术解决其技术问题所采用的技术方案是:一种实时数据的无损压缩方法及系统,其特征在于,由两个模块组成,分别是:压缩解压模块和内存池模块;所述压缩解压缩是本系统的主模块,负责实时数据的无损压缩和解压缩,其主要操作方法步骤包括:1、初始化系统;2、将未处理数据与滑动窗口内数据匹配,获取最大匹配字符串的长度以及偏移位置,如图1所示;3、将长度和偏移位置与最近产生的匹配字符串的长度和偏移位置做比较;4、根据比较情况输出对应的结果;在本说明文档中,使用Ien指代最大匹配字符串的长度;使用off指代最大匹配字符串的偏移位置。上述操作步骤2中进一步包括:考虑最大匹配字符串长度过短的情况,如果依然将(len,off)作为结果输出,那么此数据段压缩后的长度甚至可能大于其原始长度,会对压缩率造成负面影响。因此需要区分出匹配字符串长度过短的情况。本专利技术使用一比特“匹配标志位”来标识两种情况:1表示直接输出单字节原始数据;0表示压缩为匹配字符串长度和偏移位置的形式,即继续操作步骤3。同时由于以字节为单位储存数据相对于以位为单位的存储方式有利于减少耗时,所以本专利技术将相邻的每8个匹配标志位合并为一个字节进行存储。在本文档中,我们将这些字节数据称为“匹配标志位字节”。上述操作步骤3是本专利技术无损压缩算法的核心部分和主要创新点。我们通过对过程工业现场数据的分析,发现操作步骤2中获取的匹配字符串的长度和偏移位置往往会连续多次保持同一个或几个数值。出现这一现象的原因是原始数据经过有损压缩的第一次处理后,相邻数据变化率变大,匹配字符串的潜在长度也大大减少,所以重复的可能性也就变大。根据这个规律,本专利技术操作步骤3中进一步包括:将(len,off)的值与最近三次出现的(len,off)值比较,并使用两比特“字典标志位”来标识下列四种情况:01表示长度和偏移量等于最近获取的长度和偏移量;10表示长度和偏移量等于第二近获取的长度和偏移量;11表示长度和偏移量等于第三近获取的长度和偏移量;00表示未出现以上三种情况,输出长度和偏移量的压缩值。通过这种方法,很多情况下只需要两比特空间就可以表示几字节的原始数据,可以达到很好的压缩效果。最后同样为了让数据以字节为单位存储,本专利技术将相邻的每4个字典标志位合并为一个字节进行储存。在本文档中,我们将这些数据称为“字典标志位字节”。所述匹配字符串长度Ien和所述偏移量off的压缩也有两种方式,如图3所示:当Ien值不超过6且off值不超过32时,只使用一个字节保存;当Ien值超过6或off值超过32时,采用两字节保存。这种做法同样也是引入Huffman算法的思想起到增大压缩率的效果。所述内存池模块的提出是为了解决因大量申请释放小块内存所产生的问题,其作用是:在堆中预先申请一大块内存空间,当实时数据库系统需要动态分配和释放内存时,都是通过对这个内存池的操作完成,所得到的内存也来源于这个内存池,而不是调用系统的动态内存分配函数再去堆中申请内存。其中在系统初始化阶段,就要为这个内存池构建空闲空间链表,在内存池的运行过程中要不断更新这个空闲空间链表。同时,本实时数据压缩系统可以通过多线程执行,所以在操作内存池时也要加上互斥锁以实现临界区的互斥。本专利技术的有本文档来自技高网
...

【技术保护点】
一种实时数据的无损压缩方法及系统,其特征在于,由两个模块组成,分别是:压缩解压模块和内存池模块;所述压缩解压缩是本系统的主模块,负责实时数据的无损压缩和解压缩,其主要操作方法步骤包括:(1)、初始化系统;(2)、将未处理数据与滑动窗口内数据匹配,获取最大匹配字符串的长度以及偏移位置,如图1所示;(3)、将长度和偏移位置与最近产生的匹配字符串的长度和偏移位置做比较;(4)、根据比较情况输出对应的结果;同时为实时数据库压缩解压缩进程配备一个内存池以提高性能。

【技术特征摘要】

【专利技术属性】
技术研发人员:卢学东杨永军孙益程相杰张旭田兴东吴景彪
申请(专利权)人:上海麦杰科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1