结构化数据序列的压缩方法

文档序号:6461832阅读:241来源:国知局

专利名称::结构化数据序列的压缩方法
技术领域
:本发明涉及一种计算机数据压縮方法,尤其是一种以列为顺序进行分组和压缩的数据压縮方法,具体地说是一种结构化数据序列的压縮方法。技术背景目前,在各种应用系统中,有许多需要存储大量数据的情况,经常需要存储一年几十年的数据,数据总量达到几十GB千GB以上。如果预期总数据量超过了实际系统的存储总容量,则还需要增加存储设备,增加存储成本。对于某些系统,存储设备已经达到扩充的极限,不能再增加了,数据存储的问题将更严重。同时因为大量的存储器读写操作导致系统运行开销很大,输入/输出成为系统性能的瓶颈。采用数据压縮,可以节约存储空间,降低成本,减少数据读写总量,提高输入/输出效率,提供大容量、高速度的数据存储与传输服务。现在的压縮方法有很多,比如RLE、霍夫曼编码、PPM、LZ系列、BWT等等。还有许多有损压縮方法。将这些压縮方法用于结构化数据序列的压缩,会出现几个方面的问题一、上述的各种压縮方法适用于压縮连续的某一种类型的数据,而结构化数据序列往往是由不同种类的数据混合组成,具有不同的特质,因此,单一地使用任何一种方法往往无法获得理想的压縮效果。二、如果针对数据元素中的数据域的特定数据类型而选择特定的方法进行压縮,则可以取得较好的效果,但必须预先知道数据元素的数据结构。三、对于二,即使知道数据结构,但在实际应用中,同种类型的数据可能具有不同的特性,这也会对压縮效果产生很大影响。比如用一个l字节的整数表示开关状态,0和1对应开和关。当用其表示极少变化的开关状态时,用RLE方法压縮将能获得理想的效果,而用LZW方法则不如RLE方法;当用其表示经常变化的开关状态时,用RLE方法压縮的效果较差,而用LZW方法则比RLE方法好很多。可见,没有绝对好的方法,只有更适用的方法。四、对于不能确定具体数据类型的数据序列,将无法选择合适的方法进行压縮。综上所述目前尚无一种压縮率高、适用于结构化数据序列的压縮方法可供采用。
发明内容本发明的目的是针对现有的压縮方法应用于结构化数据序列时存在压縮效果较差,需要预先知道数据类型,不能最大限度地实现压縮目的的问题,发明一种基于分组压縮的适用于结构化数据序列且无需知道数据类型即可实现高效压縮的结构化数据序列压縮方法。本发明的技术方案是一种结构化数据序列的压縮方法,其特征是首先,将由若干大小相等、数据结构相同或类似的元素构成的结构化的数据序列划分为数据矩阵,以该数据序列的元素为矩阵的行,元素的个数就是矩阵的行数,以该数据序列的元素的各字节或各位为矩阵的列,元素的字节数或位数就是矩阵的列数,对此数据矩阵以列为顺序,按矩阵的一列或若干字节或若干位划分成组,每组数据称为一个分组;其次,对所得各分组使用常规的压縮方法进行压縮;第三,将上述压縮结果进行存储,存储时先存储结构化数据序列的元素个数、元素的大小和分组的数量,再存储各分组的压縮结果,以便于解压縮。所述的常规压縮方法包括差分编码、RLE压縮方法和LZW压縮方法及其它现有的压縮方法和未来新出现的压縮方法,以及多种方法的组合。对各分组分别用已知的压縮方法进行压縮,并对每种压縮方法进行编号,取压縮效果最优的压縮方法作为该分组的最终压縮方法,并对该分组最优的压縮结果进行存储,存储时先存储该压縮方法的编号、该分组的原数据的数量和该分组的压縮数据的数量,然后存储该分组的压縮数据。在对各分组进行压縮过程中,将未进行压縮的原数据视为一个特别的压縮方法的压縮结果,进行比较和存储。对于固定结构的数据序列,可事先通过分析和试验,确定采用固定的方法进行分组,并对各分组采用固定的压縮方法进行压縮。在存储压縮结果时,可根据情况省略结构化数据序列的元素个数、元素的大小、分组的数量、分组压縮方法的编号、分组的原数据的数量、分组的压縮数据的数量。本发明的有益效果一、本发明实现了"结构化数据序列"的高效压縮。二、本发明以分组为单位进行压縮和解压縮。不用知道数据序列的具体数据结构,将其划分为若干分组即可。因此,本方法具有通用性、自适应性。三、对各分组尝试使用不同的方法进行压縮,取最优的压縮结果,从而使总体的压縮效果最优。四、对于固定结构的数据序列,可采用预适应的做法,即事先通过分析和试验,确定各分组对应的最优压縮方法,以后总以各分组的最优方法压縮各分组,不再进行最优判断,这样可进一步提高压縮速度、降低压縮消耗。五、在对各分组进行压縮之前,可根据实际的数据结构和数据特性,先基于具体的数据类型进行量化、差分等处理,使压縮效率进一步提高。图1是本发明的结构化数据序列压縮流程图。图2是本发明的低内存需求的结构化数据序列压縮流程图。图3是本发明的解压縮流程图。具体实施方式下面结合附图和实施例对本发明作进一步的说明。一种结构化数据序列的压缩方法,其特征是首先,将由若干大小相等、数据结构相同或类似的元素构成的结构化的数据序列划分为数据矩阵,以该数据序列的元素为矩阵的行,元素的个数就是矩阵的行数,以该数据序列的元素的各字节或各位为矩阵的列,元素的字节数或位数就是矩阵的列数,对此数据矩阵以列为顺序,按矩阵的一列或若干字节或若干位划分成组,每组数据称为一个分组;其次,对所得各分组使用常规的压縮方法进行压縮;第三,将上述压縮结果进行存储,存储时先存储结构化数据序列的元素个数、元素的大小和分组的数量,再存储各分组的压縮结果,以便于解压縮。所述的常规压縮方法包括差分编码、RLE压縮方法和LZW压缩方法及其它现有的压縮方法和未来新出现的压缩方法,以及多种方法的组合。对各分组分别用已知的压縮方法进行压縮,并对每种压缩方法进行编号,取压缩效果最优的压縮方法作为该分组的最终压縮方法,并对该分组最优的压縮结果进行存储,存储时先存储该压縮方法的编号、该分组的原数据的数量和该分组的压縮数据的数量,然后存储该分组的压縮数据。在对各分组进行压縮过程中,将未进行压縮的原数据视为一个特别的压縮方法的压縮结果,进行比较和存储。对于固定结构的数据序列,可事先通过分析和试验,确定采用固定的方法进行分组,并对各分组采用固定的压縮方法进行压縮。在存储压縮结果时,可根据情况省略结构化数据序列的元素个数、元素的大小、分组的数量、分组压縮方法的编号、分组的原数据的数量、分组的压縮数据的数量。详述如下一种结构化数据序列压縮及解压縮方法,进一步使用多种其它具体的压縮方法。先为各种准备使用的压縮方法编号(包括不压縮,可用编号0表示),然后对数据序列划分成的数据矩阵经过以列为顺序划分成组得到的各分组进行压縮及解压縮,包括步骤一、用各种压縮方法对一个分组进行压缩;二、对各种压縮方法的效果进行比较,确定此分组的最优压縮方法;三、存储效果最优的压縮结果作为此分组的压縮结果。循环进行第一、二、三步,直到压縮完所有分组的数据。压縮流程如图1所示。上述步骤也可以先循环进行第一步,直到压縮完所有分组的数据。然后再循环进行第二、三步,选择各分组的最优结果进行存储。这样做必须在第二步前同时保留所有分组的各种方法的结果,压縮处理的开销比较大,只适合分组数很少的情况,实用意义不大,完全可由循环进行第一、二、三步的做法取代。也可以通过下列步骤进行压縮-一、用各种方法对一个分组进行压縮,以获得压縮效果;二、对各种压縮方法的效果进行比较,确定此分组的最优压縮方法;三、用此分组的最优压縮方法对此分组进行压縮,并存储压縮结果。循环进行第一、二、三步,直到压縮完所有分组的数据。这种方法每次只有一个压縮方法占用系统资源,压縮处理的内存开销比较小,适合压缩方法很多的情况。只是每分组要多压缩一次。这种低内存需求的压縮流程如图2所示。解压縮的技术方案一、获取一个分组的压縮方法的编号。二、以编号所对应的解压縮方法,对此分组的压缩数据进行解压縮处理;三、存储还原的一个分组的数据。循环进行一、二、三步骤,直到解压縮完所有的分组,就实现所有数据的解压縮。解压縮流程如图3所示。本发明中,结构化数据序列是指由若干数据元素组成的一组数据,各数据元素具有相同或类似的数据结构,各元素的大小相同。元素的大小指元素所包含的数据的数量,可以用字节或位为基本单位来衡量,即元素的字节数或位数。结构化数据序列的典型形式有一、内存中的数组,其元素可以是任何简单类型(如整型、浮点性、逻辑型、字符串型等)的数据,也可以是任何复杂类型(如结构型、联合型、数组型等)的数据。二、文件和数据库中,包括K记录型的文件或文件中的一些逻辑上相关、结构相同的记录。2、数据库中的表是一种典型的具体形式。表中的一个个记录就是数据序列,每个记录就是一个元素,是一个结构型数据。3、工业信息系统的实时/历史数据库中,点的数据也是具有特定结构的数据序列,是适合本方法的处理对象。在本发明中,将上述的结构化数据序列划分成以字节或位为基本单位的数据矩阵,并以列为顺序(以行为顺序就是将一行中的每个字节或位逐个处理后再处理下一行,以列为顺序就是将一列中的每个字节或位处理后再处理下一列。)将该矩阵的所有数据分成若干组。各分组的数据量可以相等,也可以不等,最常用的是将数据矩阵的一列作为一个分组。压縮处理以分组为单位进行。具体实施时还可对分组内部数据的顺序进行灵活安排,比如某个分组是矩阵的两列,则在压縮时可按列的顺序也可按行的顺序,甚至是特定的一种顺序进行压縮处理。在实际应用中,在目标数据量非常大的情况下,采用本发明的压縮技术非常有意义。可以在数据库备份、数据库查询结果的通讯传送等应用中使用本发明的方法对目标数据进行压縮处理,提高数据的存储和传输效率。在工业生产中,有很多现场的测点数据需要记录下来,以便进行历史査询,并可帮助生产管理人员进行问题的分析。这些测点数据记录就是本发明所说的结构化数据序列的具体形式之一。而成千上万的测点,经过长年累月的积累,测点的历史数据将非常多,以致只能在硬盘上保存较短时间的历史数据,历史数据的维护和查询都有困难。使用本发明的方法可以显著地提高硬盘有限的存储空间所能保存的历史数据的时间长度,方便了历史数据的査询和维护。在应用本发明的过程中要先确定采用哪些具体的压縮方法。理论上可以采用任意多个压縮方法,实际上没有必要采用太多种方法。由于本发明的基本思想之一就是在结构化数据序列中,同列(指由结构化数据序列划分成的数据矩阵的列)数据具有同质的特点,利用这个特点进行压縮可以提高压縮效率。即使只用同一种方法,以列为顺序进行分组和压縮,也将比以行为顺序进行压縮的效果好。对一个分组采用多种方法进行压縮然后取其最佳者,可能比对一个分组只采用一种方法进行压縮获得更好的效果。各种压縮方法都有适用的数据类型,都存在压縮率和压縮速度之间的平衡问题。对各分组进行压縮的常规方法可以是一种基本的常规方法,也可以是多种常规方法组合变化而成的复合方法。"不压縮"也作为一种特别的压縮方法来对待。为每种将采用的压縮方法编号,以便存储结果时将压縮方法的编号也存储起来,在解压縮时根据编号使用对应的解压缩方法实现解压縮处理。这里将以三种具有代表性的压縮方法,分别对应不同种类的数据,组合成不同的压縮方法,来说明本发明的实施方式。由于具体方法可以是任何方法,本文中仅以三种方法来介绍整体上的用法,而不详细介绍具体方法的内容。一种是差分编码。是将输入数据前后之间的差值作为输出数据的编码方式。本发明的具体差分编码方法是第一个字节保持原码,之后的每个字节减前一个字节,以其差值的作为编码的输出。差分编码可以将数值变化频繁,但数值变化的幅度很小的数据转换成简单的数据,便于压縮。比如原来有数据1、2、3、4、5、6、7、8、9,经过差分编码后,得到数据1、1、1、1、1、1、K1、1,显然后者很容易压縮。一种是RLE方法。其基本思想是用单个字符对nd来表示在输入流中连续出现n次的数据项d。在本发明中规定为*以一个字节的低7位表示数量,最高位为0表示后面低7位的数据是原码数量,此字节后将是低7指定数量的原码;*以一个字节的低7位表示数量,最高位为l表示后面低7位的数据是重复数量,此字节后的这个字节重复低7指定次数;对于变化频率低的数据,采用该方法进行压縮,由于数据的变化频率低,所以很多同样的数据可以被高效地压縮。比如某数据序列的数据结构中有一个部分是以4字节的整数表示的年龄,因为年龄实际用一个字节就可以表示,另3个字节总是为0,那么这3个字节所在的列使用RLE方法进行压縮,其压縮率将是最高的。一种是LZW方法。LZW方法的基本内容是编码时,首先把字母表中的所有字符初始化到字典中,常见的是用8位字符,先占用字典的前256项;编码器逐个输入字符并累积一个字符串,如果当前字符串在字典中存在,则将下一个字符添加到当前字符串中,并以其为新的当前字符串继续判断处理;如果当前字符串不在字典中,则输出当前最大匹配串的字典索引,并将当前字符串存入字典的下一个可用词条,将当前字符串置为其最后一个字符。解码时,只要采用与编码时同样的方式建立自己的字典,就可以将字典还原,实现解压。对于变化频率较高的数据使用RLE方法将难以获得理想的压縮效果,可以采用LZW方法。下面以一个具体的例子对本发明的压縮方法及效果作进一步的说明某工业现场的数据需要保存下来,以便之后查询和分析。以其中一个温度测点为例子,其数据的结构包括为1、状态,表示测点的状态,数据类型为l字节的整数;具体意义是0_停止,l一正常运行,2..n—其它状态2、时间,表示采样的时间,数据类型为4字节的整数;3、数值,表示测点的数值,数据类型为4字节的浮点数;时间的表示方式有很多种,根据本例子的应用特点,采用以秒为单位,以某个时刻为起点进行表示。本例中,以2000年1月1日0点0分0秒为起点0,以2000年1月1日0点0分1秒为1,依此类推,4字节的整数可表示约136年的范围。(这实际上是在对各分组进行压縮之前,对时间进行量化处理,有利于提高压縮效率,而一般的以浮点数表示的时间是比较难压縮的)设此温度测点每隔5秒左右采样一次,有下列100个采样记录<table>tableseeoriginaldocumentpage10</column></row><table><table>tableseeoriginaldocumentpage11</column></row><table><table>tableseeoriginaldocumentpage12</column></row><table><table>tableseeoriginaldocumentpage13</column></row><table>将这些记录划分成以字节为基本单位的100行、9列的数据矩阵:(以下每个字节的数据都采用16进制的方式表示。)<table>tableseeoriginaldocumentpage13</column></row><table><table>tableseeoriginaldocumentpage14</column></row><table><table>tableseeoriginaldocumentpage15</column></row><table>以上述数据矩阵的一列为一个分组,将整个数据矩阵划分为9个分组。采用以下三种方法对各分组进行试压縮,以确定最优的压缩方法并存储最优的压縮结果。各种压縮方法的编号和内容如下表<table>tableseeoriginaldocumentpage15</column></row><table>现在尝试对各分组进行压缩,选择压缩率最高的为最优,其结果是:第1分组<table>tableseeoriginaldocumentpage15</column></row><table><table>tableseeoriginaldocumentpage16</column></row><table><table>tableseeoriginaldocumentpage17</column></row><table>方法1的结果最优,所以取方法1的结果。第4分组<table>tableseeoriginaldocumentpage17</column></row><table>方法l的结果最优,所以取方法l的结果。第5分组<table>tableseeoriginaldocumentpage17</column></row><table>方法l的结果最优,所以取方法l的结果。第6分组<table>tableseeoriginaldocumentpage17</column></row><table><table>tableseeoriginaldocumentpage18</column></row><table>62CB662CIFOE2C742D45219F29BAAO782530E3C519OE67FA2475OD方法2的结果最优,所以取方法2的结果。第8分组<table>tableseeoriginaldocumentpage19</column></row><table>方法2的结果最优,所以取方法2的结果。第9分组<table>tableseeoriginaldocumentpage19</column></row><table>方法1的结果最优,所以取方法1的结果。从上述各分组的压縮结果可以看出一、原来的数据总量是900个字节;二、如果全部用方法l来压縮,则压縮结果是392个字节;三、如果全部用方法2来压縮,则压縮结果是357个字节;四、如果各分组选择最优结果,则压縮结果是283个字节;可见,本申请所述的方法具有显著的效果。存储结果时,先存储结构化数据序列的元素个数、元素的大小,即记录数量和记录大小,等于数据矩阵的行数和列数。由于是将数据矩阵的一列为一个分组,分组的数量等于数据矩阵的列数,即元素的大小,因此,省略分组的数量。本例中,结构化数据序列的元素个数为100,元素的大小为9。分别用4字节的整数表示。然后存储各分组的压縮结果。对于各分组,先存储该分组的压縮方法的编号,本例子中用1个字节表示,再该分组的压縮数据的数量,本例子中用2个字节表示,然后存储该分组的压缩数据。所有分组的原数据的数量等于都前面保存的结构化数据序列的元素个数,因此省略分组的原数据的数量。下面是总的结果(第1行是结构化数据序列的元素个数和元素的大小,之后每个段落是一个分组的压縮结果,第1个字节是分组的压縮方法的编号,第2、3个字节是分组的压缩数据的数量。所有结果都以16进制的字节表示。)6400000009000000010600A3010100C001022800800814286060600181040D222C3870AlC281OCOF1A648830Al44880D2766C4B831A2C38EOF2D16000106009AB8B3B997BA010200A0C3010200AO03025F0066007C600720DCBA05El28D80B276E5D8570OAAE0D54E0B01900OAEC5278005041A20782EB52805CB0CEDECI6B14C2A50020CE83B814CC2A380C0740410500175F32FB10EEEl8775IF14D8FB60CF83BD14F62808OCC971063B0A368B5E5B000257006600149202608F946B7B5CA5D8A3478AAB3DD748ODBCE6BO19005752B814BA28Dl50140052BA7C3C2825C54152OFB9142CB4874B338COF015C7305E062CB662CIF0E2C742D45219F29BAAO782530E3C519OE67FA2475OD022B002600FC0B00004080.81050D2634F8AFE0418205IB2E44281062C2870B1352CC38Dl2247891A33FEIB083221010200A041以上为具体说明了本发明的实施方式,由上文可知,在本发明中,为了对结构化数据序列进行高效的压縮,本发明克服了现有通用压縮方法应用于结构化数据序列压缩时的缺陷。例如各种通用方法往往没有考虑结构化数据的特点,只是将其看作一个整体进行压缩,其实各列(指由结构化数据序列划分成的数据矩阵的列)具有不同的性质,可以使用更适合的方法来达到更好的压縮效果;个别方法,针对特定结构的数据序列进行压缩,虽然具有良好的效果,但必须事先知道数据序列的具体结构,并且在实际中,不可能为无限多种结构提供针对性的压縮方法;还有个别方法可以根据数据库中表的定义来为各字段选择针对性的压縮方法,从而获得良好的压縮效果,但对于未知定义的表或其他数据序列则不能处理;上述两种个别方法,对于同一种类型的数据往往采用一种特定的压縮方法,而实际上,即使是同种类型的数据,也不一定是一种压縮方法效果最好,根据实际的数据用途和数值特点,也可以对应多种不同的最优压缩方法。综上所述,现有的方法都存在不同的缺点而无法使结构化数据序列的压縮效果达到最好。基于该分析,本发明在实现对结构化数据序列进行压縮的过程中,对现有各种压縮方法进行了综合组织,针对结构化数据序列的同列(指由结构化数据序列划分成的数据矩阵的列)同质的特点,采用自动适应的压縮方法的选择,使压縮效果达到最优。在实际应用中,还可以用标量量化等方法进行预处理,进一步提高压縮效果。对于固定结构的数据序列,可采用预适应的做法,即事先通过分析和试验,确定各分组对应的最优压縮方法,以后总以各分组的最优方法压縮各分组,不再进行最优判断,这样可进一步提高压縮速度、降低压縮消耗。这种预适应的做法,在实际应用中,存在可能的非最优情况,不过总体接近最优,相对于速度的提高和资源消耗的降低,这种压縮效率的降低是可以接受的。到底如何选择,关键看最终的目标是什么。如果不是特别追求压縮效率,而是对提高压縮速度、降低资源消耗或者总体的平衡有较高的需求,则可以选择预适应的做法。以上对本发明所提供的结构化数据序列压縮方法进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均可有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。权利要求1、一种结构化数据序列的压缩方法,其特征是首先,将由若干大小相等、数据结构相同或类似的元素构成的结构化数据序列划分为数据矩阵,以该数据序列的元素为矩阵的行,元素的个数就是矩阵的行数,以该数据序列的元素的各字节或各位为矩阵的列,元素的字节数或位数就是矩阵的列数,对此数据矩阵以列为顺序,按矩阵的一列或若干字节或若干位划分成组,每组数据称为一个分组;其次,对所得各分组使用常规的压缩方法进行压缩;第三,将上述压缩结果进行存储,存储时先存储结构化数据序列的元素个数、元素的大小和分组的数量,再存储各分组的压缩结果,以便于解压缩。2、根据权利要求1所述的结构化数据序列的压縮方法,其特征是所述的常规压縮方法包括差分编码、RLE压縮方法和LZW压縮方法及其它现有的压縮方法和未来新出现的压缩方法,以及多种方法的组合。3、根据权利要求1所述的结构化数据序列的压縮方法,其特征是对各分组分别用已知的压縮方法进行压縮,并对每种压縮方法进行编号,取压縮效果最优的压縮方法作为该分组的最终压縮方法,并对该分组最优的压縮结果进行存储,存储时先存储该压縮方法的编号、该分组的原数据的数量和该分组的压縮数据的数量,然后存储该分组的压縮数据。4、根据权利要求1所述的结构化数据序列的压縮方法,其特征是在对各分组进行压縮过程中,将未进行压缩的原数据视为一个特别的压縮方法的压縮结果,进行比较和存储。5、根据权利要求1所述的结构化数据序列的压縮方法,其特征是对于固定结构的数据序列,可事先通过分析和试验,确定采用固定的方法进行分组,并对各分组采用固定的压縮方法进行压縮。6、根据权利要求1所迷的结构化数据序列的压縮方法,其特征是在存储压缩结果时,可根据情况省略结构化数据序列的元素个数、元素的大小、分组的数量、分组压縮方法的编号、分组的原数据的数量、分组的压縮数据的数量。全文摘要一种结构化数据序列的压缩方法,属于一种计算机数据压缩技术,其特征是首先,将由若干大小相等、数据结构相同或类似的元素构成的结构化数据序列划分为数据矩阵,以该数据序列的元素为矩阵的行,元素的个数就是矩阵的行数,以该数据序列的元素的各字节或各位为矩阵的列,元素的字节数或位数就是矩阵的列数,对此数据矩阵以列为顺序,按矩阵的一列或若干字节或若干位划分成组,每组数据称为一个分组;其次,对所得各分组使用常规的压缩方法进行压缩;第三,将上述压缩结果进行存储,存储时先存储结构化数据序列的元素个数、元素的大小和分组的数量,再存储各分组的压缩结果,以便于解压缩。本发明具有良好的自适应性、可扩展性,压缩效率高,且无需知道数据的具体类型即可进行高效率的压缩。文档编号G06F17/30GK101241508SQ20081008713公开日2008年8月13日申请日期2008年3月18日优先权日2007年8月1日发明者立金申请人:立金
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1