CN106549673A - 一种数据压缩方法及装置 - Google Patents
一种数据压缩方法及装置 Download PDFInfo
- Publication number
- CN106549673A CN106549673A CN201610957573.2A CN201610957573A CN106549673A CN 106549673 A CN106549673 A CN 106549673A CN 201610957573 A CN201610957573 A CN 201610957573A CN 106549673 A CN106549673 A CN 106549673A
- Authority
- CN
- China
- Prior art keywords
- data
- type
- initial form
- value
- given data
- 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.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6011—Encoder aspects
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明属于数据处理技术领域,提供数据压缩方法及装置,旨在解决现有数据压缩方法对各种类型数据压缩形成的压缩包占用空间偏大、进而导致数据交互速度慢、耗时长的问题。相比于现有压缩方法将各种数据类型转成字符串类型压缩存储,本发明实施例充分利用给定的数据或压缩编码后的数据的特点,使给定的数据压缩形成的压缩包占用空间减小,节省了存储的空间,进而在数据交互中加快传输速度,减少传输时间,另外,从压缩和解压缩的动态过程这一角度而言,由于压缩包占用空间减小,则压缩和解压缩的速度也会变快,提高压缩和解压缩的效率,适合用于对大数据的压缩及交互。
Description
技术领域
本发明属于数据处理技术领域,尤其涉及一种数据压缩方法及装置。
背景技术
数据交互在应用程序处理数据的过程中是十分频繁的,例如在金融行业、地理信息系统行业基于软件进行开发、数据处理过程中,对于数据库的操作十分频繁,而数据库都是以结果集的方式进行记录,鉴于庞大的数据(例如海量数据库记录)在传输过程中对执行数据传输的硬件设施(例如CPU、网络带宽等)造成的巨大压力,因此,对结果集进行压缩是不可或缺的。
目前对于数据的压缩方法是将各种数据类型转成字符串类型,进而形成数据包,例如对于结果集的压缩就是如此。此种压缩方式的缺点是压缩形成的数据包占用空间偏大,进而导致数据交互速度慢,耗时长。
发明内容
本发明实施例提供一种数据压缩方法及装置,旨在解决上述现有数据压缩方法对各种类型数据压缩形成的压缩包占用空间偏大,进而导致数据交互速度慢、耗时长的问题。
本发明实施例的第一方面,提供一种数据压缩方法,所述方法包括:
对给定的数据a1,a2,…,ai,…,an,根据所述给定的数据的原始类型判断所述给定的数据是否需要进行压缩编码,所述ai为所述给定的数据中第i个数据,所述ai表示所述给定的数据的一般项,所述n为所述给定的数据的总个数,所述i小于或等于所述n,所述i为正整数变量,所述n为正整数常量;
若判断所述给定的数据需要进行压缩编码,则根据所述原始类型确定所述给定的数据的压缩编码类型;
根据所述原始类型或所述压缩编码类型对所述给定的数据进行存储。
本发明实施例的第二方面,提供一种数据压缩装置,所述装置包括:
判断模块,用于对给定的数据a1,a2,…,ai,…,an,根据所述给定的数据的原始类型判断所述给定的数据是否需要进行压缩编码,所述ai为所述给定的数据中第i个数据,所述ai表示所述给定的数据的一般项,所述n为所述给定的数据的总个数,所述i小于或等于所述n,所述i为正整数变量,所述n为正整数常量;
确定模块,用于若判断所述给定的数据需要进行压缩编码,则根据所述原始类型确定所述给定的数据的压缩编码类型;
存储模块,用于根据所述原始类型或所述压缩编码类型对所述给定的数据进行存储。
本发明实施例与现有技术相比存在的有益效果是:提供一种数据压缩方法,对给定的数据a1,a2,…,ai,…,an,根据所述给定的数据的原始类型判断所述给定的数据是否需要进行压缩编码,所述ai为所述给定的数据中第i个数据,所述ai表示所述给定的数据的一般项,所述n为所述给定的数据的总个数,所述i小于或等于所述n,所述i为正整数变量,所述n为正整数常量;若判断所述给定的数据需要进行压缩编码,则根据所述原始类型确定所述给定的数据的压缩编码类型;根据所述原始类型或所述压缩编码类型对所述给定的数据进行存储。相对于现有技术对于数据的压缩是将各种数据类型转成字符串类型,进而形成数据包,本发明对各种不同类型的数据差别对待,根据数据原始类型判断是否进行压缩编码,例如对于浮点型、双精度型数据进行压缩编码后存储,充分利用各种数据的特点,减少数据存储占用的空间,进而通过利用压缩后的数据包进行数据交互,提高数据交互的速度、效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的数据压缩方法实现流程图;
图2是本发明一实施例提供的利用数据压缩方法压缩结果集后的数据格式示意图;
图3是本发明另一实施例提供的数据压缩装置结构示意图;
图4是本发明另一实施例提供的数据压缩装置结构示意图;
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。
以下描述中,为了说明而不是为了限定,给出了诸多技术特征的说明示意图,以便透切理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的装置以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
本申请技术方案可用于对大数据进行压缩,尤其适合于有规律大数据的压缩,例如海量数据库记录。
为了有效解决现有数据压缩方法对各种类型数据压缩形成的压缩包占用空间偏大,进而导致数据交互速度慢、耗时长的问题。本实施例提供的数据压缩方法,包括:对给定的数据a1,a2,…,ai,…,an,根据所述给定的数据的原始类型判断所述给定的数据是否需要进行压缩编码,所述ai为所述给定的数据中第i个数据,所述ai表示所述给定的数据的一般项,所述n为所述给定的数据的总个数,所述i小于或等于所述n,所述i为正整数变量,所述n为正整数常量;若判断所述给定的数据需要进行压缩编码,则根据所述原始类型确定所述给定的数据的压缩编码类型;根据所述原始类型或所述压缩编码类型对所述给定的数据进行存储。
图1示出了本发明一实施例提供的数据压缩方法实现流程图,为了便于说明,图1仅示出了与本实施例相关的部分,其过程详述如下:
S101,对给定的数据a1,a2,…,ai,…,an,根据所述给定的数据的原始类型判断所述给定的数据是否需要进行压缩编码,所述ai为所述给定的数据中第i个数据,所述ai表示所述给定的数据的一般项,所述n为所述给定的数据的总个数,所述i小于或等于所述n,所述i为正整数变量,所述n为正整数常量;
需要说明的是,给定的数据a1,a2,…,ai,…,an是有限的一列数据,其中各个数据的类型(即给定的数据的原始类型)均可以不同,例如第i个数据ai的类型可以是字符型(char)或短整型(short)或无符号短整型(unsigned short)或整型(int)或无符号整型(unsigned int)或32位整型(int32)或无符号32位整型(unsigned int32)或64位整型(int64)或无符号64位整型(unsigned int64)或浮点型(float)或双精度型(double)或字符串类型或二进制类型等,an中的n为给定的数据的总个数,i小于或等于n,i为正整数变量,n为正整数常量。
可选的是,给定的数据a1,a2,…,ai,…,an中n个数据的类型均相同或存在某个连续数据序列ap-k,ap-(k-1)…,ap-1,ap(例如给定的数据中a3,a4,a5,a6,a7,a8,a9)中每个数据的类型均相同,例如可以是字符型、短整型、无符号短整型、整型、无符号整型、32位整型、无符号32位整型、64位整型、无符号64位整型、浮点型、双精度型、字符串类型和二进制类型中任意一种。
需要说明的是,事实上,给定的数据中连续数据序列ap-k,ap-(k-1)…,ap-1,ap也可以是从原数据序列中间隔抽取的,只要所抽取的数据在项数上具有明确的函数规律,能够快速找到这些数据类型相同的数据即可,例如给定的数据的奇数项或偶数项或a3,a5,a8,a12,a17,a23,a30,a38(符合的规律,其中c=1,2,3,4,5,6,7,8)。
进一步需要说明的是,给定的数据中连续数据序列ap-k,ap-(k-1)…,ap-1,ap也可以重新作为给定的数据a1,a2,…,ai,…,an',只不过和母数据序列相比,数据的个数减少罢了,即n'<n。
若给定的数据ai是字符型或字符串类型或二进制类型或无符号整型或无符号32位整型或无符号64位整型,则不需要进行压缩编码;若给定的数据ai是短整型或无符号短整型或整型或32位整型或64位整型或浮点型或双精度型,则需要进行重新编码。
可选的是,判断是按照一定的顺序进行的,例如依次从前到后或从后向前进行判断。
可选的是,所述给定的数据为二维数据表中字段或由二维数据表中字段转换而来,此时给定的数据的原始类型均是相同的。
S102,若判断所述给定的数据需要进行压缩编码,则根据所述原始类型确定所述给定的数据的压缩编码类型。
若给定的数据ai是短整型或无符号短整型或整型,则需要进行压缩编码,其压缩编码类型为无符号整型;若给定的数据ai是32位整型或浮点型,则需要进行压缩编码,其压缩编码类型为无符号32位整型;若给定的数据ai是64位整型或双精度型,则需要进行重新编码,其压缩编码类型为无符号64位整型。
S103,根据所述原始类型或所述压缩编码类型对所述给定的数据进行存储。
若给定的数据的类型为字符型或字符串类型或二进制类型或无符号整型或无符号32位整型或无符号64位整型,则不需要进行压缩编码,根据原来给定的数据的原始类型进行存储。
若给定的数据的原始类型为字符型,则占1个字节存储,而现有技术中以字符串类型压缩存储要占用2个字节;若给定的数据的原始类型为字符串类型,则去除结束符“\0”后以字符串类型存储,便会节省一个字节的存储空间,例如字符串“baidu”,去除结束符“\0”后占用5个字节存储,而现有技术中字符串要占用6个字节存储;若给定的数据的原始类型为二进制类型,则根据其数据大小确定存储占用的字节数,例如二进制类型数据1010(十进制为10)占用1个字节存储,而现有技术中以字符串类型压缩存储要占用5个字节;若给定的数据的原始类型为无符号整型,一般占用2(16位机)或4(32位机)个字节存储,例如十进制数11200以无符号整型的形式压缩存储占用2(16位机)或4(32位机)个字节,但是如果转成字符串类型压缩存储占用6个字节,可见按照给定的数据的原始类型进行存储,节省了压缩存储占用的空间;无符号32位整型按照给定的数据的原始类型占用4个字节存储,无符号64位整型按照给定的数据的原始类型占用8个字节存储,而如果转成字符串类型压缩存储无符号32位整型或无符号64位整型一般也会增加存储占用的空间,但是以给定的数据的原始类型存储则会减少压缩存储的空间。
需要说明的是,若给定的数据为二进制类型或字符串类型,相同的则只存一个相同的标志,不同的则正常存储。例如字符串“1abba3bba”,则存储1abοa3bοa,其中“ο”表示与前一个相同的标志。
若给定的数据的原始类型为短整型或无符号短整型或整型或32位整型或64位整型,根据压缩编码类型对给定的数据进行存储,前已述及,无符号整型或无符号32位整型或无符号64位整型根据原始类型进行压缩存储相比现有技术中以字符串压缩存储节省了存储空间,因此,根据压缩编码类型对给定的无符号短整型、短整型或整型或32位整型或64位整型数据进行相应压缩编码后存储也会节省存储空间。浮点型通常占用4个字节存储,压缩编码为无符号32位整型;双精度型通常占用8个字节存储,压缩编码为无符号64位整型,因此,压缩编码后的浮点型和双精度型相比现有技术中以字符串压缩存储也会节省存储空间。
相比于现有压缩方法将各种数据类型转成字符串类型压缩存储,本发明实施例根据给定的数据的原始类型或压缩编码类型,充分利用给定的数据或根据压缩编码类型对给定的数据进行压缩编码后的数据的特点,对给定的数据进行压缩存储,节省了存储的空间,使数据压缩形成的压缩包占用空间减小,进而使压缩数据包在数据交互中加快传输速度,减少传输时间。
可选的是,本发明实施例中,若所述原始类型或所述压缩编码类型属于预设的数据类型,则所述根据所述原始类型或所述压缩编码类型对所述给定的数据进行存储可由如下步骤S1031、步骤S1032实现:
需要说明的是,预设的数据类型可为无符号整型或无符号32位整型或无符号64位整型。
S1031,将所述给定的数据的值或按照所述压缩编码类型对所述给定的数据进行所述压缩编码后的数据a1',a'2,…,ai',…,a'n的值与预设范围进行比较,所述ai'是由所述ai进行所述压缩编码而来,所述ai'表示所述压缩编码后的数据的一般项。
若给定的数据的原始类型或压缩编码类型为预设的数据类型,即无符号整型或无符号32位整型或无符号64位整型,则将给定的数据的一般项ai或按照压缩编码类型对所述给定的数据进行压缩编码后的数据的一般项ai'与预设范围进行比较,具体如下:
若给定的数据的原始类型或压缩编码类型为无符号整型,则比较判断ai或ai'的值是否属于[0,27)或[27,214)或[214,221)或[221,228)或[228,235)。
若给定的数据的原始类型或压缩编码类型为无符号32位整型,则比较判断ai或ai'的值是否属于[0,27)或[27,214)或[214,221)或[221,228)或[228,235)。
若给定的数据的原始类型或压缩编码类型为无符号64位整型,则比较判断ai或ai'的值是否属于[0,27)或[27,214)或[214,221)或[221,228)或[228,235)或[235,242)或[242,249)或[249,256)或[256,263)。
S1032,根据所述比较的结果,分配存储空间存储所述给定的数据或所述压缩编码后的数据。
若给定的数据的原始类型或压缩编码类型为无符号整型,则根据ai或ai'的值的大小对其存储空间进行优化,若ai或ai'的值属于[0,27),则对ai或ai'分配1个字节存储空间进行存储;若ai或ai'的值属于[27,214),则对ai或ai'分配2个字节存储空间进行存储;若ai或ai'的值属于[214,221),则对ai或ai'分配3个字节存储空间进行存储;若ai或ai'的值属于[221,228),则对ai或ai'分配4个字节存储空间进行存储;若ai或ai'的值属于[228,235),则对ai或ai'分配5个字节存储空间进行存储。
事实上,给定的数据的原始类型或压缩编码类型为无符号整型,且ai或ai'的值属于[228,235)可能性几乎不存在,因此在16位机器中原来占用2个字节存储的给定的数据或按照压缩编码类型对给定的数据进行压缩编码后的数据,现在可能占1或2个字节存储;在32位机器中原来占用4个字节存储的给定的数据或按照压缩编码类型对给定的数据进行压缩编码后的数据,现在可能占1或2或3或4个字节存储。如此对存储空间进行优化,可以进一步节省数据的存储空间。
若给定的数据的原始类型或压缩编码类型为无符号32位整型,根据ai或ai'的值的大小对其存储空间进行优化,若ai或ai'的值属于[0,27),则对ai或ai'分配1个字节存储空间进行存储;若ai或ai'的值属于[27,214),则对ai或ai'分配2个字节存储空间进行存储;若ai或ai'的值属于[214,221),则对ai或ai'分配3个字节存储空间进行存储;若ai或ai'的值属于[221,228),则对ai或ai'分配4个字节存储空间进行存储;若ai或ai'的值属于[228,235),则对ai或ai'分配5个字节存储空间进行存储。
事实上,给定的数据的原始类型或压缩编码类型为无符号32位整型,且ai或ai'的值属于[228,235)可能性几乎不存在,原来占用4个字节存储的给定的数据或按照压缩编码类型对给定的数据进行压缩编码后的数据,现在可能占1或2或3或4个字节存储。如此对存储空间进行优化,可以进一步节省数据的存储空间。
若给定的数据的类型或压缩编码类型为无符号64位整型,根据ai或ai'的值的大小对其存储空间进行优化,若ai或ai'的值属于[0,27),则对ai或ai'分配1个字节存储空间进行存储;若ai或ai'的值属于[27,214),则对ai或ai'分配2个字节存储空间进行存储;若ai或ai'的值属于[214,221),则对ai或ai'分配3个字节存储空间进行存储;若ai或ai'的值属于[221,228),则对ai或ai'分配4个字节存储空间进行存储;若ai或ai'的值属于[228,235),则对ai或ai'分配5个字节存储空间进行存储;若ai或ai'的值属于[235,242),则对ai或ai'分配6个字节存储空间进行存储;若ai或ai'的值属于[242,249),则对ai或ai'分配7个字节存储空间进行存储;若ai或ai'的值属于[249,256),则对ai或ai'分配8个字节存储空间进行存储;若ai或ai'的值属于[256,263),则对ai或ai'分配9个字节存储空间存储。
事实上,给定的数据的原始类型或压缩编码类型为无符号64位整型,且ai或ai'的值属于[256,263)可能性几乎不存在,原来占用8个字节存储的给定的数据或按照压缩编码类型对给定的数据进行压缩编码后的数据,现在可能占1或2或3或4或5或6或7或8个字节存储。如此对存储空间进行优化,可以进一步节省数据的存储空间。
可选的是,所述存储所述给定的数据或所述压缩编码后的数据,包括:存储所述给定的数据的值和所述原始类型;或者存储所述压缩编码后的数据的值和所述原始类型。
需要说明的是,若给定的数据不进行压缩编码,则存储给定的数据的值和给定的数据的原始类型,如此便于在解压缩时,将压缩后的数据还原为原始类型的数据。
需要说明的是,若给定的数据进行压缩编码,则存储按照所述压缩编码类型对所述给定的数据进行压缩编码后的数据的值和给定的数据的原始类型,存储压缩编码后的数据的值,对于某些数据而言,可节省存储空间;存储给定的数据的原始类型便于数据在解压缩的时,将压缩后的数据还原为原始类型的数据。
可选的是,若所述给定的数据中存在所述原始类型连续相同的数据ap-k,ap-(k-1)…,ap-1,ap或所述压缩编码后的数据中存在所述压缩编码类型连续相同的数据a'p-k,a'p-(k-1)…,a'p-1,a'p,则所述存储所述给定的数据或所述压缩编码后的数据,包括:存储所述ap-k,ap-(k-1)…,ap-1,ap的值和所述ap-k的所述原始类型;或者存储所述a'p-k,a'p-(k-1)…,a'p-1,a'p的值和所述a'p-k的所述原始类型,所述p和所述k均为正整数变量。
需要说明的是,由于ap-k,ap-(k-1)…,ap-1,ap或a'p-k,a'p-(k-1)…,a'p-1,a'p中数据的类型均相同,则只存储第一个数据ap-k或a'p-k的所述给定的数据的原始类型,可节省数据处理时间并进一步节省存储空间。
进一步需要说明的是,由于ai'是由所述ai进行压缩编码而来,故a'p-k是由ap-k进行压缩编码而来,a'p-k的所述给定的数据的原始类型即为给定的数据ap-k的原始类型。
另外需要说明的是,所述p和所述k均为正整数变量,则ap-k,ap-(k-1)…,ap-1,ap或a'p-k,a'p-(k-1)…,a'p-1,a'p的终止数据和序列的长度均可变化,只要ap-k,ap-(k-1)…,ap-1,ap或a'p-k,a'p-(k-1)…,a'p-1,a'p被包含于给定的数据a1,a2,…,ai,…,an或压缩编码后的数据a1',a'2,…,ai',…,a'n中,即可只存储第一个数据ap-k或a'p-k的所述给定的数据的原始类型,没有必要存储ap-(k-1)…,ap-1,ap或a'p-(k-1)…,a'p-1,a'p数据的原始类型。
可选的是,所述存储所述ap-k或者所述a'p-k的所述原始类型,包括:用不同的整型数据或二进制数据表示不同的所述原始类型;对表示所述ap-k或所述a'p-k的所述原始类型的所述整型数据或二进制数据进行存储。
用不同的整型数据或二进制数据表示不同的所述原始类型。例如字符型数据的原始类型用十进制数1表示,字符串型数据的原始类型用十进制数2表示,二进制类型数据的原始类型用十进制数3表示,短整型数据的原始类型用十进制数4表示,无符号短整型数据的原始类型用十进制数5表示,整型数据的原始类型用十进制数6表示,无符号整型数据的原始类型用十进制数7表示,32位整型数据的原始类型用十进制数8表示,无符号32位整型数据的原始类型用十进制数9表示,64位整型数据的原始类型用十进制数10表示,无符号64位整型数据的原始类型用十进制数11表示,浮点型数据的原始类型用十进制数12表示,双精度型数据的原始类型用十进制数13表示;或者字符型数据的原始类型用二进制数1表示,字符串类型数据的原始类型用二进制数10表示,二进制类型数据的原始类型用二进制数11表示,短整型数据的原始类型用二进制数100表示,无符号短整型数据的原始类型用二进制数101表示,整型数据的原始类型用二进制数110表示,无符号整型数据的原始类型用二进制数111表示,32位整型数据的原始类型用二进制数1000表示,无符号32位整型数据的原始类型用二进制数1001表示,64位整型数据的原始类型用二进制数1010表示,无符号64位整型数据的原始类型用二进制数1011表示,浮点型数据的原始类型用二进制数1100表示,双精度型数据的原始类型用二进制数1101表示。
需要说明的是,表示不同原始数据类型采用的十进制数字或二进制数是不同的,即表示每一种原始数据类型采用的十进制数字或二进制数是唯一的。
对表示所述ap-k或所述a'p-k的所述原始类型的所述整型数据或二进制数据进行存储。例如ap-k或a'p-k的所述给定的数据的原始类型为浮点型,则存储十进制的12或二进制的1100,表示数据ap-k或a'p-k为浮点型。
可选的是,若所述给定的数据中存在所述原始类型连续为同一种无符号整数类型的数据ap-k,ap-(k-1)…,ap-1,ap或者所述压缩编码后的数据中存在所述压缩编码类型连续为同一种无符号整数类型的数据a'p-k,a'p-(k-1)…,a'p-1,a'p,则所述存储所述给定的数据或所述压缩编码后的数据,包括:存储所述ap-k的值和所述ap-k的所述原始类型,并存储根据重新计算的所述ai的值的绝对值;或者存储所述a'p-k的值和所述a'p-k的所述原始类型,并存储根据重新计算的ai'的值的绝对值,所述重新计算的ai中i大于或等于p-(k-1),所述重新计算的ai'中i大于或等于p-(k-1),所述p和所述k均为正整数变量。
需要说明的是,无符号整数类型可以是无符号整型,可以是无符号32位整型,也可以是无符号64位整型。
需要说明的是,中当i=p-(k-1)时,ap-(k-1)-ap-k意思是将ap-(k-1)与ap-k的差值重新赋予ap-(k-1),并不是ap-(k-1)=ap-(k-1)-ap-k,从而得出ap-k为0。当i=p-(k-2),……,i=p-1和i=p时,解释同i=p-(k-1)时一样,例如ap-k,ap-(k-1)…,ap-1,ap为a6,a7,a8,即6,8,5,则重新的a7为2,重新计算的a8为-3。
进一步需要说明的是,的解释与相同。
需要说明的是,所述重新计算的ai中i大于或等于p-(k-1),所述重新计算的ai'中i大于或等于p-(k-1),重新计算ai或ai'(i≥p-(k-1))的作用在于减小原来ai或ai'(i≥p-(k-1))的值的大小,例如原来ai或ai'为250214,则重新计算后可能为5,如此可减少分配的存储空间,使得压缩的数据包变小,进一步加快数据交互传输速度,减少传输时间。
需要说明的是,重新计算的ai或ai'(i≥p-(k-1))指的是当p-(k-1)≤i≤p时,ai或ai'的值。
可选的是,所述存储根据重新计算的ai的值的绝对值或者存储根据重新计算的ai'的值的绝对值,包括:存储所述重新计算的ai的值的正负或者存储所述重新计算的ai'的值的正负,所述正负分别用0、1表示或用1、0表示。
需要说明的是,存储所述ap-k或a'p-k的值正负,ap-k或a'p-k的值的正负用0、1表示或用1、0表示。
需要说明的是,存储根据重新计算的所述ai的值的绝对值或者存储根据重新计算的ai'的值的绝对值的同时要存储ai或ai'的正负,因为在数字进行存储时候,是分成数字的值的绝对值和数字的值的正负这两个部分进行存储,数字的值的正负用0、1表示或用1、0表示,存储ai或ai'(i≥p-k)第1个字节的第2个比特位用来表示对差值的处理方式,即正负或加减,如此便于计算机对数据进行存储。
需要说明的是,若所述给定的数据中存在所述原始类型连续相同的数据ap-k,ap-(k-1)…,ap-1,ap或所述压缩编码后的数据中存在所述压缩编码类型连续相同的数据a'p-k,a'p-(k-1)…,a'p-1,a'p,则所述存储所述给定的数据或所述压缩编码后的数据,包括:存储所述ap-k,ap-(k-1)…,ap-1,ap的值和所述ap-k的所述原始类型;或者存储所述a'p-k,a'p-(k-1)…,a'p-1,a'p的值和所述a'p-k的所述原始类型,所述p和所述k均为正整数变量。ap-k或a'p-k的值的正负用0、1表示或用1、0表示,其余与前述解释相同,在此不再赘述。
本发明实施例的方法可以是跨平台的数据压缩算法,其对结果集进行压缩后数据格式为图2所示,Version表示压缩算法的版本号,普通字段用tag+value表示,结果集用tag+size+value表示,tag表示给定的数据的类型,size表示整个结果集的大小,value表示给定的数据的值,diffvalue表示结果集后一条记录与前一条记录的差值。图中的每条记录又可有多个字段组成。第一条记录存储数据的类型tag和数据的值value,第二条记录及以后的记录只存储其与前一条记录的差值diffvalue和对diffvalue的处理方式,即加或减。本说明书以下提供的各个装置实施例也可应用上述关于结果集进行压缩后数据格式的描述。
利用本实施例的方法对结果集进行压缩后,其解压缩过程为:在压缩数据包的基础上,解压缩获得结果集的第一条记录,通过该记录的每个字段存储的数据类型值,便可得知每个字段的数据类型。通过第二条记录的存储的差值和对差值的处理方式可得知第二条记录,依次类推,便可得到所有记录的值。从而进行解压缩。此解压缩过程也可用于装置实施例中。
本发明实施例提供一种数据压缩方法,对给定的数据判断是否需要进行压缩编码,根据给定的数据的原始类型或压缩编码类型对所述给定的数据进行存储。相比于现有压缩方法将各种数据类型转成字符串类型进行压缩存储,本发明实施例充分利用给定的数据或根据压缩编码类型压缩编码后的数据的特点,使得给定的数据压缩形成的压缩包占用空间减小,节省了存储的空间,如此在数据交互中可加快传输速度,减少传输时间,另外,从压缩和解压缩的动态过程这一角度而言,由于压缩包占用空间减小,则压缩和解压缩的速度也会变快,提高压缩和解压缩的效率。
图3示出了本发明另一实施例提供的数据压缩装置结构示意图。为了便于说明,图3仅示出了与本发明实施例相关的部分。图3示例的数据压缩装置包括判断模块201、确定模块202和存储模块203,其中:
判断模块201,用于对给定的数据a1,a2,…,ai,…,an,根据所述给定的数据的原始类型判断所述给定的数据是否需要进行压缩编码,所述ai为所述给定的数据中第i个数据,所述ai表示所述给定的数据的一般项,所述n为所述给定的数据的总个数,所述i小于或等于所述n,所述i为正整数变量,所述n为正整数常量。
需要说明的是,给定的数据a1,a2,…,ai,…,an是有限的一列数据,其中各个数据的类型(即给定的数据的原始类型)均可以不同,例如第i个数据ai的类型可以是字符型(char)或短整型(short)或无符号短整型(unsigned short)或整型(int)或无符号整型(unsigned int)或32位整型(int32)或无符号32位整型(unsigned int32)或64位整型(int64)或无符号64位整型(unsigned int64)或浮点型(float)或双精度型(double)或字符串类型或二进制类型等,an中的n为给定的数据的总个数,i小于或等于n,i为正整数变量,n为正整数常量。
可选的是,给定的数据a1,a2,…,ai,…,an中n个数据的类型均相同或存在某个连续数据序列ap-k,ap-(k-1)…,ap-1,ap(例如给定的数据中a3,a4,a5,a6,a7,a8,a9)中每个数据的类型均相同,例如可以是字符型、短整型、无符号短整型、整型、无符号整型、32位整型、无符号32位整型、64位整型、无符号64位整型、浮点型、双精度型、字符串类型和二进制类型中任意一种。
需要说明的是,事实上,给定的数据中连续数据序列ap-k,ap-(k-1)…,ap-1,ap也可以是从原数据序列中间隔抽取的,只要所抽取的数据在项数上具有明确的函数规律,能够快速找到这些数据类型相同的数据即可,例如给定的数据的奇数项或偶数项或a3,a5,a8,a12,a17,a23,a30,a38(符合的规律,其中c=1,2,3,4,5,6,7,8)。
进一步需要说明的是,给定的数据中连续数据序列ap-k,ap-(k-1)…,ap-1,ap也可以重新作为给定的数据a1,a2,…,ai,…,an',只不过和母数据序列相比,数据的个数减少罢了,即n'<n。
若给定的数据ai是字符型或字符串类型或二进制类型或无符号整型或无符号32位整型或无符号64位整型,则不需要进行压缩编码;若给定的数据ai是短整型或无符号短整型或整型或32位整型或64位整型或浮点型或双精度型,则需要进行重新编码。
可选的是,判断是按照一定的顺序进行的,例如依次从前到后或从后向前进行判断。
可选的是,所述给定的数据为二维数据表中字段或由二维数据表中字段转换而来,此时给定的数据的原始类型均是相同的。
确定模块202,用于若判断所述给定的数据需要进行压缩编码,则根据所述原始类型确定所述给定的数据的压缩编码类型。
若给定的数据ai是短整型或无符号短整型或整型,则需要进行压缩编码,其压缩编码类型为无符号整型;若给定的数据ai是32位整型或浮点型,则需要进行压缩编码,其压缩编码类型为无符号32位整型;若给定的数据ai是64位整型或双精度型,则需要进行重新编码,其压缩编码类型为无符号64位整型。
存储模块203,用于根据所述原始类型或所述压缩编码类型对所述给定的数据进行存储。
若给定的数据的类型为字符型或字符串类型或二进制类型或无符号整型或无符号32位整型或无符号64位整型,则不需要进行压缩编码,根据原来给定的数据的原始类型进行存储。
若给定的数据的原始类型为字符型,则占1个字节存储,而现有技术中以字符串类型压缩存储要占用2个字节;若给定的数据的原始类型为字符串类型,则去除结束符“\0”后以字符串类型存储,便会节省一个字节的存储空间,例如字符串“baidu”,去除结束符“\0”后占用5个字节存储,而现有技术中字符串要占用6个字节存储;若给定的数据的原始类型为二进制类型,则根据其数据大小确定存储占用的字节数,例如二进制类型数据1010(十进制为10)占用1个字节存储,而现有技术中以字符串类型压缩存储要占用5个字节;若给定的数据的原始类型为无符号整型,一般占用2(16位机)或4(32位机)个字节存储,例如十进制数31200以无符号整型的形式压缩存储占用2(16位机)或4(32位机)个字节,但是如果转成字符串类型压缩存储占用6个字节,可见按照给定的数据的原始类型进行存储,节省了压缩存储占用的空间;无符号32位整型按照给定的数据的原始类型占用4个字节存储,无符号64位整型按照给定的数据的原始类型占用8个字节存储,而如果转成字符串类型压缩存储无符号32位整型或无符号64位整型一般也会增加存储占用的空间,但是以给定的数据的原始类型存储则会减少压缩存储的空间。
需要说明的是,若给定的数据为二进制类型或字符串类型,相同的则只存一个相同的标志,不同的则正常存储。例如字符串“1abba3bba”,则存储1abοa3bοa,其中“ο”表示与前一个相同的标志。
若给定的数据的原始类型为短整型或无符号短整型或整型或32位整型或64位整型,根据压缩编码类型对给定的数据进行存储,前已述及,无符号整型或无符号32位整型或无符号64位整型根据原始类型进行压缩存储相比现有技术中以字符串压缩存储节省了存储空间,因此,根据压缩编码类型对给定的无符号短整型、短整型或整型或32位整型或64位整型数据进行相应压缩编码后存储也会节省存储空间。浮点型通常占用4个字节存储,压缩编码为无符号32位整型;双精度型通常占用8个字节存储,压缩编码为无符号64位整型,因此,压缩编码后的浮点型和双精度型相比现有技术中以字符串压缩存储也会节省存储空间。
需要说明的是,以上图3示出的本发明另一实施例提供的数据压缩装置的实施方式中,为描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中可以根据需要,例如相应硬件的配置要求或者软件的实现的便利考虑,而将上述功能分配由不同的功能模块完成,即将数据压缩装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。而且,实际应用中,本实施例中的相应功能模块可以是由相应的硬件实现,也可以由相应的硬件执行相应的软件完成,例如,判断模块,可以是具有执行判断给定的数据是否需要压缩编码的硬件,例如判断器,也可以是能够执行相应计算机程序从而完成检测功能的一般处理器或者其他硬件设备,而且本实施例中的相应功能模块可以进行相应变化位于不同于本实施例的一个或多个实施例装置中。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。(本说明书提供的各个实施例都可应用上述描述原则)。
若所述原始类型或所述压缩编码类型属于预设的数据类型,则图3示出的存储模块203可以包括比较单元301和存储单元302,如图4中示出了本发明另一实施例提供的数据压缩装置结构示意图。其中:
需要说明的是,预设的数据类型可为无符号整型或无符号32位整型或无符号64位整型。
比较单元301,用于将所述给定的数据的值或按照所述压缩编码类型对所述给定的数据进行所述压缩编码后的数据a1',a'2,…,ai',…,a'n的值与预设范围进行比较,所述ai'是由所述ai进行所述压缩编码而来,所述ai'表示所述压缩编码后的数据的一般项。
若给定的数据的原始类型或压缩编码类型为预设的数据类型,即无符号整型或无符号32位整型或无符号64位整型,则将给定的数据的一般项ai或按照压缩编码类型对所述给定的数据进行压缩编码后的数据的一般项ai'与预设范围进行比较,具体如下:
若给定的数据的原始类型或压缩编码类型为无符号整型,则比较判断ai或ai'的值是否属于[0,27)或[27,214)或[214,221)或[221,228)或[228,235)。
若给定的数据的原始类型或压缩编码类型为无符号32位整型,则比较判断ai或ai'的值是否属于[0,27)或[27,214)或[214,221)或[221,228)或[228,235)。
若给定的数据的原始类型或压缩编码类型为无符号64位整型,则比较判断ai或ai'的值是否属于[0,27)或[27,214)或[214,221)或[221,228)或[228,235)或[235,242)或[242,249)或[249,256)或[256,263)。
存储单元302,用于根据所述比较的结果,分配存储空间存储所述给定的数据或所述压缩编码后的数据。
若给定的数据的原始类型或压缩编码类型为无符号整型,则根据ai或ai'的值的大小对其存储空间进行优化,若ai或ai'的值属于[0,27),则对ai或ai'分配1个字节存储空间进行存储;若ai或ai'的值属于[27,214),则对ai或ai'分配2个字节存储空间进行存储;若ai或ai'的值属于[214,221),则对ai或ai'分配3个字节存储空间进行存储;若ai或ai'的值属于[221,228),则对ai或ai'分配4个字节存储空间进行存储;若ai或ai'的值属于[228,235),则对ai或ai'分配5个字节存储空间进行存储。
事实上,给定的数据的原始类型或压缩编码类型为无符号整型,且ai或ai'的值属于[228,235)可能性几乎不存在,因此在16位机器中原来占用2个字节存储的给定的数据或按照压缩编码类型对给定的数据进行压缩编码后的数据,现在可能占1或2个字节存储;在32位机器中原来占用4个字节存储的给定的数据或按照压缩编码类型对给定的数据进行压缩编码后的数据,现在可能占1或2或3或4个字节存储。如此对存储空间进行优化,可以进一步节省数据的存储空间。
若给定的数据的原始类型或压缩编码类型为无符号32位整型,根据ai或ai'的值的大小对其存储空间进行优化,若ai或ai'的值属于[0,27),则对ai或ai'分配1个字节存储空间进行存储;若ai或ai'的值属于[27,214),则对ai或ai'分配2个字节存储空间进行存储;若ai或ai'的值属于[214,221),则对ai或ai'分配3个字节存储空间进行存储;若ai或ai'的值属于[221,228),则对ai或ai'分配4个字节存储空间进行存储;若ai或ai'的值属于[228,235),则对ai或ai'分配5个字节存储空间进行存储。
事实上,给定的数据的原始类型或压缩编码类型为无符号32位整型,且ai或ai'的值属于[228,235)可能性几乎不存在,原来占用4个字节存储的给定的数据或按照压缩编码类型对给定的数据进行压缩编码后的数据,现在可能占1或2或3或4个字节存储。如此对存储空间进行优化,可以进一步节省数据的存储空间。
若给定的数据的类型或压缩编码类型为无符号64位整型,根据ai或ai'的值的大小对其存储空间进行优化,若ai或ai'的值属于[0,27),则对ai或ai'分配1个字节存储空间进行存储;若ai或ai'的值属于[27,214),则对ai或ai'分配2个字节存储空间进行存储;若ai或ai'的值属于[214,221),则对ai或ai'分配3个字节存储空间进行存储;若ai或ai'的值属于[221,228),则对ai或ai'分配4个字节存储空间进行存储;若ai或ai'的值属于[228,235),则对ai或ai'分配5个字节存储空间进行存储;若ai或ai'的值属于[235,242),则对ai或ai'分配6个字节存储空间进行存储;若ai或ai'的值属于[242,249),则对ai或ai'分配7个字节存储空间进行存储;若ai或ai'的值属于[249,256),则对ai或ai'分配8个字节存储空间进行存储;若ai或ai'的值属于[256,263),则对ai或ai'分配9个字节存储空间存储。
事实上,给定的数据的原始类型或压缩编码类型为无符号64位整型,且ai或ai'的值属于[256,263)可能性几乎不存在,原来占用8个字节存储的给定的数据或按照压缩编码类型对给定的数据进行压缩编码后的数据,现在可能占1或2或3或4或5或6或7或8个字节存储。如此对存储空间进行优化,可以进一步节省数据的存储空间。
可选的是,所述存储单元302,包括:存储所述给定的数据的值和所述原始类型;或者存储所述压缩编码后的数据的值和所述原始类型。
需要说明的是,若给定的数据不进行压缩编码,则存储给定的数据的值和给定的数据的原始类型,如此便于在解压缩时,将压缩后的数据还原为原始类型的数据。
需要说明的是,若给定的数据进行压缩编码,则存储按照所述压缩编码类型对所述给定的数据进行压缩编码后的数据的值和给定的数据的原始类型,存储压缩编码后的数据的值,对于某些数据而言,可节省存储空间;存储给定的数据的原始类型便于数据在解压缩的时,将压缩后的数据还原为原始类型的数据。
可选的是,若所述给定的数据中存在所述原始类型连续相同的数据ap-k,ap-(k-1)…,ap-1,ap或所述压缩编码后的数据中存在所述压缩编码类型连续相同的数据a'p-k,a'p-(k-1)…,a'p-1,a'p,则所述存储单元302包括:第一值存储子单元和第一类型存储子单元,值存储子单元,用于存储所述ap-k,ap-(k-1)…,ap-1,ap的值或存储所述a'p-k,a'p-(k-1)…,a'p-1,a'p的值;类型存储子单元,用于存储所述ap-k的所述原始类型或存储所述a'p-k的所述原始类型,所述p和所述k均为正整数变量。
需要说明的是,由于ap-k,ap-(k-1)…,ap-1,ap或a'p-k,a'p-(k-1)…,a'p-1,a'p中数据的类型均相同,则只存储第一个数据ap-k或a'p-k的所述给定的数据的原始类型,可节省数据处理时间并进一步节省存储空间。
进一步需要说明的是,由于ai'是由所述ai进行压缩编码而来,故a'p-k是由ap-k进行压缩编码而来,a'p-k的所述给定的数据的原始类型即为给定的数据ap-k的原始类型。
另外需要说明的是,所述p和所述k均为正整数变量,则ap-k,ap-(k-1)…,ap-1,ap或a'p-k,a'p-(k-1)…,a'p-1,a'p的终止数据和序列的长度均可变化,只要ap-k,ap-(k-1)…,ap-1,ap或a'p-k,a'p-(k-1)…,a'p-1,a'p被包含于给定的数据a1,a2,…,ai,…,an或压缩编码后的数据a1',a'2,…,ai',…,a'n中,即可只存储第一个数据ap-k或a'p-k的所述给定的数据的原始类型,没有必要存储ap-(k-1)…,ap-1,ap或a'p-(k-1)…,a'p-1,a'p数据的原始类型。
可选的是,所述第一类型存储子单元,用于存储所述ap-k或者所述a'p-k的所述原始类型,第一类型存储子单元包括表示单元和第一类型存储次子单元,表示单元,用于用不同的整型数据或二进制数据表示不同的所述原始类型;第一类型存储次子单元,用于对表示所述ap-k或所述a'p-k的所述原始类型的所述整型数据或二进制数据进行存储。
用不同的整型数据或二进制数据表示不同的所述原始类型。例如字符型数据的原始类型用十进制数1表示,字符串型数据的原始类型用十进制数2表示,二进制类型数据的原始类型用十进制数3表示,短整型数据的原始类型用十进制数4表示,无符号短整型数据的原始类型用十进制数5表示,整型数据的原始类型用十进制数6表示,无符号整型数据的原始类型用十进制数7表示,32位整型数据的原始类型用十进制数8表示,无符号32位整型数据的原始类型用十进制数9表示,64位整型数据的原始类型用十进制数10表示,无符号64位整型数据的原始类型用十进制数11表示,浮点型数据的原始类型用十进制数12表示,双精度型数据的原始类型用十进制数13表示或者字符型数据的原始类型用二进制数1表示,字符串类型数据的原始类型用二进制数10表示,二进制类型数据的原始类型用二进制数11表示,短整型数据的原始类型用二进制数100表示,无符号短整型数据的原始类型用二进制数101表示,整型数据的原始类型用二进制数110表示,无符号整型数据的原始类型用二进制数111表示,32位整型数据的原始类型用二进制数1000表示,无符号32位整型数据的原始类型用二进制数1001表示,64位整型数据的原始类型用二进制数1010表示,无符号64位整型数据的原始类型用二进制数1011表示,浮点型数据的原始类型用二进制数1100表示,双精度型数据的原始类型用二进制数1101表示。
需要说明的是,表示不同原始数据类型采用的十进制数字或二进制数是不同的,即表示每一种原始数据类型采用的十进制数字或二进制数是唯一的。
对表示所述ap-k或所述a'p-k的所述原始类型的所述整型数据或二进制数据进行存储。例如ap-k或a'p-k的所述给定的数据的原始类型为浮点型,则存储十进制的12或二进制的1100,表示数据ap-k或a'p-k为浮点型。
可选的是,若所述给定的数据中存在所述原始类型连续为同一种无符号整数类型的数据ap-k,ap-(k-1)…,ap-1,ap或者所述压缩编码后的数据中存在所述压缩编码类型连续为同一种无符号整数类型的数据a'p-k,a'p-(k-1)…,a'p-1,a'p,则所述存储单元302包括第二值存储子单元和第二类型存储子单元,第二值存储子单元,用于存储所述ap-k的值和根据重新计算的所述ai的值的绝对值;或者存储所述a'p-k的值和根据重新计算的ai'的值的绝对值;第二类型存储子单元,用于存储所述ap-k或a'p-k的所述原始类型。所述重新计算的ai中i大于或等于p-(k-1),所述重新计算的ai'中i大于或等于p-(k-1),所述p和所述k均为正整数变量。
需要说明的是,无符号整数类型可以是无符号整型,可以是无符号32位整型,也可以是无符号64位整型。
需要说明的是,中当i=p-(k-1)时,ap-(k-1)-ap-k意思是将ap-(k-1)与ap-k的差值重新赋予ap-(k-1),并不是ap-(k-1)=ap-(k-1)-ap-k,从而得出ap-k为0。当i=p-(k-2),……,i=p-1和i=p时,解释同i=p-(k-1)时一样,例如ap-k,ap-(k-1)…,ap-1,ap为a6,a7,a8,即6,8,5,则重新的a7为2,重新计算的a8为-3。
进一步需要说明的是,的解释与相同。
需要说明的是,所述重新计算的ai中i大于或等于p-(k-1),所述重新计算的ai'中i大于或等于p-(k-1),重新计算ai或ai'(i≥p-(k-1))的作用在于减小原来ai或ai'(i≥p-(k-1))的值的大小,例如原来ai或ai'为250214,则重新计算后可能为5,如此可减少分配的存储空间,使得压缩的数据包变小,进一步加快数据交互传输速度,减少传输时间。
需要说明的是,重新计算的ai或ai'(i≥p-(k-1))指的是当p-(k-1)≤i≤p时,ai或ai'的值。
可选的是,所述第二值存储单元包括符号存储单元,符号存储单元用于存储所述重新计算的ai的值的正负或者存储所述重新计算的ai'的值的正负,所述正负分别用0、1表示或用1、0表示。
需要说明的是,存储所述ap-k或a'p-k的值正负,ap-k或a'p-k的值的正用0、1表示或用1、0表示。
需要说明的是,存储根据重新计算的所述ai的值的绝对值或者存储根据重新计算的ai'的值的绝对值的同时要存储ai或ai'的正负,因为在数字进行存储时候,是分成数字的值的绝对值和数字的值的正负这两个部分进行存储,数字的值的正负用0、1表示或用1、0表示,存储ai或ai'(i≥p-k)第1个字节的第2个比特位用来表示对差值的处理方式,即正负或加减,如此便于计算机对数据进行存储。
需要说明的是,若所述给定的数据中存在所述原始类型连续相同的数据ap-k,ap-(k-1)…,ap-1,ap或所述压缩编码后的数据中存在所述压缩编码类型连续相同的数据a'p-k,a'p-(k-1)…,a'p-1,a'p,则所述存储所述给定的数据或所述压缩编码后的数据,包括:存储所述ap-k,ap-(k-1)…,ap-1,ap的值和所述ap-k的所述原始类型;或者存储所述a'p-k,a'p-(k-1)…,a'p-1,a'p的值和所述a'p-k的所述原始类型,所述p和所述k均为正整数变量。ap-k或a'p-k的值的正负用0、1表示或用1、0表示,其余与前述解释相同,在此不再赘述。
需要说明的是,实施例二和三中各模块/单元之间的信息交互、执行过程等内容及实施例整体内容,由于与本发明方法实施例基于同一构思,其带来的技术效果与本发明方法实施例相同,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
需要说明的是,本发明所有实施例中涉及“第一”、“第二”等词,例如第一类型存储子单元、第二值存储子单元等在此仅为表述和指代的方便,并不意味着在本发明的具体实现方式中一定会有与之对应的第一类型存储子单元和第二值存储子单元。
本领域普通技术人员还可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以在存储于一计算机可读取存储介质中,所述的存储介质,包括ROM/RAM、磁盘、光盘等。
以上内容是结合具体的优选实施方式对本发明原理及实施方式所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明,只是用于帮助理解本发明的方法及其核心思想;同时,对于本发明所属技术领域普通技术人员来说,在不脱离本发明构思前提下做出若干等同替代或明显变型,而且性能或用途相同,都应当视为属于本发明由所提交的权利要求书确定的保护范围。
Claims (10)
1.一种数据压缩方法,其特征在于,所述方法包括:
对给定的数据a1,a2,…,ai,…,an,根据所述给定的数据的原始类型判断所述给定的数据是否需要进行压缩编码,所述ai为所述给定的数据中第i个数据,所述ai表示所述给定的数据的一般项,所述n为所述给定的数据的总个数,所述i小于或等于所述n,所述i为正整数变量,所述n为正整数常量;
若判断所述给定的数据需要进行压缩编码,则根据所述原始类型确定所述给定的数据的压缩编码类型;
根据所述原始类型或所述压缩编码类型对所述给定的数据进行存储。
2.如权利要求1所述的方法,其特征在于,若所述原始类型或所述压缩编码类型属于预设的数据类型,则所述根据所述原始类型或所述压缩编码类型对所述给定的数据进行存储,包括:
将所述给定的数据的值或按照所述压缩编码类型对所述给定的数据进行所述压缩编码后的数据a′1,a'2,…,a′i,…,a'n的值与预设范围进行比较,所述a′i是由所述ai进行所述压缩编码而来,所述a′i表示所述压缩编码后的数据的一般项;
根据所述比较的结果,分配存储空间存储所述给定的数据或所述压缩编码后的数据。
3.如权利要求2所述的方法,其特征在于,所述存储所述给定的数据或所述压缩编码后的数据,包括:
存储所述给定的数据的值和所述原始类型;或者
存储所述压缩编码后的数据的值和所述原始类型。
4.如权利要求2所述的方法,其特征在于,
若所述给定的数据中存在所述原始类型连续相同的数据ap-k,ap-(k-1)…,ap-1,ap或所述压缩编码后的数据中存在所述压缩编码类型连续相同的数据a'p-k,a'p-(k-1)…,a'p-1,a'p,则所述存储所述给定的数据或所述压缩编码后的数据,包括:
存储所述ap-k,ap-(k-1)…,ap-1,ap的值和所述ap-k的所述原始类型;或者
存储所述a'p-k,a'p-(k-1)…,a'p-1,a'p的值和所述a'p-k的所述原始类型,所述p和所述k均为正整数变量。
5.如权利要求4所述的方法,其特征在于,所述存储所述ap-k或者所述a'p-k的所述原始类型,包括:
用不同的整型数据或二进制数据表示不同的所述原始类型;
对表示所述ap-k或所述a'p-k的所述原始类型的所述整型数据或二进制数据进行存储。
6.如权利要求2所述的方法,其特征在于,
若所述给定的数据中存在所述原始类型连续为同一种无符号整数类型的数据ap-k,ap-(k-1)…,ap-1,ap或者所述压缩编码后的数据中存在所述压缩编码类型连续为同一种无符号整数类型的数据a'p-k,a'p-(k-1)…,a'p-1,a'p,则所述存储所述给定的数据或所述压缩编码后的数据,包括:
存储所述ap-k的值和所述ap-k的所述原始类型,并存储根据重新计算的所述ai的值的绝对值;或者
存储所述a'p-k的值和所述a'p-k的所述原始类型,并存储根据重新计算的a′i的值的绝对值,所述重新计算的ai中i大于或等于p-(k-1),所述重新计算的a′i中i大于或等于p-(k-1),所述p和所述k均为正整数变量。
7.如权利要求6所述的方法,其特征在于,所述存储根据重新计算的a的值的绝对值或者存储根据重新计算的a′i的值的绝对值,包括:
存储所述重新计算的ai的值的正负或者存储所述重新计算的ai'的值的正负,所述正负分别用0、1表示或用1、0表示。
8.如权利要求1至7中任意一项所述的方法,其特征在于,所述给定的数据为二维数据表中字段或者由二维数据表中字段转换而来。
9.一种数据压缩装置,其特征在于,所述装置包括:
判断模块,用于对给定的数据a1,a2,…,ai,…,an,根据所述给定的数据的原始类型判断所述给定的数据是否需要进行压缩编码,所述ai为所述给定的数据中第i个数据,所述ai表示所述给定的数据的一般项,所述n为所述给定的数据的总个数,所述i小于或等于所述n,所述i为正整数变量,所述n为正整数常量;
确定模块,用于若判断所述给定的数据需要进行压缩编码,则根据所述原始类型确定所述给定的数据的压缩编码类型;
存储模块,用于根据所述原始类型或所述压缩编码类型对所述给定的数据进行存储。
10.如权利要求9所述的装置,其特征在于,若所述原始类型或所述压缩编码类型属于预设的数据类型,则所述存储模块,包括:
比较单元,用于将所述给定的数据的值或按照所述压缩编码类型对所述给定的数据进行所述压缩编码后的数据a′1,a'2,…,a′i,…,a'n的值与预设范围进行比较,所述a′i是由所述ai进行所述压缩编码而来,所述a′i表示所述压缩编码后的数据的一般项;
存储单元,用于根据所述比较的结果,分配存储空间存储所述给定的数据或所述压缩编码后的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610957573.2A CN106549673B (zh) | 2016-10-27 | 2016-10-27 | 一种数据压缩方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610957573.2A CN106549673B (zh) | 2016-10-27 | 2016-10-27 | 一种数据压缩方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106549673A true CN106549673A (zh) | 2017-03-29 |
CN106549673B CN106549673B (zh) | 2020-02-21 |
Family
ID=58393227
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610957573.2A Active CN106549673B (zh) | 2016-10-27 | 2016-10-27 | 一种数据压缩方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106549673B (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577432A (zh) * | 2017-09-11 | 2018-01-12 | 新浪网技术(中国)有限公司 | 一种证券交易数据压缩方法及装置 |
CN107863968A (zh) * | 2017-10-13 | 2018-03-30 | 国网河北能源技术服务有限公司 | 一种光伏电站出力数据压缩与解压缩的方法 |
CN109410558A (zh) * | 2018-06-20 | 2019-03-01 | 深圳市宏芯达科技有限公司 | 一种红外码智能压缩芯片 |
CN109597588A (zh) * | 2018-12-11 | 2019-04-09 | 浙江中智达科技有限公司 | 一种数据存储方法、数据还原方法及装置 |
CN109995373A (zh) * | 2018-01-03 | 2019-07-09 | 上海艾拉比智能科技有限公司 | 一种整数数组的混合打包压缩方法 |
CN110875743A (zh) * | 2018-08-30 | 2020-03-10 | 捷鼎创新股份有限公司 | 基于抽样猜测的数据压缩方法 |
CN111008230A (zh) * | 2019-11-22 | 2020-04-14 | 远景智能国际私人投资有限公司 | 数据存储方法、装置、计算机设备及存储介质 |
CN111600610A (zh) * | 2020-05-26 | 2020-08-28 | 北京思特奇信息技术股份有限公司 | 一种变长整数的通用编码方法、系统及电子设备 |
CN112527754A (zh) * | 2020-12-23 | 2021-03-19 | 山东鲁能软件技术有限公司 | 基于按位变长存储的数值型数据压缩方法及系统 |
CN115334169A (zh) * | 2022-04-28 | 2022-11-11 | 深圳证券通信有限公司 | 一种节省网络带宽的通信协议编码方法 |
CN116405037A (zh) * | 2023-03-28 | 2023-07-07 | 昆明理工大学 | 一种面向天文星表的压缩预处理编码器、应用 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101008890A (zh) * | 2007-01-30 | 2007-08-01 | 金蝶软件(中国)有限公司 | 整型数据的压缩方法、装置及解压缩方法、装置 |
CN102314697A (zh) * | 2011-07-20 | 2012-01-11 | 张行清 | 基于数据类型的数值型数据压缩及解压缩方法 |
WO2014116712A1 (en) * | 2013-01-22 | 2014-07-31 | Samplify Systems, Inc. | Data compression and decompression using simd instructions |
CN105227634A (zh) * | 2015-08-31 | 2016-01-06 | 徐州工程学院 | 一种基于居民健康档案的二进制数据压缩及加密方法 |
-
2016
- 2016-10-27 CN CN201610957573.2A patent/CN106549673B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101008890A (zh) * | 2007-01-30 | 2007-08-01 | 金蝶软件(中国)有限公司 | 整型数据的压缩方法、装置及解压缩方法、装置 |
CN102314697A (zh) * | 2011-07-20 | 2012-01-11 | 张行清 | 基于数据类型的数值型数据压缩及解压缩方法 |
WO2014116712A1 (en) * | 2013-01-22 | 2014-07-31 | Samplify Systems, Inc. | Data compression and decompression using simd instructions |
CN105227634A (zh) * | 2015-08-31 | 2016-01-06 | 徐州工程学院 | 一种基于居民健康档案的二进制数据压缩及加密方法 |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577432A (zh) * | 2017-09-11 | 2018-01-12 | 新浪网技术(中国)有限公司 | 一种证券交易数据压缩方法及装置 |
CN107863968A (zh) * | 2017-10-13 | 2018-03-30 | 国网河北能源技术服务有限公司 | 一种光伏电站出力数据压缩与解压缩的方法 |
CN107863968B (zh) * | 2017-10-13 | 2021-01-08 | 国网河北能源技术服务有限公司 | 一种光伏电站出力数据压缩与解压缩的方法 |
CN109995373A (zh) * | 2018-01-03 | 2019-07-09 | 上海艾拉比智能科技有限公司 | 一种整数数组的混合打包压缩方法 |
CN109995373B (zh) * | 2018-01-03 | 2023-08-15 | 上海艾拉比智能科技有限公司 | 一种整数数组的混合打包压缩方法 |
CN109410558A (zh) * | 2018-06-20 | 2019-03-01 | 深圳市宏芯达科技有限公司 | 一种红外码智能压缩芯片 |
CN109410558B (zh) * | 2018-06-20 | 2023-12-12 | 深圳市宏芯达科技有限公司 | 一种红外码智能压缩芯片 |
CN110875743A (zh) * | 2018-08-30 | 2020-03-10 | 捷鼎创新股份有限公司 | 基于抽样猜测的数据压缩方法 |
CN110875743B (zh) * | 2018-08-30 | 2023-04-28 | 上海川源信息科技有限公司 | 基于抽样猜测的数据压缩方法 |
CN109597588A (zh) * | 2018-12-11 | 2019-04-09 | 浙江中智达科技有限公司 | 一种数据存储方法、数据还原方法及装置 |
CN111008230B (zh) * | 2019-11-22 | 2023-08-04 | 远景智能国际私人投资有限公司 | 数据存储方法、装置、计算机设备及存储介质 |
CN111008230A (zh) * | 2019-11-22 | 2020-04-14 | 远景智能国际私人投资有限公司 | 数据存储方法、装置、计算机设备及存储介质 |
CN111600610A (zh) * | 2020-05-26 | 2020-08-28 | 北京思特奇信息技术股份有限公司 | 一种变长整数的通用编码方法、系统及电子设备 |
CN112527754A (zh) * | 2020-12-23 | 2021-03-19 | 山东鲁能软件技术有限公司 | 基于按位变长存储的数值型数据压缩方法及系统 |
CN115334169A (zh) * | 2022-04-28 | 2022-11-11 | 深圳证券通信有限公司 | 一种节省网络带宽的通信协议编码方法 |
CN115334169B (zh) * | 2022-04-28 | 2023-06-06 | 深圳证券通信有限公司 | 一种节省网络带宽的通信协议编码方法 |
CN116405037A (zh) * | 2023-03-28 | 2023-07-07 | 昆明理工大学 | 一种面向天文星表的压缩预处理编码器、应用 |
CN116405037B (zh) * | 2023-03-28 | 2024-04-30 | 昆明理工大学 | 一种面向天文星表的压缩预处理编码器、应用 |
Also Published As
Publication number | Publication date |
---|---|
CN106549673B (zh) | 2020-02-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106549673A (zh) | 一种数据压缩方法及装置 | |
CN103995887B (zh) | 位图索引压缩方法和位图索引解压方法 | |
CN102457283B (zh) | 一种数据压缩、解压缩方法及设备 | |
CN109558400A (zh) | 数据处理方法、装置、设备和存储介质 | |
CN108416427A (zh) | 卷积核堆积数据流、压缩编码以及深度学习算法 | |
CN108197324B (zh) | 用于存储数据的方法和装置 | |
US6396420B1 (en) | Delta compression of floating point coordinate data | |
CN106557571A (zh) | 一种基于k‑v存储引擎的数据去重方法及装置 | |
CN109271456A (zh) | 主机数据库文件导出方法及装置 | |
CN101482839B (zh) | 电子文档增量存储处理方法 | |
CN113741858A (zh) | 存内乘加计算方法、装置、芯片和计算设备 | |
CN103455555A (zh) | 基于移动终端相似度的推荐方法及推荐装置 | |
US10437825B2 (en) | Optimized data condenser and method | |
CN116594572A (zh) | 浮点数流式数据压缩方法、装置、计算机设备及介质 | |
CN116610731B (zh) | 一种大数据分布式存储方法、装置、电子设备及存储介质 | |
CN114268323A (zh) | 支持行存的数据压缩编码方法、装置及时序数据库 | |
CN112434085A (zh) | 基于Roaring Bitmap的用户数据统计方法 | |
CN116842304A (zh) | 一种不规则稀疏矩阵的计算方法及系统 | |
CN105938469A (zh) | 编码存储方法、文本存储数据结构以及文本压缩存储和统计输出方法 | |
WO2016119508A1 (zh) | 基于Spark系统的大规模对象识别方法 | |
CN104090895B (zh) | 获取基数的方法、装置、服务器及系统 | |
CN113495901B (zh) | 一种面向可变长数据块的快速检索方法 | |
CN111752954B (zh) | 一种大规模特征数据存储的方法及装置 | |
CN110111852A (zh) | 一种海量dna测序数据无损快速压缩平台 | |
CN107729577A (zh) | 一种基于多维哈希表的数据查找方法、终端设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |