本发明涉及数据压缩技术领域,特别是涉及一种数据压缩方法及装置。
背景技术:
随着数据压缩技术的发展,较大地缩减了存储系统中的数据量,从而减少了存储空间,提高了系统传输、存储和处理效率。
现有的数据压缩的方法主要包括两种,方法一是定长块数据到定长块数据的压缩,如图1所示,比如64kb的块数据压缩成8kb的整数倍,或者将8kb的块数据压缩成1kb的整数倍。将主机下发的块数据切分成8kb对齐的块数据,若不对齐则进行补齐读,使待压缩块数据圆整成8kb,然后将8kb的块数据进行压缩,压缩后的块数据按照1kb向上圆整,比如压缩后的块数据是1.1kb,则按照2kb进行存储。通过圆整的方式,解决压缩后的块数据变长带来的逻辑盘上的空间分配的碎片问题。方法二是变长块数据到定长块数据的压缩,如图2所示,将同一时间内主机下发的多个块数据拼接成一个大的块数据进行压缩,压缩后的块数据按照固定的粒度8kb存储到下面的逻辑盘上。
以上两种数据压缩方法均存在一定的缺点,其中,方法一压缩后的块数据是定长的,必须以一定的粒度进行圆整,存在较大的空间浪费,影响数据的压缩效率。其次,方法二由于各块数据的长度不同,所以需要记录各块数据包括各块数据输入到压缩处理器的地址的元数据信息,元数据的索引复杂。
技术实现要素:
为解决上述技术问题,本发明提供如下技术方案:
一种数据压缩方法,包括:
接收按照预设的第一长度输入的待压缩的块数据;
对所述块数据进行压缩,获得压缩后的压缩块数据;
将所述压缩块数据在预设的多个物理卷中按照压缩顺序进行衔接排布,获得衔接压缩块数据;
将所述衔接压缩块数据划分给多个长度为预设的第二长度的数据块,以使系统以所述数据块为单位进行空间释放;
其中,所述第二长度为对所述衔接压缩块数据进行存储的磁盘阵列条带的长度的整数倍。
在本发明的一种具体实施方式中,所述接收按照预设的第一长度输入的待压缩的块数据,包括:
接收通过补齐读的方式按照预设的第一长度输入的待压缩的块数据。
在本发明的一种具体实施方式中,所述对所述块数据进行压缩,包括:
利用在线无损压缩的方式对所述块数据进行压缩。
在本发明的一种具体实施方式中,在所述将所述衔接压缩块数据划分给多个长度为预设的第二长度的数据块之后,还包括:
为每个数据块设置相应的元数据区;
将每个数据块中所述衔接压缩块数据的元数据信息存储到对应的元数据区中;
其中,所述元数据信息包括每个第一长度的待压缩的块数据的地址与对应的所述衔接压缩块数据所在的物理卷的id和所述物理卷的地址的对应关系。
在本发明的一种具体实施方式中,所述系统以所述数据块为单位进行空间释放,包括:
针对每个数据块判断所述对应关系是否均发生改变;
如果是,则确定所述数据块中的各所述衔接压缩块数据为无效块数据;
将所述数据块进行空间释放。
一种数据压缩装置,包括:
块数据接收模块,用于接收按照预设的第一长度输入的待压缩的块数据;
块数据压缩模块,用于对所述块数据进行压缩,获得压缩后的压缩块数据;
衔接压缩块数据获得模块,用于将所述压缩块数据在预设的多个物理卷中按照压缩顺序进行衔接排布,获得衔接压缩块数据;
数据块划分模块,用于将所述衔接压缩块数据划分给多个长度为预设的第二长度的数据块,以使系统以所述数据块为单位进行空间释放;
其中,所述第二长度为对所述衔接压缩块数据进行存储的磁盘阵列条带的长度的整数倍。
在本发明的一种具体实施方式中,所述块数据接收模块具体为接收通过补齐读的方式按照预设的第一长度输入的待压缩的块数据的模块。
在本发明的一种具体实施方式中,所述块数据压缩模块具体为利用在线无损压缩的方式对所述块数据进行压缩的模块。
在本发明的一种具体实施方式中,还包括:
元数据区设置模块,用于在所述将所述衔接压缩块数据划分给多个长度为预设的第二长度的数据块之后,为每个数据块设置相应的元数据区;
信息存储模块,用于将每个数据块中所述衔接压缩块数据的元数据信息存储到所述元数据区中;
其中,所述元数据信息包括每个第一长度的待压缩的块数据的地址与对应的所述衔接压缩块数据所在的物理卷的id和所述物理卷的地址的对应关系。
在本发明的一种具体实施方式中,所述数据块划分模块,包括:
无效块数据确定子模块,用于针对每个数据块判断所述元数据信息中所述对应关系是否均发生改变,如果是,则确定所述数据块中的各所述衔接压缩块数据为无效块数据;
空间释放子模块,用于将所述数据块进行空间释放。
应用本发明实施例所提供的技术方案,接收按照预设的第一长度输入的待压缩的块数据,对块数据进行压缩,获得压缩后的压缩块数据,将压缩块数据在预设的多个物理卷中按照压缩顺序进行衔接排布,获得衔接压缩块数据,将衔接压缩块数据划分给多个长度为预设的第二长度的数据块,以使系统以数据块为单位进行空间释放,其中,第二长度为对衔接压缩块数据进行存储的磁盘阵列条带的长度的整数倍。通过定长输入、变长输出的块数据压缩方式,并对变长输出的压缩后的块数据按压缩顺序进行衔接排布,将衔接排布后的块数据划分给多个长度为预设的第二长度的数据块,可以减少对空间的浪费,提高块数据的压缩效率,简化了对元数据的索引。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中一种数据压缩方法的压缩层次图;
图2为现有技术中另一种数据压缩方法的压缩层次图;
图3为本发明实施例中一种数据压缩方法的实施流程图;
图4为本发明实施例中一种数据压缩方法的压缩层次图;
图5为本发明实施例中一种数据压缩装置的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图3,为本发明实施例中一种数据压缩方法的实施流程图,该方法可以包括以下步骤:
s301:接收按照预设的第一长度输入的待压缩的块数据。
可以给待压缩的块数据预先设定其输入到压缩处理器中的第一长度,各待压缩块数据按照该第一长度输入到压缩处理器中,压缩处理器接收按照预设的第一长度输入的待压缩的块数据。使用固定长度的输入方法,输入的块数据可能是经过重删的块数据,便于重删和压缩的结合。
需要说明的是,本发明实施例对第一长度不做限制,可以根据实际情况进行设定和调整。
在本发明的一种具体实施方式中,步骤s301可以包括以下步骤:
接收通过补齐读的方式按照预设的第一长度输入的待压缩的块数据。
各待压缩的块数据按照设定的第一长度输入到压缩处理器后,其所在第一长度的系统空间可能有空余,因此可以跨块数据补齐读,将接下来待压缩的块数据读入到该有空余的系统空间中,从而节省空间。
s302:对块数据进行压缩,获得压缩后的压缩块数据。
压缩处理器对接收到的各待压缩块数据进行压缩,获得压缩后的压缩块数据。
在本发明的一种具体实施方式中,对块数据进行压缩,可以包括以下步骤:
利用在线无损压缩的方式对块数据进行压缩。
压缩处理器在接收到输入的各待压缩的块数据时,可以利用在线无损压缩的方式对块数据进行压缩。利用在线压缩的压缩方法可以对块数据进行实时压缩,盘上存储的数据是压缩后的数据,占用的空间少。利用无损压缩的方法可以利用数据的统计冗余对待压缩块数据进行压缩,使得压缩后的压缩块数据可以还原到未压缩的状态。利用在线无损压缩的压缩方式兼得了在线压缩和无损压缩的优点。
s303:将压缩块数据在预设的多个物理卷中按照压缩顺序进行衔接排布,获得衔接压缩块数据。
同一长度的待压缩块数据压缩后获得的压缩块数据的长度可以是不同的,并且压缩后的各压缩块数据可能存放到预设的多个不同的物理卷中,将压缩后的压缩块数据在预设的多个物理卷中按照压缩顺序进行衔接排布获得衔接压缩块数据,可以使压缩后的压缩块数据做到字节级别的压缩,从而使得压缩块数据更加紧实,没有空洞。
s304:将衔接压缩块数据划分给多个长度为预设的第二长度的数据块。
系统以数据块为单位进行空间释放。
其中,第二长度为对衔接压缩块数据进行存储的磁盘阵列条带的长度的整数倍。
压缩后的压缩块数据的长度可能是不同的,在空间释放后下一次的空间分配复杂,需要记录至少包含已经分配到压缩块数据的空间的地址和长度的空间位图,并且空间释放后,也需要更新空间位图,分配位图的更新会导致系统的性能下降,空间位图的更新导致的频繁写入也会加速ssd的磨损,降低系统的可靠性。因此,可以预先设定多个第二长度的数据块block,将衔接压缩块数据化分给多个长度为预设的第二长度的数据块。在这种情况下,系统可以以数据块为单位进行空间释放。通过大块的空间分块管理,有效的绕开空间位图的管理方式,降低了系统复杂度。同时,由于无需使用空间位图的管理方式,块数据更新时,不需要更新位图信息。
预设的数据块的第二长度具体设置为磁盘阵列raid条带的整数倍,这样数据块向下刷盘时,后端的盘可以进行满条带的写。
应用本发明实施例所提供的方法,接收按照预设的第一长度输入的待压缩的块数据,对块数据进行压缩,获得压缩后的压缩块数据,将压缩块数据在预设的多个物理卷中按照压缩顺序进行衔接排布,获得衔接压缩块数据,将衔接压缩块数据划分给多个长度为预设的第二长度的数据块,以使系统以数据块为单位进行空间释放,其中,第二长度为对衔接压缩块数据进行存储的磁盘阵列条带的长度的整数倍。通过定长输入、变长输出的块数据压缩方式,并对变长输出的压缩后的块数据按压缩顺序进行衔接排布,将衔接排布后的块数据划分给多个长度为预设的第二长度的数据块,可以减少对空间的浪费,提高块数据的压缩效率,简化了对元数据的索引。
在本发明的一种具体实施方式中,在步骤s304之后,该方法还可以包括以下步骤:
步骤一:为每个数据块设置相应的元数据区;
步骤二:将每个数据块中衔接压缩块数据的元数据信息存储到对应的元数据区中;
其中,元数据信息包括每个第一长度的待压缩的块数据的地址与对应的衔接压缩块数据所在的物理卷的id和物理卷的的地址的对应关系。
为方便描述,可以将上述两个步骤结合起来进行说明。
可以在每个数据块的前面或尾部设置一个元数据区,将每个数据块中衔接压缩块数据的元数据信息存储到对应的元数据区中。元数据信息中包括每个第一长度的待压缩的块数据的地址与对应的衔接压缩块数据所在的物理卷的id和物理卷的lba地址的对应关系,其中,每个第一长度是待压缩的块数据的地址是根据各待压缩的块数据的长度计算得到的。除此之外元数据信息还可以包括压缩块数据的地址、压缩块数据的长度。其中,物理卷的id和地址可以是编址在一起的一个量。
在本发明的一种具体实施方式中,系统以数据块为单位进行空间释放可以包括以下步骤:
步骤一:针对每个数据块判断对应关系是否均发生改变,如果是,则执行步骤二;
步骤二:确定数据块中的各衔接压缩块数据为无效块数据;
步骤三:将数据块进行空间释放。
为方便描述,可以将上述三个步骤结合起来进行说明。
针对一个块数据,在压缩处理器对该块数据进行压缩完成后,元数据信息中该块数据在刚输入到压缩处理器处于待压缩状态时的地址会与其对应的衔接压缩块数据的地址相对应。并且块数据处于待压缩状态的地址与其压缩后对应的衔接压缩块数据对应的物理卷的地址会随着块数据衔接压缩的完成而发生变化,因此,可以通过检测针对每个数据块判断元数据信息中对应关系是否均发生改变,如果发生了改变,则说明该数据块中的各衔接压缩块数据均已完成衔接压缩,将该数据块中的各衔接压缩块数据确定为无效块数据,对该衔接压缩块数据进行释放。
在实际应用中,如图4所示,可以将压缩处理分为逻辑卷logicvolume层,数据压缩datacompress层和物理physicvolume层。逻辑卷层将卷划分成等大的定长的块进行管理,在对块数据进行读取时,通过跨块拆分的补齐读方式进行读取,数据压缩层负责对块数据进行压缩,并将压缩后的压缩块数据发送给物理卷层,物理卷层对压缩块数据按照压缩的顺序进行衔接排布,获得衔接压缩块数据,并将衔接压缩块数据划分给多个数据块,有效的绕开了空间位图的管理方式。
针对一个数据块,可以根据对于一个块数据在刚输入到压缩处理器处于待压缩状态时的地址,其对应的衔接压缩后的衔接压缩块数据对应的物理卷的地址会随着块数据衔接压缩的完成而发生改变的特点,扫描元数据区中的元数据信息,找到当前块数据在刚输入到压缩处理器处于待压缩状态时的原地址对应的衔接压缩块数据所在的现物理卷的地址,可以查询预设的物理卷映射表,其中映射表中包含原来块数据在刚输入到压缩处理器处于待压缩状态时的原地址与其对应的衔接压缩块数据所在的原物理卷的地址的对应关系。通过对比一个数据块中原来块数据在刚输入到压缩处理器处于待压缩状态时的原地址对应的原物理卷的地址和现物理卷的地址是否相同,可以得出系统是否需要对该数据块进行空间释放,即当原物理卷的地址和现物理卷的地址均不同时,对该数据块进行释放。在对待压缩块数据进行压缩时,如果不存在全空的数据块,还可以通过对衔接压缩块数据进行迁移的方式来释放空间。其中,该方法也适用于开了重删的系统,当判断数据块中的衔接压缩块数据均为无效数据时,可以对该数据块进行释放。
相应于上面的方法实施例,本发明实施例还提供了一种数据压缩装置,下文描述的一种数据压缩装置与上文描述的一种数据压缩方法可相互对应参照。
参见图5,为本发明实施例中一种数据压缩装置的结构示意图,该装置可以包括以下模块:
块数据接收模块501,用于接收按照预设的第一长度输入的待压缩的块数据;
块数据压缩模块502,用于对块数据进行压缩,获得压缩后的压缩块数据;
衔接压缩块数据获得模块503,用于将压缩块数据在预设的多个物理卷中按照压缩顺序进行衔接排布,获得衔接压缩块数据;
数据块划分模块504,用于将衔接压缩块数据划分给多个长度为预设的第二长度的数据块。
应用本发明实施例所提供的装置,接收按照预设的第一长度输入的待压缩的块数据,对块数据进行压缩,获得压缩后的压缩块数据,将压缩块数据在预设的多个物理卷中按照压缩顺序进行衔接排布,获得衔接压缩块数据,将衔接压缩块数据划分给多个长度为预设的第二长度的数据块,以使系统以数据块为单位进行空间释放,其中,第二长度为对衔接压缩块数据进行存储的磁盘阵列条带的长度的整数倍。通过定长输入、变长输出的块数据压缩方式,并对变长输出的压缩后的块数据按压缩顺序进行衔接排布,将衔接排布后的块数据划分给多个长度为预设的第二长度的数据块,可以减少对空间的浪费,提高块数据的压缩效率,简化了对元数据的索引。
在本发明的一种具体实施方式中,块数据接收模块501具体为接收通过补齐读的方式按照预设的第一长度输入的待压缩的块数据的模块。
在本发明的一种具体实施方式中,块数据压缩模块502具体为利用在线无损压缩的方式对块数据进行压缩的模块。
在本发明的一种具体实施方式中,该装置还可以包括:
元数据区设置模块,用于在将衔接压缩块数据划分给多个长度为预设的第二长度的数据块之后,为每个数据块设置相应的元数据区;
信息存储模块,用于将每个数据块中衔接压缩块数据的元数据信息存储到对应的元数据区中;
其中,元数据信息包括每个第一长度的待压缩的块数据的地址与对应的衔接压缩块数据所在的物理卷的id和物理卷的地址的对应关系。
在本发明的一种具体实施方式中,数据块划分模块504,包括:
无效块数据确定子模块,用于针对每个数据块判断对应关系是否均发生改变,如果是,则确定数据块中的各衔接压缩块数据为无效块数据;
空间释放子模块,用于将数据块进行空间释放。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
恶魔英文传递用英语怎么说专升本有学位证吗知足常乐的英文会计速成培训班梨子英文怎么读做家务英文一串钥匙的英语专业的英语怎么说tr怎么读写的英语单词感知押题垃圾的英语shint脏用英语怎么说弟弟的英语果酱英文宠物英语描述的英文直走百万翻译成英文故意的英文客服的英文2009英语21英语学期用英语怎么说序号英语十五用英语怎么说相当的英语床单用英语怎么说书房的英语怎么说笨拙的英语多大用英语怎么说不锈钢英文配额英文宝贝英语怎么说厨房英文颜料用英语怎么说皮鞋英文还的英文释怀英语巨齿鲨英文我英语瓶子英文本地英文搜集的英文秋英文巴西的英文表达的英文刷牙英文想念用英语怎么说现场英文听音乐英文哈密瓜的英文划船英文瓢虫的英文钢琴的英文单词介意的英文我也爱你的英文植树节的英语什么用英语怎么说放风筝英文思考英文团灭的英文相机英文怎么说炎热的英文法律事务专升本难吗200英语怎么读煎饼英文泰国的英文缩写30用英语怎么写做饭用英语怎么说手臂英文打雪仗英文你好的英文冷的英语怎么读生日英语太棒了英语怎么说温度英语句子用英语怎么说甜的英语怎么说立即的英文榴莲的英语时代的英文碰撞英文传统的英语分辨率英文牛排英文基础设施英语第12英语好奇英文宝贝英语怎么写炉子英语春夏秋冬英语单词没事的英文活着英文电的英语从不的英语西瓜的英语是什么中国用英语大部分的英文动作的英文很棒英文原始英文股东分红会计分录主导的英文滑稽英语个英文西瓜的英文是什么微笑英语怎么写蛙泳英语乐队的英文告诉的英语客服的英文嘴巴的英文怎么读面积的英文惊讶英语公园的英语捡垃圾的英文午餐的英语怎么说十的英语单词想你的英语怎么说许多的英文蛋糕的英语怎么写主管英文成员的英语什么英语怎么读山顶英文怎么样的英语70英语怎么读画的英文西科在线枣英文五月的英语怎么说释放的英文去睡觉英文组织英语动词钓鱼用英语怎么说火锅用英语怎么说很少的英文发生的英文梨单词权限的英文坏的英文一建全称毛巾的英语滚的英文谢谢你英语传承的英文蓝天英语真正的的英语观看的英文包用英语怎么说购物英文怎么写内容英文开头的英文关于的英文星期六英文缩写地板的英文怎么读生菜英语出租汽车的英文总结英文小英语怎么说关于用英语怎么说寝室的英文西瓜单词怎么读音立信会计是一本吗草地英文商人的英文结果的英语怎么读交通英语玩游戏英语超出英文及时英语甘蔗英文裙子用英语怎么写胖子英文女孩英语怎么说放屁用英语怎么说八月份英语上课的英文公鸡的英文封面的英文英文姓母鸡的英语怎么说珍贵的英语24英文怎么说月球英文连衣裙英文怎么读愿望英文七十的英文我是什么词性hair的复数多大用英语怎么说百色成人网谚语的英文难英语被录取的英文叔叔的英语单词主播的英文