CN101241508B - 结构化数据序列的压缩方法 - Google Patents

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

Info

Publication number
CN101241508B
CN101241508B CN200810087137XA CN200810087137A CN101241508B CN 101241508 B CN101241508 B CN 101241508B CN 200810087137X A CN200810087137X A CN 200810087137XA CN 200810087137 A CN200810087137 A CN 200810087137A CN 101241508 B CN101241508 B CN 101241508B
Authority
CN
China
Prior art keywords
data
grouping
compression
data sequence
compression method
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN200810087137XA
Other languages
English (en)
Other versions
CN101241508A (zh
Inventor
金立
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to CN200810087137XA priority Critical patent/CN101241508B/zh
Publication of CN101241508A publication Critical patent/CN101241508A/zh
Application granted granted Critical
Publication of CN101241508B publication Critical patent/CN101241508B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

一种结构化数据序列的压缩方法,属于一种计算机数据压缩技术,其特征是:首先,将由若干大小相等、数据结构相同或类似的元素构成的结构化数据序列划分为数据矩阵,以该数据序列的元素为矩阵的行,元素的个数就是矩阵的行数,以该数据序列的元素的各字节或各位为矩阵的列,元素的字节数或位数就是矩阵的列数,对此数据矩阵以列为顺序,按矩阵的一列或若干字节或若干位划分成组,每组数据称为一个分组;其次,对所得各分组使用常规的压缩方法进行压缩;第三,将上述压缩结果进行存储,存储时先存储结构化数据序列的元素个数、元素的大小和分组的数量,再存储各分组的压缩结果,以便于解压缩。本发明具有良好的自适应性、可扩展性,压缩效率高,且无需知道数据的具体类型即可进行高效率的压缩。

Description

结构化数据序列的压缩方法
技术领域
本发明涉及一种计算机数据压缩方法,尤其是一种以列为顺序进行分组和压缩的数据压缩方法,具体地说是一种结构化数据序列的压缩方法。
背景技术
目前,在各种应用系统中,有许多需要存储大量数据的情况,经常需要存储一年~几十年的数据,数据总量达到几十GB~千GB以上。如果预期总数据量超过了实际系统的存储总容量,则还需要增加存储设备,增加存储成本。对于某些系统,存储设备已经达到扩充的极限,不能再增加了,数据存储的问题将更严重。同时因为大量的存储器读写操作导致系统运行开销很大,输入/输出成为系统性能的瓶颈。采用数据压缩,可以节约存储空间,降低成本,减少数据读写总量,提高输入/输出效率,提供大容量、高速度的数据存储与传输服务。
现在的压缩方法有很多,比如:RLE、霍夫曼编码、PPM、LZ系列、BWT等等。还有许多有损压缩方法。将这些压缩方法用于结构化数据序列的压缩,会出现几个方面的问题:
一、上述的各种压缩方法适用于压缩连续的某一种类型的数据,而结构化数据序列往往是由不同种类的数据混合组成,具有不同的特质,因此,单一地使用任何一种方法往往无法获得理想的压缩效果。
二、如果针对数据元素中的数据域的特定数据类型而选择特定的方法进行压缩,则可以取得较好的效果,但必须预先知道数据元素的数据结构。
三、对于二,即使知道数据结构,但在实际应用中,同种类型的数据可能具有不同的特性,这也会对压缩效果产生很大影响。比如:用一个1字节的整数表示开关状态,0和1对应开和关。当用其表示极少变化的开关状态时,用RLE方法压缩将能获得理想的效果,而用LZW方法则不如RLE方法;当用其表示经常变化的开关状态时,用RLE方法压缩的效果较差,而用LZW方法则比RLE方法好很多。可见,没有绝对好的方法,只有更适用的方法。
四、对于不能确定具体数据类型的数据序列,将无法选择合适的方法进行压缩。
综上所述目前尚无一种压缩率高、适用于结构化数据序列的压缩方法可供采用。
发明内容
本发明的目的是针对现有的压缩方法应用于结构化数据序列时存在压缩效果较差,需要预先知道数据类型,不能最大限度地实现压缩目的的问题,发明一种基于分组压缩的适用于结构化数据序列且无需知道数据类型即可实现高效压缩的结构化数据序列压缩方法。
本发明的技术方案是:
一种结构化数据序列的压缩方法,其特征是:
首先,将由若干大小相等、数据结构相同或类似的元素构成的结构化的数据序列划分为数据矩阵,以该数据序列的元素为矩阵的行,元素的个数就是矩阵的行数,以该数据序列的元素的各字节或各位为矩阵的列,元素的字节数或位数就是矩阵的列数,对此数据矩阵以列为顺序,按矩阵的一列或若干字节或若干位划分成组,每组数据称为一个分组;
其次,对所得各分组使用常规的压缩方法进行压缩;
第三,将上述压缩结果进行存储,存储时先存储结构化数据序列的元素个数、元素的大小和分组的数量,再存储各分组的压缩结果,以便于解压缩。
所述的常规压缩方法包括差分编码、RLE压缩方法和LZW压缩方法及其它现有的压缩方法和未来新出现的压缩方法,以及多种方法的组合。
对各分组分别用已知的压缩方法进行压缩,并对每种压缩方法进行编号,取压缩效果最优的压缩方法作为该分组的最终压缩方法,并对该分组最优的压缩结果进行存储,存储时先存储该压缩方法的编号、该分组的原数据的数量和该分组的压缩数据的数量,然后存储该分组的压缩数据。
在对各分组进行压缩过程中,将未进行压缩的原数据视为一个特别的压缩方法的压缩结果,进行比较和存储。
对于固定结构的数据序列,可事先通过分析和试验,确定采用固定的方法进行分组,并对各分组采用固定的压缩方法进行压缩。
在存储压缩结果时,可根据情况省略结构化数据序列的元素个数、元素的大小、分组的数量、分组压缩方法的编号、分组的原数据的数量、分组的压缩数据的数量。
本发明的有益效果:
一、本发明实现了“结构化数据序列”的高效压缩。
二、本发明以分组为单位进行压缩和解压缩。不用知道数据序列的具体数据结构,将其划分为若干分组即可。因此,本方法具有通用性、自适应性。
三、对各分组尝试使用不同的方法进行压缩,取最优的压缩结果,从而使总体的压缩效果最优。
四、对于固定结构的数据序列,可采用预适应的做法,即事先通过分析和试验,确定各分组对应的最优压缩方法,以后总以各分组的最优方法压缩各分组,不再进行最优判断,这样可进一步提高压缩速度、降低压缩消耗。
五、在对各分组进行压缩之前,可根据实际的数据结构和数据特性,先基于具体的数据类型进行量化、差分等处理,使压缩效率进一步提高。
附图说明
图1是本发明的结构化数据序列压缩流程图。
图2是本发明的低内存需求的结构化数据序列压缩流程图。
图3是本发明的解压缩流程图。
具体实施方式
下面结合附图和实施例对本发明作进一步的说明。
一种结构化数据序列的压缩方法,其特征是:
首先,将由若干大小相等、数据结构相同或类似的元素构成的结构化的数据序列划分为数据矩阵,以该数据序列的元素为矩阵的行,元素的个数就是矩阵的行数,以该数据序列的元素的各字节或各位为矩阵的列,元素的字节数或位数就是矩阵的列数,对此数据矩阵以列为顺序,按矩阵的一列或若干字节或若干位划分成组,每组数据称为一个分组;
其次,对所得各分组使用常规的压缩方法进行压缩;
第三,将上述压缩结果进行存储,存储时先存储结构化数据序列的元素个数、元素的大小和分组的数量,再存储各分组的压缩结果,以便于解压缩。
所述的常规压缩方法包括差分编码、RLE压缩方法和LZW压缩方法及其它现有的压缩方法和未来新出现的压缩方法,以及多种方法的组合。
对各分组分别用已知的压缩方法进行压缩,并对每种压缩方法进行编号,取压缩效果最优的压缩方法作为该分组的最终压缩方法,并对该分组最优的压缩结果进行存储,存储时先存储该压缩方法的编号、该分组的原数据的数量和该分组的压缩数据的数量,然后存储该分组的压缩数据。
在对各分组进行压缩过程中,将未进行压缩的原数据视为一个特别的压缩方法的压缩结果,进行比较和存储。
对于固定结构的数据序列,可事先通过分析和试验,确定采用固定的方法进行分组,并对各分组采用固定的压缩方法进行压缩。
在存储压缩结果时,可根据情况省略结构化数据序列的元素个数、元素的大小、分组的数量、分组压缩方法的编号、分组的原数据的数量、分组的压缩数据的数量。
详述如下:
一种结构化数据序列压缩及解压缩方法,进一步使用多种其它具体的压缩方法。先为各种准备使用的压缩方法编号(包括不压缩,可用编号0表示),然后对数据序列划分成的数据矩阵经过以列为顺序划分成组得到的各分组进行压缩及解压缩,包括步骤:
一、用各种压缩方法对一个分组进行压缩;
二、对各种压缩方法的效果进行比较,确定此分组的最优压缩方法;
三、存储效果最优的压缩结果作为此分组的压缩结果。
循环进行第一、二、三步,直到压缩完所有分组的数据。压缩流程如图1所示。
上述步骤也可以先循环进行第一步,直到压缩完所有分组的数据。然后再循环进行第二、三步,选择各分组的最优结果进行存储。这样做必须在第二步前同时保留所有分组的各种方法的结果,压缩处理的开销比较大,只适合分组数很少的情况,实用意义不大,完全可由循环进行第一、二、三步的做法取代。
也可以通过下列步骤进行压缩:
一、用各种方法对一个分组进行压缩,以获得压缩效果;
二、对各种压缩方法的效果进行比较,确定此分组的最优压缩方法;
三、用此分组的最优压缩方法对此分组进行压缩,并存储压缩结果。
循环进行第一、二、三步,直到压缩完所有分组的数据。
这种方法每次只有一个压缩方法占用系统资源,压缩处理的内存开销比较小,适合压缩方法很多的情况。只是每分组要多压缩一次。这种低内存需求的压缩流程如图2所示。
解压缩的技术方案:
一、获取一个分组的压缩方法的编号。
二、以编号所对应的解压缩方法,对此分组的压缩数据进行解压缩处理;
三、存储还原的一个分组的数据。
循环进行一、二、三步骤,直到解压缩完所有的分组,就实现所有数据的解压缩。解压缩流程如图3所示。
本发明中,结构化数据序列是指由若干数据元素组成的一组数据,各数据元素具有相同或类似的数据结构,各元素的大小相同。元素的大小指元素所包含的数据的数量,可以用字节或位为基本单位来衡量,即元素的字节数或位数。结构化数据序列的典型形式有:
一、内存中的数组,其元素可以是任何简单类型(如:整型、浮点性、逻辑型、字符串型等)的数据,也可以是任何复杂类型(如:结构型、联合型、数组型等)的数据。
二、文件和数据库中,包括:
1、记录型的文件或文件中的一些逻辑上相关、结构相同的记录。
2、数据库中的表是一种典型的具体形式。表中的一个个记录就是数据序列,每个记录就是一个元素,是一个结构型数据。
3、工业信息系统的实时/历史数据库中,点的数据也是具有特定结构的数据序列,是适合本方法的处理对象。
在本发明中,将上述的结构化数据序列划分成以字节或位为基本单位的数据矩阵,并以列为顺序(以行为顺序就是将一行中的每个字节或位逐个处理后再处理下一行,以列为顺序就是将一列中的每个字节或位处理后再处理下一列。)将该矩阵的所有数据分成若干组。各分组的数据量可以相等,也可以不等,最常用的是将数据矩阵的一列作为一个分组。压缩处理以分组为单位进行。具体实施时还可对分组内部数据的顺序进行灵活安排,比如某个分组是矩阵的两列,则在压缩时可按列的顺序也可按行的顺序,甚至是特定的一种顺序进行压缩处理。
在实际应用中,在目标数据量非常大的情况下,采用本发明的压缩技术非常有意义。
可以在数据库备份、数据库查询结果的通讯传送等应用中使用本发明的方法对目标数据进行压缩处理,提高数据的存储和传输效率。
在工业生产中,有很多现场的测点数据需要记录下来,以便进行历史查询,并可帮助生产管理人员进行问题的分析。这些测点数据记录就是本发明所说的结构化数据序列的具体形式之一。而成千上万的测点,经过长年累月的积累,测点的历史数据将非常多,以致只能在硬盘上保存较短时间的历史数据,历史数据的维护和查询都有困难。使用本发明的方法可以显著地提高硬盘有限的存储空间所能保存的历史数据的时间长度,方便了历史数据的查询和维护。
在应用本发明的过程中要先确定采用哪些具体的压缩方法。理论上可以采用任意多个压缩方法,实际上没有必要采用太多种方法。由于本发明的基本思想之一就是在结构化数据序列中,同列(指由结构化数据序列划分成的数据矩阵的列)数据具有同质的特点,利用这个特点进行压缩可以提高压缩效率。即使只用同一种方法,以列为顺序进行分组和压缩,也将比以行为顺序进行压缩的效果好。对一个分组采用多种方法进行压缩然后取其最佳者,可能比对一个分组只采用一种方法进行压缩获得更好的效果。各种压缩方法都有适用的数据类型,都存在压缩率和压缩速度之间的平衡问题。对各分组进行压缩的常规方法可以是一种基本的常规方法,也可以是多种常规方法组合变化而成的复合方法。“不压缩”也作为一种特别的压缩方法来对待。为每种将采用的压缩方法编号,以便存储结果时将压缩方法的编号也存储起来,在解压缩时根据编号使用对应的解压缩方法实现解压缩处理。
这里将以三种具有代表性的压缩方法,分别对应不同种类的数据,组合成不同的压缩方法,来说明本发明的实施方式。由于具体方法可以是任何方法,本文中仅以三种方法来介绍整体上的用法,而不详细介绍具体方法的内容。
一种是差分编码。是将输入数据前后之间的差值作为输出数据的编码方式。本发明的具体差分编码方法是:第一个字节保持原码,之后的每个字节减前一个字节,以其差值的作为编码的输出。差分编码可以将数值变化频繁,但数值变化的幅度很小的数据转换成简单的数据,便于压缩。比如:原来有数据:1、2、3、4、5、6、7、8、9,经过差分编码后,得到数据:1、1、1、1、1、1、1、1、1,显然后者很容易压缩。
一种是RLE方法。其基本思想是用单个字符对nd来表示在输入流中连续出现n次的数据项d。在本发明中规定为:
●以一个字节的低7位表示数量,最高位为0表示后面低7位的数据是原码数量,此字节后将是低7指定数量的原码;
●以一个字节的低7位表示数量,最高位为1表示后面低7位的数据是重复数量,此字节后的这个字节重复低7指定次数;
对于变化频率低的数据,采用该方法进行压缩,由于数据的变化频率低,所以很多同样的数据可以被高效地压缩。比如:某数据序列的数据结构中有一个部分是以4字节的整数表示的年龄,因为年龄实际用一个字节就可以表示,另3个字节总是为0,那么这3个字节所在的列使用RLE方法进行压缩,其压缩率将是最高的。
一种是LZW方法。LZW方法的基本内容是:编码时,首先把字母表中的所有字符初始化到字典中,常见的是用8位字符,先占用字典的前256项;编码器逐个输入字符并累积一个字符串,如果当前字符串在字典中存在,则将下一个字符添加到当前字符串中,并以其为新的当前字符串继续判断处理;如果当前字符串不在字典中,则输出当前最大匹配串的字典索引,并将当前字符串存入字典的下一个可用词条,将当前字符串置为其最后一个字符。解码时,只要采用与编码时同样的方式建立自己的字典,就可以将字典还原,实现解压。对于变化频率较高的数据使用RLE方法将难以获得理想的压缩效果,可以采用LZW方法。
下面以一个具体的例子对本发明的压缩方法及效果作进一步的说明:
某工业现场的数据需要保存下来,以便之后查询和分析。
以其中一个温度测点为例子,其数据的结构包括为:
1、状态,表示测点的状态,数据类型为1字节的整数;具体意义是:0-停止,1-正常运行,2..n-其它状态
2、时间,表示采样的时间,数据类型为4字节的整数;
3、数值,表示测点的数值,数据类型为4字节的浮点数;时间的表示方式有很多种,根据本例子的应用特点,采用以秒为单位,以某个时刻为起点进行表示。
本例中,以2000年1月1日0点0分0秒为起点0,以2000年1月1日0点0分1秒为1,依此类推,4字节的整数可表示约136年的范围。(这实际上是在对各分组进行压缩之前,对时间进行量化处理,有利于提高压缩效率,而一般的以浮点数表示的时间是比较难压缩的)
设此温度测点每隔5秒左右采样一次,有下列100个采样记录:
  序号   状态   时间   数值
  1   1   2002-01-01 00:00:00   10.40
  2   1   2002-01-01 00:00:05   10.40
  3   1   2002-01-01 00:00:10   10.37
  4   1   2002-01-01 00:00:15   10.39
  5   1   2002-01-01 00:00:20   10.39
  6   1   2002-01-01 00:00:25   10.42
  7   1   2002-01-01 00:00:30   10.44
  8   1   2002-01-01 00:00:35   10.43
  9   1   2002-01-01 00:00:40   10.46
  10   1   2002-01-01 00:00:45   10.44
  11   1   2002-01-01 00:00:50   10.45
  12   1   2002-01-01 00:00:55   10.48
  13   1   2002-01-01 00:01:00   10.51
  14   1   2002-01-01 00:01:05   10.53
  15   1   2002-01-01 00:01:10   10.51
  16   1   2002-01-01 00:01:15   10.54
  17   1   2002-01-01 00:01:20   10.53
  18   1   2002-01-01 00:01:25   10.57
  19   1   2002-01-01 00:01:30   10.54
  20   1   2002-01-01 00:01:35   10.56
  21   1   2002-01-01 00:01:40   10.55
  22   1   2002-01-01 00:01:45   10.57
  23   1   2002-01-01 00:01:50   10.55
  24   1   2002-01-01 00:01:55   10.60
  25   1   2002-01-01 00:02:00   10.60
  26   1   2002-01-01 00:02:05   10.58
  27   1   2002-01-01 00:02:10   10.60
  28   1   2002-01-01 00:02:15   10.56
  29   1   2002-01-01 00:02:20   10.53
  30   1   2002-01-01 00:02:25   10.53
  31   1   2002-01-01 00:02:30   10.51
  32   1   2002-01-01 00:02:35   10.55
  33   1   2002-01-01 00:02:40   10.52
  34   1   2002-01-01 00:02:45   10.49
  35   1   2002-01-01 00:02:50   10.51
  36   0   2002-01-01 00:02:55   10.51
  37   1   2002-01-01 00:03:00   10.53
  38   1   2002-01-01 00:03:05   10.49
  39   1   2002-01-01 00:03:10   10.51
  40   1   2002-01-01 00:03:15   10.51
  41   1   2002-01-01 00:03:20   10.53
  42   1   2002-01-01 00:03:25   10.52
  43   1   2002-01-01 00:03:30   10.54
  44   1   2002-01-01 00:03:35   10.55
  45   1   2002-01-01 00:03:40   10.57
  46   1   2002-01-01 00:03:45   10.56
  47   1   2002-01-01 00:03:50   10.60
  48   1   2002-01-01 00:03:55   10.58
  49   1   2002-01-01 00:04:00   10.61
  50   1   2002-01-01 00:04:05   10.57
  51   1   2002-01-01 00:04:10   10.57
  52   1   2002-01-01 00:04:15   10.60
  53   1   2002-01-01 00:04:20   10.57
  54   1   2002-01-01 00:04:25   10.60
  55   1   2002-01-01 00:04:30   10.56
  56   1   2002-01-01 00:04:35   10.61
  57   1   2002-01-01 00:04:40   10.59
  58   1   2002-01-01 00:04:45   10.61
  59   1   2002-01-01 00:04:50   10.59
  60   1   2002-01-01 00:04:55   10.62
  61   1   2002-01-01 00:05:00   10.62
  62   1   2002-01-01 00:05:05   10.61
  63   1   2002-01-01 00:05:10   10.59
  64   1   2002-01-01 00:05:15   10.59
  65   1   2002-01-01 00:05:20   10.59
  66   1   2002-01-01 00:05:25   10.57
  67   1   2002-01-01 00:05:30   10.60
  68   1   2002-01-01 00:05:35   10.56
  69   1   2002-01-01 00:05:40   10.61
  70   1   2002-01-01 00:05:45   10.58
  71   1   2002-01-01 00:05:50   10.61
  72   1   2002-01-01 00:05:55   10.59
  73   1   2002-01-01 00:06:00   10.62
  74   1   2002-01-01 00:06:05   10.59
  75   1   2002-01-01 00:06:10   10.61
  76   1   2002-01-01 00:06:15   10.58
  77   1   2002-01-01 00:06:20   10.57
  78   1   2002-01-01 00:06:25   10.58
  79   1   2002-01-01 00:06:30   10.55
  80   1   2002-01-01 00:06:35   10.56
  81   1   2002-01-01 00:06:40   10.53
  82   1   2002-01-01 00:06:45   10.54
  83   1   2002-01-01 00:06:50   10.50
  84   1   2002-01-01 00:06:55   10.51
  85   1   2002-01-01 00:07:00   10.49
  86   1   2002-01-01 00:07:05   10.49
  87   1   2002-01-01 00:07:10   10.46
  88   1   2002-01-01 00:07:15   10.48
  89   1   2002-01-01 00:07:20   10.44
  90   1   2002-01-01 00:07:25   10.44
  91   1   2002-01-01 00:07:30   10.42
  92   1   2002-01-01 00:07:35   10.37
  93   1   2002-01-01 00:07:40   10.39
  94   1   2002-01-01 00:07:45   10.37
  95   1   2002-01-01 00:07:50   10.36
  96   1   2002-01-01 00:07:55   10.34
  97   1   2002-01-01 00:08:00   10.35
  98   1   2002-01-01 00:08:05   10.32
  99   1   2002-01-01 00:08:10   10.36
  100   1   2002-01-01 00:08:15   10.35
将这些记录划分成以字节为基本单位的100行、9列的数据矩阵:(以下每个字节的数据都采用16进制的方式表示。)
  行号   第1列   第2列   第3列   第4列   第5列   第6列   第7列   第8列   第9列
  1   01   80   B8   C3   03   66   66   26   41
  2   01   84   B8   C3   03   66   66   26   41
  3   01   89   B8   C3   03   85   EB   25   41
  4   01   8E   B8   C3   03   71   3D   26   41
  5   01   94   B8   C3   03   71   3D   26   41
  6   01   99   B8   C3   03   52   B8   26   41
  7   01   9E   B8   C3   03   3D   0A   27   41
  8   01   A3   B8   C3   03   48   E1   26   41
  9   01   A7   B8   C3   03   29   5C   27   41
  10   01   AC   B8   C3   03   3D   0A   27   41
  11   01   B1   B8   C3   03   33   33   27   41
  12   01   B7   B8   C3   03   14   AE   27   41
  13   01   BC   B8   C3   03   F6   28   28   41
  14   01   C1   B8   C3   03   E1   7A   28   41
  15   01   C6   B8   C3   03   F6   28   28   41
  16   01   CA   B8   C3   03   D7   A3   28   41
  17   01   CF   B8   C3   03   E1   7A   28   41
  18   01   D4   B8   C3   03   B8   1E   29   41
  19   01   DA   B8   C3   03   D7   A3   28   41
  20   01   DF   B8   C3   03   C3   F5   28   41
  21   01   E4   B8   C3   03   CD   CC   28   41
  22   01   E9   B8   C3   03   B8   1E   29   41
  23   01   ED   B8   C3   03   CD   CC   28   41
  24   01   F2   B8   C3   03   9A   99   29   41
  25   01   F7   B8   C3   03   9A   99   29   41
  26   01   FD   B8   C3   03   AE   47   29   41
  27   01   02   B9   C3   03   9A   99   29   41
  28   01   07   B9   C3   03   C3   F5   28   41
  29   01   0C   B9   C3   03   E1   7A   28   41
  30   01   10   B9   C3   03   E1   7A   28   41
  31   01   15   B9   C3   03   F6   28   28   41
  32   01   1A   B9   C3   03   CD   CC   28   41
  33   01   20   B9   C3   03   EC   51   28   41
  34   01   25   B9   C3   03   0A   D7   27   41
  35   01   2A   B9   C3   03   F6   28   28   41
  36   00   2F   B9   C3   03   F6   28   28   41
  37   01   33   B9   C3   03   E1   7A   28   41
  38   01   38   B9   C3   03   0A   D7   27   41
  39   01   3D   B9   C3   03   F6   28   28   41
  40   01   42   B9   C3   03   F6   28   28   41
  41   01   48   B9   C3   03   E1   7A   28   41
  42   01   4D   B9   C3   03   EC   51   28   41
  43   01   52   B9   C3   03   D7   A3   28   41
  44   01   56   B9   C3   03   CD   CC   28   41
  45   01   5B   B9   C3   03   B8   1E   29   41
  46   01   60   B9   C3   03   C3   F5   28   41
  47   01   65   B9   C3   03   9A   99   29   41
  48   01   6B   B9   C3   03   AE   47   29   41
  49   01   70   B9   C3   03   8F   C2   29   41
  50   01   75   B9   C3   03   B8   1E   29   41
  51   01   79   B9   C3   03   B8   1E   29   41
  52   01   7E   B9   C3   03   9A   99   29   41
  53   01   83   B9   C3   03   B8   1E   29   41
  54   01   88   B9   C3   03   9A   99   29   41
  55   01   8E   B9   C3   03   C3   F5   28   41
  56   01   93   B9   C3   03   8F   C2   29   41
  57   01   98   B9   C3   03   A4   70   29   41
  58   01   9C   B9   C3   03   8F   C2   29   41
  59   01   A1   B9   C3   03   A4   70   29   41
  60   01   A6   B9   C3   03   85   EB   29   41
  61   01   AB   B9   C3   03   85   EB   29   41
  62   01   B1   B9   C3   03   8F   C2   29   41
  63   01   B6   B9   C3   03   A4   70   29   41
  64   01   BB   B9   C3   03   A4   70   29   41
  65   01   BF   B9   C3   03   A4   70   29   41
  66   01   C4   B9   C3   03   B8   1E   29   41
  67   01   C9   B9   C3   03   9A   99   29   41
  68   01   CE   B9   C3   03   C3   F5   28   41
  69   01   D4   B9   C3   03   8F   C2   29   41
  70   01   D9   B9   C3   03   AE   47   29   41
  71   01   DE   B9   C3   03   8F   C2   29   41
  72   01   E3   B9   C3   03   A4   70   29   41
  73   01   E7   B9   C3   03   85   EB   29   41
  74   01   EC   B9   C3   03   A4   70   29   41
  75   01   F1   B9   C3   03   8F   C2   29   41
  76   01   F7   B9   C3   03   AE   47   29   41
  77   01   FC   B9   C3   03   B8   1E   29   41
  78   01   01   BA   C3   03   AE   47   29   41
  79   01   06   BA   C3   03   CD   CC   28   41
  80   01   0A   BA   C3   03   C3   F5   28   41
  81   01   0F   BA   C3   03   E1   7A   28   41
  82   01   14   BA   C3   03   D7   A3   28   41
  83   01   1A   BA   C3   03   0   0   28   41
  84   01   1F   BA   C3   03   F6   28   28   41
  85   01   24   BA   C3   03   0A   D7   27   41
  86   01   29   BA   C3   03   0A   D7   27   41
  87   01   2D   BA   C3   03   29   5C   27   41
  88   01   32   BA   C3   03   14   AE   27   41
  89   01   37   BA   C3   03   3D   0A   27   41
  90   01   3D   BA   C3   03   3D   0A   27   41
  91   01   42   BA   C3   03   52   B8   26   41
  92   01   47   BA   C3   03   85   EB   25   41
  93   01   4C   BA   C3   03   71   3D   26   41
  94   01   50   BA   C3   03   85   EB   25   41
  95   01   55   BA   C3   03   8F   C2   25   41
  96   01   5A   BA   C3   03   A4   70   25   41
  97   01   60   BA   C3   03   9A   99   25   41
  98   01   65   BA   C3   03   B8   1E   25   41
  99   01   6A   BA   C3   03   8F   C2   25   41
  100   01   6F   BA   C3   03   9A   99   25   41
以上述数据矩阵的一列为一个分组,将整个数据矩阵划分为9个分组。采用以下三种方法对各分组进行试压缩,以确定最优的压缩方法并存储最优的压缩结果。各种压缩方法的编号和内容如下表:
  编号  内容
  0  不压缩
  1  RLE方法
  2  先差分方法,再LZW方法
现在尝试对各分组进行压缩,选择压缩率最高的为最优,其结果是:
第1分组:
方法 编码方式   结果数量(字节) 结果数据(16进制)
0 不压缩 100   01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 0101 01 01 01 01 01 01 01 01 01 01 01 01 01 01 00 01 01 01 01
Figure S200810087137XD00141
方法1的结果最优,所以取方法1的结果。
第2分组:
方法2的结果最优,所以取方法2的结果。
第3分组:
方法 编码方式   结果数量(字节) 结果数据(16进制)
0 不压缩 100   B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8B8 B8 B8 B8 B8 B8 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 BA BA BABA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA
  1   RLE编码   6   9A B8 B3 B9 97 BA
  2   先差分编码   100   B8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
方法1的结果最优,所以取方法1的结果。
第4分组:
Figure S200810087137XD00152
方法1的结果最优,所以取方法1的结果。
第5分组:
Figure S200810087137XD00153
方法1的结果最优,所以取方法1的结果。
第6分组:
方法 编码方式 结果数量(字节) 结果数据(16进制)
Figure S200810087137XD00161
方法2的结果最优,所以取方法2的结果。
第7分组:
62 CB 66 2C 1F 0E 2C 74 2D 45 21 9F 29 BA A0 78 25 30 E3 C519 0E 67 FA 24 75 0D
方法2的结果最优,所以取方法2的结果。
第8分组:
Figure S200810087137XD00171
方法2的结果最优,所以取方法2的结果。
第9分组:
Figure S200810087137XD00172
方法1的结果最优,所以取方法1的结果。
从上述各分组的压缩结果可以看出:
一、原来的数据总量是900个字节;
二、如果全部用方法1来压缩,则压缩结果是392个字节;
三、如果全部用方法2来压缩,则压缩结果是357个字节;
四、如果各分组选择最优结果,则压缩结果是283个字节;
可见,本申请所述的方法具有显著的效果。
存储结果时,先存储结构化数据序列的元素个数、元素的大小,即记录数量和记录大小,等于数据矩阵的行数和列数。由于是将数据矩阵的一列为一个分组,分组的数量等于数据矩阵的列数,即元素的大小,因此,省略分组的数量。本例中,结构化数据序列的元素个数为100,元素的大小为9。分别用4字节的整数表示。
然后存储各分组的压缩结果。对于各分组,先存储该分组的压缩方法的编号,本例子中用1个字节表示,再该分组的压缩数据的数量,本例子中用2个字节表示,然后存储该分组的压缩数据。所有分组的原数据的数量等于都前面保存的结构化数据序列的元素个数,因此省略分组的原数据的数量。
下面是总的结果:(第1行是结构化数据序列的元素个数和元素的大小,之后每个段落是一个分组的压缩结果,第1个字节是分组的压缩方法的编号,第2、3个字节是分组的压缩数据的数量。所有结果都以16进制的字节表示。)
64 00 00 00 09 00 00 00
01 06 00 A3 01 01 00 C0 01
02 28 00 80 08 14 28 60 60 60 01 81 04 0D 22 2C 38 70 A1 C2 81 0C 0F 1A 64 88 30 A1 44 88
0D 27 66 C4 B8 31 A2 C3 8E 0F 2D 16 00
01 06 00 9A B8 B3 B9 97 BA
01 02 00 A0 C3
01 02 00 A0 03
02 5F 00 66 00 7C 60 07 20 DC BA 05 E1 28 D8 0B 27 6E 5D 85 70 0A AE 0D 54 E0 B0 19 00 0A
EC 52 78 00 50 41 A2 07 82 EB 52 80 5C B0 CE DE C1 6B 14 C2 A5 00 20 CE 83 B8 14 CC 2A 38
0C 07 40 41 05 00 17 5F 32 FB 10 EE E1 87 75 1F 14 D8 FB 60 CF 83 BD 14 F6 28 08 0C C9 71
06 3B 0A 36 8B 5E 5B 00
02 57 00 66 00 14 92 02 60 8F 94 6B 7B 5C A5 D8 A3 47 8A AB 3D D7 48 0D BC E6 B0 19 00 57
52 B8 14 BA 28 D1 50 14 00 52 BA 7C 3C 28 25 C5 41 52 0F B9 14 2C B4 87 4B 33 8C 0F 01 5C
73 05 E0 62 CB 66 2C 1F 0E 2C 74 2D 45 21 9F 29 BA A0 78 25 30 E3 C5 19 0E 67 FA 24 75 0D
02 2B 00 26 00 FC 0B 00 00 40 80 81 05 0D 26 34 F8 AF E0 41 82 05 1B 2E 44 28 10 62 C2 87
0B 13 52 CC 38 D1 22 47 89 1A 33 FE 1B 08 32 21
01 02 00 A0 41
以上为具体说明了本发明的实施方式,由上文可知,在本发明中,为了对结构化数据序列进行高效的压缩,本发明克服了现有通用压缩方法应用于结构化数据序列压缩时的缺陷。例如:各种通用方法往往没有考虑结构化数据的特点,只是将其看作一个整体进行压缩,其实各列(指由结构化数据序列划分成的数据矩阵的列)具有不同的性质,可以使用更适合的方法来达到更好的压缩效果;个别方法,针对特定结构的数据序列进行压缩,虽然具有良好的效果,但必须事先知道数据序列的具体结构,并且在实际中,不可能为无限多种结构提供针对性的压缩方法;还有个别方法可以根据数据库中表的定义来为各字段选择针对性的压缩方法,从而获得良好的压缩效果,但对于未知定义的表或其他数据序列则不能处理;上述两种个别方法,对于同一种类型的数据往往采用一种特定的压缩方法,而实际上,即使是同种类型的数据,也不一定是一种压缩方法效果最好,根据实际的数据用途和数值特点,也可以对应多种不同的最优压缩方法。综上所述,现有的方法都存在不同的缺点而无法使结构化数据序列的压缩效果达到最好。基于该分析,本发明在实现对结构化数据序列进行压缩的过程中,对现有各种压缩方法进行了综合组织,针对结构化数据序列的同列(指由结构化数据序列划分成的数据矩阵的列)同质的特点,采用自动适应的压缩方法的选择,使压缩效果达到最优。在实际应用中,还可以用标量量化等方法进行预处理,进一步提高压缩效果。对于固定结构的数据序列,可采用预适应的做法,即事先通过分析和试验,确定各分组对应的最优压缩方法,以后总以各分组的最优方法压缩各分组,不再进行最优判断,这样可进一步提高压缩速度、降低压缩消耗。这种预适应的做法,在实际应用中,存在可能的非最优情况,不过总体接近最优,相对于速度的提高和资源消耗的降低,这种压缩效率的降低是可以接受的。到底如何选择,关键看最终的目标是什么。如果不是特别追求压缩效率,而是对提高压缩速度、降低资源消耗或者总体的平衡有较高的需求,则可以选择预适应的做法。
以上对本发明所提供的结构化数据序列压缩方法进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均可有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (4)

1.一种结构化数据序列的压缩方法,其特征是:
首先,将由若干大小相等、数据结构相同或类似的元素构成的结构化数据序列划分为数据矩阵,以该数据序列的元素为矩阵的行,元素的个数就是矩阵的行数,以该数据序列的元素的各字节或各位为矩阵的列,元素的字节数或位数就是矩阵的列数,对此数据矩阵以列为顺序,按矩阵的一列或若干字节或若干位划分成组,每组数据称为一个分组;
其次,对所得各分组数据分别用差分编码、RLE和LZW压缩方法进行压缩;并对各种压缩方法的效果进行比较,确定各分组的最优压缩方法;利用确定的各分组的最优压缩方法对各分组数据进行压缩;
第三,将上述压缩结果进行存储,存储时先存储结构化数据序列的元素个数、元素的大小和分组的数量,再存储各分组的压缩结果,以便于解压缩。
2.根据权利要求1所述的结构化数据序列的压缩方法,其特征是在对各分组进行压缩过程中,将未进行压缩的原数据视为一个特别的压缩方法的压缩结果,进行比较和存储。
3.根据权利要求1所述的结构化数据序列的压缩方法,其特征是对于固定结构的数据序列,可事先通过分析和试验,确定采用固定的方法进行分组,并对各分组采用固定的压缩方法进行压缩。
4.根据权利要求1所述的结构化数据序列的压缩方法,其特征是在存储压缩结果时,先存储结构化数据序列的元素个数、元素的大小;然后对各分组最优的压缩结果进行存储,存储时先存储压缩方法的编号,再存储该分组的压缩数据的数量,然后存储该分组的压缩数据。
CN200810087137XA 2007-08-01 2008-03-18 结构化数据序列的压缩方法 Expired - Fee Related CN101241508B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN200810087137XA CN101241508B (zh) 2007-08-01 2008-03-18 结构化数据序列的压缩方法

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN200710025470 2007-08-01
CN200710025470.3 2007-08-01
CN200810087137XA CN101241508B (zh) 2007-08-01 2008-03-18 结构化数据序列的压缩方法

Publications (2)

Publication Number Publication Date
CN101241508A CN101241508A (zh) 2008-08-13
CN101241508B true CN101241508B (zh) 2011-05-18

Family

ID=39933041

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200810087137XA Expired - Fee Related CN101241508B (zh) 2007-08-01 2008-03-18 结构化数据序列的压缩方法

Country Status (1)

Country Link
CN (1) CN101241508B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104868922A (zh) * 2014-02-24 2015-08-26 华为技术有限公司 数据压缩方法及装置

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8010704B2 (en) * 2008-05-29 2011-08-30 GM Global Technology Operations LLC Method of efficient compression for measurement data
CN103856296B (zh) * 2010-07-16 2017-05-17 珠海中慧微电子有限公司 低压电力线载波通信的地址数据压缩算法
CN101908910A (zh) * 2010-07-16 2010-12-08 珠海中慧微电子有限公司 用于低压电力线载波通信的地址数据压缩算法
CN102404009B (zh) * 2010-09-16 2014-12-31 中盾天安科技(北京)有限公司 基于信息变换的数据压缩、解压缩方法及存储介质
CN102521363A (zh) * 2011-12-15 2012-06-27 武汉达梦数据库有限公司 基于列分解的列存储数据库数值数据压缩方法
US20130179409A1 (en) * 2012-01-06 2013-07-11 International Business Machines Corporation Separation of data chunks into multiple streams for compression
CN102890268B (zh) * 2012-10-11 2014-05-14 南京莱斯信息技术股份有限公司 一种雷达信号无损压缩的方法
CN104951473A (zh) * 2014-03-31 2015-09-30 中国移动通信集团宁夏有限公司 对数据进行压缩的方法和装置
CN103944580B (zh) * 2014-04-14 2017-07-04 天津普仁万合信息技术有限公司 一种生理体征传感器持续采集信号的无损压缩方法
CN105095278B (zh) * 2014-05-13 2018-09-07 华为技术有限公司 一种文件压缩方法及装置
CN104467870A (zh) * 2014-12-17 2015-03-25 北京全路通信信号研究设计院有限公司 一种结构化数据的传输方法、装置及高速铁路系统
CN104753540B (zh) * 2015-03-05 2019-02-26 华为技术有限公司 数据压缩方法、数据解压方法和装置
CN104682965A (zh) * 2015-03-20 2015-06-03 深圳市微科通讯设备有限公司 一种gps数据的压缩方法
CN104901703B (zh) * 2015-04-08 2018-04-03 河海大学 一种整数序列快速压缩存储算法
CN106557469B (zh) * 2015-09-24 2020-11-20 创新先进技术有限公司 一种处理数据仓库中数据的方法及装置
CN106021579B (zh) * 2016-06-01 2019-11-08 南京国电南自维美德自动化有限公司 一种历史数据库的压缩方法
CN107943424A (zh) * 2017-12-18 2018-04-20 苏州蜗牛数字科技股份有限公司 一种网络游戏中方块地形信息的压缩方法
CN109309501B (zh) * 2018-09-12 2022-04-29 成都宝通天宇电子科技有限公司 高精度多环数据压缩方法
CN114168085B (zh) * 2021-12-16 2024-02-20 潍柴动力股份有限公司 变量处理方法、装置、设备及存储介质
CN115276664B (zh) * 2022-09-23 2022-12-30 南通卓科智能装备有限公司 基于访客登记信息的访客数据管理方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104868922A (zh) * 2014-02-24 2015-08-26 华为技术有限公司 数据压缩方法及装置
CN104868922B (zh) * 2014-02-24 2018-05-29 华为技术有限公司 数据压缩方法及装置

Also Published As

Publication number Publication date
CN101241508A (zh) 2008-08-13

Similar Documents

Publication Publication Date Title
CN101241508B (zh) 结构化数据序列的压缩方法
Wu et al. Compressing bitmap indexes for faster search operations
US7827187B2 (en) Frequency partitioning: entropy compression with fixed size fields
US10884987B2 (en) Block compression of tables with repeated values
US9852169B2 (en) Compression of tables based on occurrence of values
Wu Notes on design and implementation of compressed bit vectors
CN105144157B (zh) 用于压缩数据库中的数据的系统和方法
JP2011530234A (ja) 大規模なデータストレージのための効率的な列ベースデータの符号化
CN103729429A (zh) 一种基于HBase压缩方法
CN110266316A (zh) 一种数据压缩、解压方法、装置和设备
US10726005B2 (en) Virtual split dictionary for search optimization
CN116244313B (zh) Json数据存储和访问方法、装置、计算机设备及介质
CN104125475A (zh) 一种多维量子数据压缩、解压缩方法及装置
CN111699480A (zh) 数据库系统中的加速过滤、分组和聚合
CN104133883B (zh) 电话号码归属地数据压缩方法
CN112434085A (zh) 基于Roaring Bitmap的用户数据统计方法
CN110021349B (zh) 基因数据的编码方法
CN108259515A (zh) 一种适用于带宽受限下传输链路的无损信源压缩方法
US8918374B1 (en) Compression of relational table data files
Shah et al. Improving I/O throughput with primacy: Preconditioning ID-mapper for compressing incompressibility
Moudani et al. Intelligent data compression approach in multidimensional data warehouse
Otoo et al. Multidimensional Sparse Array Storage for Data Analytics
CN111488439B (zh) 保存和分析日志数据的系统和方法
김상철 An Improved Bitmap Index Compression Scheme
Bača et al. Benchmarking the compression of XML node streams

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110518

Termination date: 20140318