一种无损数据压缩的数据保护方法和装置与流程

文档序号:16207646发布日期:2018-12-08 07:19阅读:282来源:国知局
一种无损数据压缩的数据保护方法和装置与流程

本发明涉及数据压缩和解压缩技术以及数据完整性校验技术领域,具体为一种无损数据压缩的数据保护方法和装置。

背景技术

随着各行各业大数据、云计算业务的蓬勃发展,数据中心已经发展成为现实规模巨大、未来前景广阔的核心支柱产业。然而全世界数据量按照“数据摩尔定律”日益快速膨胀,数据中心设备成本以及电力成本等相关运营成本随之持续快速增长。数据中心不仅基建、设备投资巨大,电力成本也非常惊人。无损数据压缩技术可在不丢失任何数据信息的同时大幅压缩存储空间需求,从而大幅节约服务器、磁盘阵列等设备成本以及数据中心空间、用电等运维成本。由于已知的或者未知的软件或硬件缺陷(bug),无损压缩后的数据存在无法解压缩的可能性,会引起用户数据的丢失,这在高可靠性要求的数据中心中是不能接受的。因此,需要一种无损数据压缩的数据保护方法和装置,以确保数据的完整性。

现有技术如公开号为cn201611006972的发明公开了一种压缩方法及相关装置,其方法包括:获取原始数据;对原始数据进行压缩,得到压缩结果;对压缩结果进行解压缩,得到解压缩结果;校验解压缩结果与原始数据是否一致;若一致,输出压缩结果;若不一致,输出原始数据。该发明提供的方案,在压缩原始数据之后和存储之前,会对压缩结果进行解压缩,并校验解压缩结果与原始数据,若两者一致则输出压缩结果,即对压缩结果进行存储。否则抛弃压缩结果而输出原始数据,对原始数据进行存储,避免了解压缩后得到的数据可能和原始数据存在不一致的现象的发生。但该技术在对数据压缩和校验时存在以下问题:1、针对所有原始数据,在未考虑数据是否适合压缩的情况下直接进行压缩操作,存在一定盲目性,不利于数据的完整性保护,也会降低数据压缩的工作效率;2、在校验解压缩数据与原始数据结果不一致时输出原始数据并进行保存,而非直接输出一个校验结果,不仅降低了数据压缩的工作效率,而且需要增加额外存储空间进行原始数据的存储,造成了成本增加的问题。



技术实现要素:

本发明的目的在于提供一种无损数据压缩的数据保护方法和装置,以解决上述背景技术中提出的现有数据压缩和完整性保护技术中存在的数据压缩工作效率低,且成本较高的问题。

为实现上述目的,本发明提供如下技术方案:

一种无损数据压缩的数据保护方法,该方法包括以下步骤:

s1、获取原始数据;

s2、原始数据经过数据压缩模块进行压缩形成压缩数据,并输出压缩数据;

s3、压缩数据经过数据解压缩模块解压缩得到解压数据;

s4、在一个或多个数据校验模块内对原始数据和解压数据进行对比分析是否一致;以及

s5、若原始数据和解压数据一致则输出数据完整性保护标志;否则任何不一致输出数据是不完整的警告。

优选的,还包括对s1的原始数据按照特定的长度进行切块,形成原始数据块,s2中原始数据即为原始数据块。

优选的,还包括对s2的输出的压缩数据的数据长度进行检测,判断压缩数据的数据长度是否比原始数据的数据长度小,若是输出数据可压缩标志,否则输出原始数据不可压缩标志。

优选的,还包括对s1的原始数据按照特定的长度进行切块和对s2的输出的压缩数据的数据长度进行检测,判断压缩数据的数据长度是否比原始数据的数据长度小,若是输出数据可压缩标志,否则输出原始数据不可压缩标志。

优选的,所述s2中对原始数据进行压缩采用的算法包括但不限于为lzo压缩算法、snappy压缩算法、lz4压缩算法、gzip压缩算法、zlib压缩算法、zstandard压缩算法、lzw压缩算法和huffman压缩算法中的任意一种或多种。

优选的,s4中对原始数据和解压缩后的数据进行对比分析的方法为将原始数据与压缩并解压缩后的数据逐一比较。

优选的,所述s4中对原始数据和解压缩数据进行对比分析的方法为将原始数据和压缩并解压缩后的数据通过同样算法的散列函数后,再将两个散列函数的输出作对比。

优选的,所述s4中对原始数据和解压缩数据进行对比分析的方法为将原始数据和压缩并解压缩后的数据通过至少n个不同算法的散列函数后,再将2n个散列函数的输出两两作对比,n≥2。

更为优选的,还包括s4中对原始数据和解压缩后的数据进行对比分析的方法为将原始数据与压缩并解压缩后的数据逐一比较,此时所述n≥1。

本发明还公开了一种无损数据压缩的数据保护装置,其包括:

原始数据获取模块,获取原始数据;

数据压缩模块,原始数据经过数据压缩模块进行压缩形成压缩数据,并输出压缩数据;数据解压模块,压缩数据经过数据解压缩模块解压缩得到解压数据;以及

数据校验模块,在一个或多个校验模块内对原始数据和解压数据进行对比分析是否一致;

其中,若原始数据和解压数据一致则输出数据完整性保护标志;否则任何不一致输出数据是不完整的警告。

优选的,还包括数据切块模块,对原始数据按照特定的长度进行切块,形成原始数据块。

优选的,还包括数据长度检测模块,输出的压缩数据的数据长度进行检测,判断压缩数据的数据长度是否比原始数据的数据长度小,若是输出数据可压缩标志,否则输出原始数据不可压缩标志。

优选的,还包括数据切块模块,对原始数据按照特定的长度进行切块和数据长度检测模块,输出的压缩数据的数据长度进行检测,判断压缩数据的数据长度是否比原始数据的数据长度小,若是输出数据可压缩标志,否则输出原始数据不可压缩标志。

优选的,所述数据压缩模块包括但不限于集成有lzo压缩算法模块、snappy压缩算法模块、lz4压缩算法模块、gzip压缩算法模块、zlib压缩算法模块、zstandard压缩算法模块、lzw压缩算法模块和huffman压缩算法模块的压缩工具中的任意一种或多种。

优选的,所述数据校验模块为将原始数据与压缩并解压缩后的数据逐一比较的校验结构。

优选的,所述数据校验模块为将原始数据和压缩并解压缩后的数据通过同样算法的散列函数后,再将两个散列函数的输出作对比的校验结构。

优选的,所述数据校验模块为将原始数据和压缩并解压缩后的数据通过至少n个不同算法的散列函数后,再将2n个散列函数的输出两两作对比,n≥2,用于对原始数据和解压缩数据进行对比分析。

优选的,数据校验模块还包括将原始数据与压缩并解压缩后的数据逐一比较,此时所述n≥1,用于s4中对原始数据和解压缩后的数据进行对比分析。

优选的,所述原始数据获取模块的输入端通过高速串行总线连接文件系统,所述数据压缩模块和数据校验模块的输出端均通过高速串行总线连接文件系统。

与现有技术相比,本发明的有益效果是:本发明的无损数据压缩的数据保护方法和装置,不仅具备现有技术中数据的无损压缩和数据完整性保护,还存在以下优点:

1、在对解压缩数据和原始数据进行校验后,根据校验结果直接输出数据完整性保护标志或直接发出数据不完整的警告,这样就避免了在校验失败后输出原始数据并存储所造成的浪费设备内部存储空间的问题。

2、增加了原始数据能否被压缩的检测,在数据压缩后对压缩数据进行数据长度检测判断原始数据是否能被压缩,避免了直接对所有原始数据进行压缩、解压缩和校验时存在的盲目性,提高了数据压缩的工作效率;

3、对于较大的原始数据,提前对原始数据进行数据分块处理,后续工作直接以数据块为单位处理,提高了数据压缩、解压缩和检验的效率;

本发明的技术方案整体上提高了数据压缩和校验的效率,也在一定程度上降低了成本。

附图说明

图1为本发明中无损数据压缩的数据保护方法流程图;

图2为本发明中无损数据压缩的数据保护系统第一种结构示意图;

图3为本发明中无损数据压缩的数据保护系统第二种结构示意图;

图4为本发明中无损数据压缩的数据保护系统第三种结构示意图;

图5为本发明中无损数据压缩的数据保护系统第四种结构示意图;

图6为本发明中数据校验模块第一种结构示意图;

图7为本发明中数据校验模块第二种结构示意图;

图8为本发明中数据校验模块第三种结构示意图;

图9为本发明中数据校验模块第四种结构示意图。

图10为本发明中无损数据压缩的数据保护系统第五种结构示意图

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例1

系统通过获取原始数据模块,获取原始的未压缩的数据。原始数据可以并行地同时给到数据压缩模块和数据校验模块。数据压缩模块应用无损压缩算法,将原始数据压缩成压缩数据,并将无损压缩后的数据输出。但是,由于已知的或者未知的软件或硬件缺陷(bug),无损压缩后的数据存在无法解压缩的可能性,会引起用户数据的丢失,这在可靠性要求高的场景下是无法接受的。因此,无损压缩后的数据经过数据解压模块解压缩,得到解压数据,所使用的解压算法是无损压缩算法的逆过程。若系统可靠,原始数据与解压数据应完全一致。数据校验模块接收原始数据和解压数据。在一个或多个数据校验模块内,使用不同的方法,进行数据校验,输出数据完整性结果。

实施例2

与上述实施例的区别为:系统通过获取原始数据模块,获取原始的未压缩的数据。由于装置内部的存储容量有限,通过数据切块模块,对原始数据按照特定的长度切块,形成原始数据块。特定的切块长度通常是2的n次方字节,如32kb,64kb,128kb,256kb,512kb,1mb,2mb,4mb等。数据切块后,数据压缩模块、数据解压缩模块和数据校验模块的输入和输出数据都是切块的。这样,装置内部的存储容量可根据切块的大小,做相应的缩减。数据压缩模块应用无损压缩算法,将原始数据块压缩成压缩数据块,并将无损压缩后的数据块输出。无损压缩后的数据块经过数据解压模块解压缩,得到解压数据块,所使用的解压算法是无损压缩算法的逆过程。若系统可靠,原始数据块与解压数据块应完全一致。数据校验模块接收原始数据块和解压数据块。在一个或多个数据校验模块内,使用不同的方法,进行数据校验,输出数据完整性结果。

实施例3

与上述实施例的区别为:系统通过获取原始数据模块,获取原始的未压缩的数据。原始数据可以并行地同时给到数据压缩模块和数据校验模块。数据压缩模块应用无损压缩算法,将原始数据压缩成压缩数据,并将无损压缩后的数据输出。对于一部分数据,如已经被高度有损压缩过的x.265格式的视频数据,已无法被无损压缩,无损压缩后的数据长度可能比原始数据长度更大。数据长度检测模块对压缩后的数据长度进行检测,判断压缩数据的数据长度是否比原始数据的数据长度小。若是输出数据可压缩标志,可设置独立标志,亦可用输出压缩后的数据长度表示可压缩标志。否则输出原始数据不可压缩标志。数据是否能被压缩,不是选择输出原始数据或者压缩数据的判断标准。因为要等到压缩结束才能知道原始数据是否能被压缩,原始数据必然需要一直存在设备内部,一直等到压缩结束且数据可被压缩才能被释放。这样在前一个原始数据未完成压缩时,后一个原始数据不能进入数据压缩模块,降低了数据压缩模块的利用率。当然,通过增加设备内部的额外的存储空间,也可以实现在前一个原始数据未完成压缩时,后一个原始数据进入数据压缩模块,其代价是存储空间增加带来的额外成本。

无损压缩后的数据经过数据解压模块解压缩,得到解压数据,所使用的解压算法是无损压缩算法的逆过程。若系统可靠,原始数据与解压数据应完全一致。数据校验模块接收原始数据和解压数据。在一个或多个数据校验模块内,使用不同的方法,进行数据校验,输出数据完整性结果。

实施例4

与上述实施例的区别为:系统通过获取原始数据模块,获取原始的未压缩的数据。由于装置内部的存储容量有限,通过数据切块模块,对原始数据按照特定的长度切块,形成原始数据块。特定的切块长度通常是2的n次方字节,如32kb,64kb,128kb,256kb,512kb,1mb,2mb,4mb等。数据切块后,数据压缩模块、数据解压缩模块、数据校验模块、数据长度检测模块的输入和输出数据都是切块的。这样,装置内部的存储容量可根据切块的大小,做相应的缩减。原始数据块可以并行地同时给到数据压缩模块和数据校验模块。数据压缩模块应用无损压缩算法,将原始数据块压缩成压缩数据块,并将无损压缩后的数据块输出。对于一部分数据,如已经被高度有损压缩过的x.265格式的视频数据,已无法被无损压缩,无损压缩后的数据长度可能比原始数据长度更大。数据长度检测模块对压缩后的数据长度进行检测,判断压缩数据块的数据长度是否比原始数据块的数据长度小。若是输出数据可压缩标志,可设置独立标志,亦可用输出压缩后的数据长度表示可压缩标志。否则输出原始数据不可压缩标志。数据是否能被压缩,不是选择输出原始数据或者压缩数据的判断标准。因为要等到压缩结束才能知道原始数据是否能被压缩,原始数据块必然需要一直存在设备内部,一直等到压缩结束且数据可被压缩才能被释放。这样在前一个原始数据块未完成压缩时,后一个原始数据块不能进入数据压缩模块,降低了数据压缩模块的利用率。当然,通过增加设备内部的额外的存储空间,也可以实现在前一个原始数据块未完成压缩时,后一个原始数据块进入数据压缩模块,其代价是存储空间增加带来的额外成本。

无损压缩后的数据块经过数据解压模块解压缩,得到解压数据块,所使用的解压算法是无损压缩算法的逆过程。若系统可靠,原始数据块与解压数据块应完全一致。数据校验模块接收原始数据块和解压数据块。在一个或多个数据校验模块内,使用不同的方法,进行数据校验,输出数据完整性结果。

实施例5

与上述实施例的区别为:实施例1-4任意一项所述的数据压缩算法,包括但不限于为lzo压缩算法、snappy压缩算法、lz4压缩算法、gzip压缩算法、zlib压缩算法、zstandard压缩算法、lzw压缩算法和huffman压缩算法中的任意一种或多种。实施例1-4任意一项所述的数据解压缩算法,使用相同压缩算法的逆过程。

由于不同的无损压缩算法,关注在原始数据冗余的不同方面,使用算法的多种的组合可能能够达到更好的压缩效果。例如,lzo压缩算法关注在将原始数据中重复的部分寻找出来,并对于重复的部分采用引用的方式编码,以去除原始数据的冗余;huffman压缩算法关注在字符出现的频次,将出现频次多的字符用较少的码字表示,以去除原始数据冗余。将lzo压缩算法和huffman压缩算法结合起来,原始数据先经过lzo压缩算法,然后再经过huffman压缩算法,能够达到更好的压缩效果。相应的解压时,压缩后的数据先经过huffman解压缩算法,然后再经过lzo解压缩算法,得到解压数据。若系统可靠,原始数据与解压数据应完全一致。

实施例6

与上述实施例的区别为:实施例1-4任意一项所述的数据校验模块,校验方法是将原始数据和解压缩后的数据逐一进行对比。在实施中,通常可以按照比特、单字节、双字节、四字节、八字节、16字节、32字节、64字节或128字节为单位,进行比较。比较的操作可以使用异或门,两者相同时,输出为零,代表数据完整;两者不同时,输出为一,代表数据不一致。在校验过程中,只要出现一次数据不一致,当前数据或数据块即是不完整的。本系统的上层收到数据不完整的警告后,可采取重新压缩、其他代替方法压缩或放弃压缩等方法。

实施例7

与上述实施例的区别为:实施例1-4任意一项所述的数据校验模块,校验方法是将原始数据和解压缩后的数据,通过同样算法的散列函数后,再将散列函数的输出做对比。

散列函数(英语:hashfunction)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。

所有散列函数都有如下一个基本特性:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具有确定性的结果,具有这种性质的散列函数称为单向散列函数。但另一方面,散列函数的输入和输出不是唯一对应关系的,如果两个散列值相同,两个输入值很可能是相同的,但也可能不同,这种情况称为“杂凑碰撞(collision)”,这通常是两个不同长度的输入值,刻意计算出相同的输出值。输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不同的散列值。

本系统所使用的散列函数包括但不限于md5,sha1,sha2,sha3,sha256,sha512,crc16,crc32,crc64。以md5为例,如果原始数据是“abcdefghijklmnopqrstuvwxyz1234567890”,原始数据经过md5的散列函数后,其输出是“016fd69cdbf285d51490d1ff753b7436”。如果系统是可靠地,原始数据经过压缩并解压缩后的数据,也应当是“abcdefghijklmnopqrstuvwxyz1234567890”,经过md5的散列函数后,其输出也是“016fd69cdbf285d51490d1ff753b7436”。经过比较,两者是一致的,输出数据完整性保护标志。如果系统中某处存在缺陷,导致系统不可靠,造成原始数据经过压缩并解压缩后的数据,变成了“abcdefghijklmnopqrstuvwxyz1234567890”,经过md5的散列数列后,其输出是“7aabf3ca6c4eae8ebb4106c5c119f083”。经过比较,两者是不一致的,输出数据不完整的警告。本系统的上层收到数据不完整的警告后,可采取重新压缩、其他代替方法压缩或放弃压缩等方法。

实施例8

与上述实施例的区别为:实施例1-4任意一项所述的数据校验模块,校验方法是将原始数据和解压缩后的数据,通过两个或两个以上不同算法的散列函数后,再将散列函数的输出两两做对比。

由于存在杂凑碰撞,不同的输入值通过同样的散列函数有可能得到同样的输出,从而得到错误的结果。以多项式为0x741b8cd7的crc-32为例,16360比特以内的汉明距离是6,114663比特以内的汉明距离是4。这意味着对于一个长度为114663比特的数据,在某种特定组合下,其中的4个比特发生错误,crc-32会检测不出来错误。因此,在安全性、可靠性要求高的场合,使用更大长度的散列函数。但是更大长度的散列函数的复杂度更高,例如crc32的复杂度是crc16的四倍。本实施例使用两个或两个以上不同的散列函数,既能够提高检测率,又能避免大幅度提高软硬件复杂度。

以散列算法1使用md5,散列算法2使用sha1为例。如果原始数据是“abcdefghijklmnopqrstuvwxyz1234567890”,原始数据经过md5的散列函数后,其输出是“016fd69cdbf285d51490d1ff753b7436”。原始数据经过sha1的散列函数后,其输出是“29b5f3f37eb625ee198e36381dc87b9197eec9e7”。如果系统是可靠地,原始数据经过压缩并解压缩后的数据,也应当是“abcdefghijklmnopqrstuvwxyz1234567890”,经过md5的散列函数后,其输出也是“016fd69cdbf285d51490d1ff753b7436”;经过sha1的散列函数后,其输出是“29b5f3f37eb625ee198e36381dc87b9197eec9e7”。将md5输出的两个结果比较,并且将sha1输出的两个结果比较,两个比较结果都是一致的,输出数据完整性保护标志。

如果系统中某处存在缺陷,导致系统不可靠,造成原始数据经过压缩并解压缩后的数据,变成了“abcdefghijklmnopqrstuvwxyz1234567890”,经过md5的散列数列后,其输出是“7aabf3ca6c4eae8ebb4106c5c119f083”;经过sha1的散列函数后,其输出是“2cff99a65de5c05f56f6666a35633c9be4c7728e”。将md5输出的两个结果比较,并且将sha1输出的两个结果比较,只要其中一个比较结果是不一致,输出数据不完整的警告。本系统的上层收到数据不完整的警告后,可采取重新压缩、其他代替方法压缩或放弃压缩等方法。

实施例9

与上述实施例的区别为:在需要极高可靠性的系统中,可以在通过两个或两个以上不同算法的散列函数的方法的基础上,增加将原始数据和解压缩后的数据逐一进行对比的方法。原始数据和解压缩后的数据逐一进行对比的方法参考实施例6,使用两个或两个以上不同算法的散列函数的方法参考实施例8。以散列算法1使用md5,散列算法2使用sha1为例。将md5输出的两个结果比较,将sha1输出的两个结果比较,将原始数据和解压缩后的数据逐一进行对比,三个比较结果都是一致的,输出数据完整性保护标志。只要其中一个比较结果是不一致,输出数据不完整的警告。本系统的上层收到数据不完整的警告后,可采取重新压缩、其他代替方法压缩或放弃压缩等方法。

实施例10

与上述实施例的区别为:无损数据压缩的数据保护装置,获取原始数据模块的输入端通过高速串行总线连接文件系统,数据压缩模块和数据校验模块的输出端通过高速串行总线连接文件系统。高速串行总线包括但不限于pciexpress、usb、sata、rapidio、m.2、nvme。在实际使用时,可以使用文件系统管理原始数据和无损压缩后的数据。对于缺陷的定位和数据的后续处理,由文件系统做出判断和管理。本系统的文件系统包括但不限于fat32,ntfs,ext2,ext3,ext4,nfs。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1