CN115480692A - 一种数据压缩方法及装置 - Google Patents
一种数据压缩方法及装置 Download PDFInfo
- Publication number
- CN115480692A CN115480692A CN202110667882.7A CN202110667882A CN115480692A CN 115480692 A CN115480692 A CN 115480692A CN 202110667882 A CN202110667882 A CN 202110667882A CN 115480692 A CN115480692 A CN 115480692A
- Authority
- CN
- China
- Prior art keywords
- data
- compressed
- data block
- attribute
- page
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 72
- 238000013144 data compression Methods 0.000 title claims abstract description 40
- 238000007906 compression Methods 0.000 claims abstract description 82
- 230000006835 compression Effects 0.000 claims abstract description 80
- 238000013507 mapping Methods 0.000 claims abstract description 16
- 238000004590 computer program Methods 0.000 claims description 5
- 230000003321 amplification Effects 0.000 abstract description 7
- 238000003199 nucleic acid amplification method Methods 0.000 abstract description 7
- 230000015654 memory Effects 0.000 description 58
- 238000010586 diagram Methods 0.000 description 16
- 230000004048 modification Effects 0.000 description 11
- 238000012986 modification Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 10
- 230000008901 benefit Effects 0.000 description 9
- 230000008569 process Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 7
- 238000013461 design Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000006837 decompression Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000005192 partition Methods 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 101100226364 Arabidopsis thaliana EXT1 gene Proteins 0.000 description 2
- 102100037460 E3 ubiquitin-protein ligase Topors Human genes 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 239000004744 fabric Substances 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 101100226366 Arabidopsis thaliana EXT3 gene Proteins 0.000 description 1
- 102100029074 Exostosin-2 Human genes 0.000 description 1
- 101000918275 Homo sapiens Exostosin-2 Proteins 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 210000004556 brain Anatomy 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000008187 granular material Substances 0.000 description 1
- 238000011900 installation process Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 208000034420 multiple type III exostoses Diseases 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 229920001485 poly(butyl acrylate) polymer Polymers 0.000 description 1
- 230000002035 prolonged effect Effects 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 238000004064 recycling Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
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/6047—Power optimization with respect to the encoder, decoder, storage or transmission
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0661—Format or protocol conversion arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据压缩方法及装置,该方法包括:获取可读写文件系统中数据区的m个数据块,采用预设压缩算法压缩m个数据块,依次得到n个压缩数据块,其中,每个压缩数据块的第一容量相同,第一容量表征压缩数据块能够包含的压缩处理后的数据的字节数。建立n个压缩数据中的第i个压缩数据块对应的j个数据块中每个数据块的第一索引,并记录第一索引与j个数据块的映射关系。其中,第一索引用于标识j个数据块包含中每个数据块在存储介质中的存储位置,及j个数据块中每个数据块包含的属性信息。当读取数据块时,可以有效提高读取效率,可以保证随机读场景以很小的读放大系数完成数据的读取。
Description
技术领域
本申请涉及数据压缩技术领域,尤其涉及一种数据压缩方法及装置。
背景技术
为了提升存储系统的整体的输入输出(input output,IO)读写性能,需要对内存中的文件进行压缩。目前,Linux的读写文件系统,例如:F2FS、第二代闪存文件系统(journalling Flash file system version2,JFFS2)、B树文件系统(B-tree filesystem,BTRFS)等,Windows的读写文件系统,例如:NTFS等。由于文件系统中元数据区占整个文件系统比例较小,数据区往往占据较高的设备存储容量。所以,压缩数据区的数据可以减小输入输出IO的大小,提升IO整体的读写性能。
现有的数据压缩方法通常是将需要压缩的原始文件数据(或称源数据)按照固定大小的最小可压缩单元进行压缩,压缩后的文件数据(或称压缩数据)可以包括头部数据和压缩数据。其中,头部数据用于表征文件数据的属性信息;压缩数据用于表征文件数据的内容。再将压缩后的文件数据保存到存储介质上。但是,现有的读写文件系统的压缩方案存在随机读放大的问题,读取效率低下。
发明内容
本申请实施例提供一种数据压缩方法及装置,可以解决读写文件系统的随机读放大的问题,提高读取效率。
第一方面,本申请实施例提供一种数据压缩方法,该方法的执行主体可以是电子设备,也可以是位于电子设备中的部件(例如,芯片,芯片系统或处理器等),下面以执行主体是电子设备为例进行描述。该方法包括:电子设备获取可读写文件系统中数据区的m个数据块,m为大于等于1的正整数。电子设备采用预设压缩算法压缩m个数据块,依次得到n个压缩数据块,其中,每个压缩数据块的第一容量相同,第一容量表征压缩数据块能够包含的压缩处理后的数据的字节数,n为大于等于1的正整数。电子设备建立n个压缩数据中的第i个压缩数据块对应的j个数据块中每个数据块的第一索引,并记录第一索引与j个数据块的映射关系。其中,i为大于等于1,且小于等于n的正整数;j为大于等于1,且小于等于m的正整数。其中,第一索引用于标识j个数据块包含中每个数据块在存储介质中的存储位置,及j个数据块中每个数据块包含的属性信息。
因此,本申请实施例提供的数据压缩方法,当读取数据块时,可以有效提高读取效率,可以保证随机读场景以很小的读放大系数完成数据的读取。另外,数据块的索引中包含的属性可以进行修改,从而可以对存储设备上的压缩文件进行修改。可见,本申请实施例解决已有读写文件系统压缩方案随机读放大的问题,同时解决已有的固定输出压缩方式的文件系统无法支持数据和元数据更新的问题。
在一种具体可实现方式中,采用预设压缩算法压缩m个数据块,依次得到n个压缩数据块,具体为:将m个数据块中的各数据块以预设顺序依次分配至第一集合。当第一集合中的j个数据块的数据容量等于第一集合的额定容量时,按照设定压缩的阈值,对j个数据块执行压缩操作,并得到第i个压缩数据块。
在一种具体可实现方式中,建立n个压缩数据中的第i个压缩数据块对应的j个数据块中每个数据块的第一索引,具体为:当第i个压缩数据块的头部数据和压缩数据的数据总长度与设定压缩的阈值之和小于等于j个数据块的数据总长度时,建立j个数据块中每个数据块的第一索引。
在一种具体可实现方式中,属性信息包括以下至少一项:第一属性,用于表征数据块被压缩后所在的压缩数据块的存储位置是否是预先分配的。第二属性,用于表征数据块的数据页是否有效。第三属性,用于表征数据块的数据页是否是数据块的压缩数据块的第一个压缩页。第四属性,用于表征数据块的数据页是否包含在两个压缩块的压缩数据页中。第五属性,用于表征数据块的数据页是否是数据块被压缩后的压缩数据块的压缩页。第六属性,用于表征数据块的数据页所在的压缩数据块的索引地址。第七属性,用于表征当数据块的数据页属于数据块的压缩数据块的第一个压缩页时,第七属性的属性值为数据块在压缩数据块对应的集合内的偏移;当数据块的数据页不属于数据块的压缩数据块的第一个压缩页时,第七属性的属性值为数据块的数据页距离压缩数据块的第一个压缩页的距离。
在一种具体可实现方式中,属性信息包括第三属性,建立n个压缩数据中的第i个压缩数据块对应的j个数据块中每个数据块的第一索引,具体为:当j个数据块中每个数据块的数据页是第i个压缩数据块的第一个压缩页时,第三属性的属性值赋值为1。当j个数据块中每个数据块的数据页不是第i个压缩数据块的第一个压缩页时,第三属性的属性值赋值为0。
在一种具体可实现方式中,属性信息包括第七属性,还包括:当第三属性的属性值为1时,更新第七属性的属性值为数据块在压缩数据块对应的集合内的偏移。当第三属性的属性值为0时,更新第七属性的属性值为数据块的数据页距离压缩数据块的第一个压缩页的距离。
在一种具体可实现方式中,属性信息包括第四属性,建立n个压缩数据中的第i个压缩数据块对应的j个数据块中每个数据块的第一索引,具体为:当j个数据块中的每个数据块的数据页包含在两个压缩块的压缩数据页中时,第四属性的属性值赋值为1。当j个数据块中的每个数据块的数据页不包含在两个压缩块的压缩数据页中时,第四属性的属性值赋值为0。
在一种具体可实现方式中,属性信息包括第二属性,建立n个压缩数据中的第i个压缩数据块对应的j个数据块中每个数据块的第一索引,具体为:当j个数据块中的每个数据块的数据页为有效时,第二属性的属性值赋值为1。当j个数据块中的每个数据块的数据页为无效时,第二属性的属性值赋值为0。
在一些可实现方式中,在采用预设压缩算法压缩m个数据块,依次得到n个压缩数据块之前,还包括:获取待覆盖写入数据的第二集合,第二集合包括p个压缩数据块,p为大于等于1的正整数。获取p个压缩数据块中第一目标压缩数据的压缩页,及第一目标压缩数据块的压缩页对应的q个数据块,q为大于等于1的正整数。确定q个数据块中的第一目标数据块在q个数据块中的位置偏移。确定第一目标数据块的数据页为待覆盖写入数据的数据页。
在一种具体可实现方式中,第一索引用于标识第i个压缩数据块在存储介质中的存储位置,及j个数据块中每个数据块包含的属性信息。
在一些可实现方式中,还包括:读取第一数据块的第一索引,得到第一数据块对应的第一压缩数据块的索引地址,其中,第一索引包括第一数据块的属性信息。读取第一数据块对应的第一压缩数据块的索引。根据第一压缩数据块的索引,解压第一压缩数据块,得到第一压缩数据块对应的多个数据块,该多个数据块中包括第一数据块。确定第一数据块在解压后的多个数据块内的偏移。根据第一数据块在解压后的多个数据块内的偏移,可得到第一数据块的数据。
第二方面,本申请实施例提供一种数据压缩装置,该装置包括:第一获取单元,用于获取可读写文件系统中数据区的m个数据块,m为大于等于1的正整数。压缩单元,用于采用预设压缩算法压缩m个数据块,依次得到n个压缩数据块,其中,每个压缩数据块的第一容量相同,第一容量表征压缩数据块能够包含的压缩处理后的数据的字节数,n为大于等于1的正整数。更新单元,用于建立n个压缩数据中的第i个压缩数据块对应的j个数据块中每个数据块的第一索引,并记录第一索引与j个数据块的映射关系。其中,i为大于等于1,且小于等于n的正整数;j为大于等于1,且小于等于m的正整数。其中,第一索引用于标识j个数据块包含中每个数据块在存储介质中的存储位置,及j个数据块中每个数据块包含的属性信息。
因此,本申请实施例提供的数据压缩方法,当读取数据块时,可以有效提高读取效率,可以保证随机读场景以很小的读放大系数完成数据的读取。另外,数据块的索引中包含的属性可以进行修改,从而可以对存储设备上的压缩文件进行修改。可见,本申请实施例解决已有读写文件系统压缩方案随机读放大的问题,同时解决已有的固定输出压缩方式的文件系统无法支持数据和元数据更新的问题。
在一种具体可实现方式中,压缩单元用于:将m个数据块中的各数据块以预设顺序依次分配至第一集合。当第一集合中的j个数据块的数据容量等于第一集合的额定容量时,按照设定压缩的阈值,对j个数据块执行压缩操作,并得到第i个压缩数据块。
在一种具体可实现方式中,更新单元用于:当第i个压缩数据块的头部数据和压缩数据的数据总长度与设定压缩的阈值之和小于等于j个数据块的数据总长度时,建立j个数据块中每个数据块的第一索引。
在一种具体可实现方式中,属性信息包括以下至少一项:第一属性,用于表征数据块被压缩后所在的压缩数据块的存储位置是否是预先分配的。第二属性,用于表征数据块的数据页是否有效。第三属性,用于表征数据块的数据页是否是数据块的压缩数据块的第一个压缩页。第四属性,用于表征数据块的数据页是否包含在两个压缩块的压缩数据页中。第五属性,用于表征数据块的数据页是否是数据块被压缩后的压缩数据块的压缩页。第六属性,用于表征数据块的数据页所在的压缩数据块的索引地址。第七属性,用于表征当数据块的数据页属于数据块的压缩数据块的第一个压缩页时,第七属性的属性值为数据块在压缩数据块对应的集合内的偏移。当数据块的数据页不属于数据块的压缩数据块的第一个压缩页时,第七属性的属性值为数据块的数据页距离压缩数据块的第一个压缩页的距离。
在一种具体可实现方式中,属性信息包括第三属性,更新单元还用于:当j个数据块中每个数据块的数据页是第i个压缩数据块的第一个压缩页时,第三属性的属性值赋值为1。当j个数据块中每个数据块的数据页不是第i个压缩数据块的第一个压缩页时,第三属性的属性值赋值为0。
在一种具体可实现方式中,属性信息包括第七属性,更新单元还用于:当第三属性的属性值为1时,更新第七属性的属性值为数据块在压缩数据块对应的集合内的偏移。当第三属性的属性值为0时,更新第七属性的属性值为数据块的数据页距离压缩数据块的第一个压缩页的距离。
在一种具体可实现方式中,属性信息包括第四属性,更新单元还用于:当j个数据块中的每个数据块的数据页包含在两个压缩块的压缩数据页中时,第四属性的属性值赋值为1。当j个数据块中的每个数据块的数据页不包含在两个压缩块的压缩数据页中时,第四属性的属性值赋值为0。
在一种具体可实现方式中,属性信息包括第二属性,更新单元还用于:当j个数据块中的每个数据块的数据页为有效时,第二属性的属性值赋值为1。当j个数据块中的每个数据块的数据页为无效时,第二属性的属性值赋值为0。
在一些可实现方式中,该装置还包括:第二获取单元,用于获取待覆盖写入数据的第二集合,第二集合包括p个压缩数据块,p为大于等于1的正整数。第三获取单元,用于获取p个压缩数据块中第一目标压缩数据的压缩页,及第一目标压缩数据块的压缩页对应的q个数据块,q为大于等于1的正整数。第一确定单元,用于确定q个数据块中的第一目标数据块在q个数据块中的位置偏移。第二确定单元,用于确定第一目标数据块的数据页为待覆盖写入数据的数据页。
在一种具体可实现方式中,第一索引用于标识第i个压缩数据块在存储介质中的存储位置,及j个数据块中每个数据块包含的属性信息。
在一些可实现方式中,还包括:第一读取单元,用于读取第一数据块的第一索引,得到第一数据块对应的第一压缩数据块的索引地址,其中,第一索引包括第一数据块的属性信息。第二读取单元,用于读取第一数据块对应的第一压缩数据块的索引。解压单元,用于根据第一压缩数据块的索引,解压第一压缩数据块,得到第一压缩数据块对应的多个数据块,该多个数据块中包括第一数据块。第三确定单元,用于确定第一数据块在解压后的多个数据块内的偏移。第三获取单元,用于根据第一数据块在解压后的多个数据块内的偏移,可得到第一数据块的数据。
第三方面,本申请实施例提供一种设备,其包括:用于执行第一方面的数据压缩方法。
第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质包括计算机指令,当所述计算机指令在电子设备上运行时,使得所述电子设备执行第一方面的数据压缩方法。
第五方面,本申请实施例提供一种计算机程序,当所述程序被处理器调用时,第一方面的数据压缩方法被执行。
第六方面,本申请实施例提供一种芯片系统,其包括一个或多个处理器,当所述一个或多个处理器执行指令时,所述一个或多个处理器执行第一方面的数据压缩方法。
应当理解的是,本申请中对技术特征、技术方案、有益效果或类似语言的描述并不是暗示在任意的单个实施例中可以实现所有的特点和优点。相反,可以理解的是对于特征或有益效果的描述意味着在至少一个实施例中包括特定的技术特征、技术方案或有益效果。因此,本说明书中对于技术特征、技术方案或有益效果的描述并不一定是指相同的实施例。进而,还可以任何适当的方式组合本实施例中所描述的技术特征、技术方案和有益效果。本领域技术人员将会理解,无需特定实施例的一个或多个特定的技术特征、技术方案或有益效果即可实现实施例。在其他实施例中,还可在没有体现所有实施例的特定实施例中识别出额外的技术特征和有益效果。
附图说明
图1a为本申请实施例提供的一种操作系统的组成框图;
图1b为本申请实施例提供的一种存储系统的结构示意图;
图2为图1b中存储系统的固态硬盘的结构示意图;
图3为图2中固态硬盘的闪存芯片的结构示意图;
图4为图3中闪存芯片对应的闪存翻译层的示意图;
图5为固定输入压缩模式示意图;
图6为本申请实施例提供的固定输出压缩模式示意图;
图7为本申请实施例提供的数据块索引示意图;
图8为现有可扩展只读文件系统中数据块索引示意图;
图9为本申请实施例提供的一种数据压缩方法的流程示意图;
图10为本申请实施例提供的一种数据块索引更新的流程示意图;
图11为本申请实施例提供的一种数据压缩时数据块索引关系示意图;
图12为本申请实施例提供的又一种数据压缩方法的流程示意图;
图13为本申请实施例提供的一种覆盖写入或读取流程时数据块索引关系示意图;
图14为本申请实施例提供的一种数据读取的流程示意图;
图15为本申请实施例提供的一种数据压缩装置的结构示意图。
具体实施方式
本申请的描述中所提到的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括其他没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
在本申请的描述中,除非另有说明,“多个”的含义是指两个或两个以上。本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
为便于理解,下面先对本申请实施例可能涉及到的相关术语和概念进行介绍。
如图1a所示的一种操作系统的组成框图。
操作系统(operation system,简称OS)是管理计算机硬件与软件资源的计算机程序。例如,unix操作系统、windows操作系统、linux操作系统等。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。
操作系统内核是指大多数操作系统的核心部分。它由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成,负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着操作系统的性能和稳定性。操作系统内核是一个提供硬件抽象层、磁盘以及文件系统控制、多任务等功能的系统软件。它为众多应用程序提供对计算机硬件的安全访问,它可以决定一个应用程序在什么时候对计算机的某部分硬件操作多长时间。由于直接对计算机硬件操作是非常复杂的,因此操作系统内核可以提供一套硬件抽象的方法来完成这些操作。
文件系统是操作系统内核的核心模块,也即主要组成部分,文件系统是在存储设备上组织文件的方法,负责管理和存储文件信息,主要是为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
文件系统提供文件在内核的抽象表示,完成文件到实体存储设备(例如:磁盘、硬盘等)的映射,将文件在存储设备上的物理地址映射成用户可见的路径名、文件名,方便文件数据的快速读取、修改和持久化等。
文件系统包括读写文件系统以及只读文件系统。读写文件系统是既可以写文件到存储设备,也可以从存储设备读取文件的文件系统,例如:档案配置表(file allocationtable,FAT)、高效能文件系统(high performance file system,HPFS)、新技术文件系统(new technology file system,NTFS)、第四代扩展文件系统(fourth extended filesystem,EXT4)、闪存友好文件系统(flash friendly file system,F2FS)等。只读文件系统是只能从存储设备读取文件,但不能向存储设备写文件的文件系统,例如:可扩展只读文件系统(extendable read-only file system,EROFS)。
为了使得本申请更加的清楚,首先对本申请的一种应用场景进行说明。
图1b所示的一种存储系统的结构示意图。
在图1b所示的应用场景中,用户通过应用程序来存取数据。运行这些应用程序的计算机被称为“应用服务器”。应用服务器100可以是物理机,也可以是虚拟机。物理应用服务器包括但不限于桌面电脑、服务器、笔记本电脑以及移动设备。应用服务器通过光纤交换机110访问存储系统以存取数据。然而,交换机110只是一个可选设备,应用服务器100也可以直接通过网络与存储系统120通信。或者,光纤交换机110也可以替换成以太网交换机、InfiniBand交换机、RoCE(RDMA over Converged Ethernet)交换机等。
图1b所示的存储系统120是一个集中式存储系统。所谓集中式存储系统就是指由一台或多台主设备组成中心节点,数据集中存储于这个中心节点中,并且整个系统的所有数据处理业务都集中部署在这个中心节点上。换言之,集中式存储系统中,终端或客户端仅负责数据的录入和输出,而数据的存储与控制处理完全交由中心节点来完成。集中式存储系统的特点是有一个统一的入口,所有从外部设备来的数据都要经过这个入口,这个入口就是集中式存储系统的引擎121。引擎121是集中式存储系统中最为核心的部件,许多存储系统的高级功能都在其中实现。
如图1b所示,引擎121中有一个或多个控制器,图1b以引擎包含两个控制器为例予以说明。控制器0与控制器1之间具有镜像通道,那么当控制器0将一份数据写入其内存124后,可以通过所述镜像通道将所述数据的副本发送给控制器1,控制器1将所述副本存储在自己本地的内存124中。由此,控制器0和控制器1互为备份,当控制器0发生故障时,控制器1可以接管控制器0的业务,当控制器1发生故障时,控制器0可以接管控制器1的业务,从而避免硬件故障导致整个存储系统120的不可用。当引擎121中部署有4个控制器时,任意两个控制器之间都具有镜像通道,因此任意两个控制器互为备份。
引擎121还包含前端接口125和后端接口126,其中前端接口125用于与应用服务器100通信,从而为应用服务器100提供存储服务。而后端接口126用于与硬盘134通信,以扩充存储系统的容量。通过后端接口126,引擎121可以连接更多的硬盘134,从而形成一个非常大的存储资源池。
按照引擎121与硬盘框130之间通信协议的类型,硬盘框130可能是SAS硬盘框,也可能是NVMe硬盘框,IP硬盘框以及其他类型的硬盘框。SAS硬盘框,采用SAS3.0协议,每个框支持25块SAS硬盘。引擎121通过板载SAS接口或者SAS接口模块与硬盘框130连接。NVMe硬盘框,更像一个完整的计算机系统,NVMe硬盘插在NVMe硬盘框内。NVMe硬盘框再通过RDMA端口与引擎121连接。
在硬件上,如图1b所示,控制器0至少包括处理器123、内存124。处理器123是一个中央处理器(central processing unit,CPU),用于处理来自存储系统外部(服务器或者其他存储系统)的数据访问请求,也用于处理存储系统内部生成的请求。示例性的,处理器123通过前端端口125接收应用服务器100发送的写数据请求时,会将这些写数据请求中的数据暂时保存在内存124中。当内存124中的数据总量达到一定阈值时,处理器123通过后端端口将内存124中存储的数据发送给硬盘134进行持久化存储。
内存124是指与处理器直接交换数据的内部存储器,它可以随时读写数据,而且速度很快,作为操作系统或其他正在运行中的程序的临时数据存储器。内存包括至少两种存储器,例如内存既可以是随机存取存储器。举例来说,随机存取存储器是动态随机存取存储器(Dynamic Random Access Memory,DRAM),或者存储级存储器(Storage Class Memory,SCM)。DRAM是一种半导体存储器,与大部分随机存取存储器(Random Access Memory,RAM)一样,属于一种易失性存储器(volatile memory)设备。SCM是一种同时结合传统储存装置与存储器特性的复合型储存技术,存储级存储器能够提供比硬盘更快速的读写速度,但存取速度上比DRAM慢,在成本上也比DRAM更为便宜。然而,DRAM和SCM在本实施例中只是示例性的说明,内存还可以包括其他随机存取存储器,例如静态随机存取存储器(StaticRandom Access Memory,SRAM)等。另外,内存124还可以是双列直插式存储器模块或双线存储器模块(Dual In-line Memory Module,简称DIMM),即由动态随机存取存储器(DRAM)组成的模块,还可以是固态硬盘(Solid State Disk,SSD)。实际应用中,控制器0中可配置多个内存124,以及不同类型的内存124。本实施例不对内存113的数量和类型进行限定。此外,可对内存124进行配置使其具有保电功能。保电功能是指系统发生掉电又重新上电时,内存124中存储的数据也不会丢失。具有保电功能的内存被称为非易失性存储器。
示例性的,内存124和硬盘134均可以是固态硬盘(英语:Solid-state drive或Solid-state disk,简称SSD)是一种主要以闪存(NAND Flash)作为永久性存储器的存储设备。如图2所示,SSD 200包括NAND闪存和主控制器(简称:主控)201。NAND闪存包括多个闪存芯片205,用于存储数据。主控201是SSD的大脑中枢,负责一些复杂的任务,如管理数据存储、维护SSD性能和使用寿命等。主控201是一种嵌入式微芯片,它包括处理器202,其功能就像命令中心,发出SSD的所有操作请求。例如,处理器202可通过缓冲区中的固件来执行读取/写入数据,垃圾回收以及磨损均衡等功能。
SSD主控201还包括主机接口204和若干个通道控制器。其中,主机接口204用于与主机通信。这里的主机可以指服务器、个人电脑或者阵列控制器等任何设备。通过若干个通道控制器,主控201可以并行操作多块闪存芯片205,从而提高底层的带宽。举个例子,假设主控201与FLASH颗粒之间有8个通道,那么主控201通过这8通道并行地向8个闪存芯片205读写数据。
如图3所示,die是一个或多个闪存芯片的封装。一个die可包含多个区域(panel),多Plane NAND是一种能够有效提升性能的设计。如图3所示,一个die内部分成了2个Plane,而且2个Plane内的Block编号是单双交叉的,因此在操作时,可以进行一单一双交叉操作来提升性能。一个panel包含多个块(block)。而一个block由若干个页(page)组成。以一个16GB容量的闪存芯片为例,每4314*8=34512个cell逻辑上形成一个page,每个page中可以存放4KB的内容和218B的ECC校验数据,page也是IO操作的最小单位。每128个page组成一个block,每个2048个block组成一个panel,一整片闪存芯片由两个panel组成,一个panel存储奇数序号的block,另一个则存储偶数序号的block,两个plane可以并行操作。这只是一个示例,page的尺寸,block的容量,闪存芯片的容量都可以有不同的规格,本实施例不予限定。
主机往block中写入数据,当一个Block写满的时候,SSD主控201会挑选下一个Block继续写入。页是数据写入的最小单位。换言之,主控201是以页为粒度往block里面写入数据的。Block是数据擦除的最小单位。主控在擦除数据时,每次只能擦除整个block。
主机通过逻辑块地址(Logical Block Address,LBA)访问SSD,每个LBA代表着一个扇区(以512B为例),而在SSD内部,主控以页(以4KB为例)为单位访问SSD。因此,应用服务器每次写入一个数据时,SSD主控会找一个Page将该数据写入,page的地址被称为物理块地址(Physical Block Address,PBA)。SSD内部记录了一条LBA到PBA的映射。有了这样一个映射后,下次主机需要读某个LBA的数据时,SSD就知道从闪存芯片的哪个位置把数据读取上来。图4是闪存翻译层(Flash Translation Layer,FTL)的示意图,FTL位于处理器202的固件中。如图4所示,主机每写入一个新数据,就会产生一个新的映射关系,这个映射关系会加入(第一次写)或者更改(覆盖写)FTL。当读取某个数据时,SSD首先查找FTL中该数据的LBA所对应的PBA,然后再根据PBA读取相应的数据。
闪存芯片不能支持覆盖写,这意味着当主机对某个LBA上的数据进行修改时,不能直接在这个LBA所对应的PBA上更改,必须写到一个新的PBA,并在FTL中增加一条映射。如,FTL中原来有LBA D与PBAD之间的映射关系,当主机发送一个IO请求,要求修改LBAD的数据时,SSD寻找一个新的位置(PBAE)写入该数据,并在FTL中增加LBAD与PBAE之间的映射关系。就导致PBAD上的数据变成无效数据。无效数据(也称垃圾数据),是指没有任何映射关系指向的数据。对于这部分数据,用户不会访问这些FLASH空间,因为它们被新的映射关系所取代。随着应用服务器的持续写入,FLASH存储空间慢慢变小,直到耗尽。如果不及时清除这些垃圾数据,主机就无法写入。SSD内部都有垃圾回收机制,它的基本原理是把几个Block中的有效数据集中搬到一个新的Block上面去,然后再把这几个Block擦除掉,这样就产生新的可用Block了。
另外,内存124中还存储有软件程序,处理器123运行内存124中的软件程序可实现对硬盘的管理。例如将硬盘抽象化为存储资源池,然后划分为LUN提供给服务器使用等。这里的LUN其实就是在服务器上看到的硬盘。当然,一些集中式存储系统本身也是文件服务器,可以为服务器提供共享文件服务。
内存124中存储的数据可以通过文件系统呈现。该文件系统是一个结构化的数据文件存储和组织形式。我们知道,计算机中所有的数据都是0和1,存储在硬件介质上的一连串的01组合对我们来说完全无法去分辨以及管理。因此我们用“文件”这个概念对这些数据进行组织,用于同一用途的数据,按照不同应用程序要求的结构方式组成不同类型的文件。通常用不同的后缀来指代不同的类型,然后我们给每个文件起一个方便理解记忆的名字。而当文件很多的时候,我们按照某种划分方式给这些文件分组,每一组文件放在同一个目录(或者叫文件夹)里面。而且目录下面除了文件还可以有下一级目录(称之为子目录或者子文件夹),所有的文件、目录形成一个树状结构。这个树状结构有一个专用的名字:文件系统(File System)。文件系统有很多类型,常见的有Windows的FAT/FAT32/NTFS,Linux的EXT2/EXT3/EXT4/XFS/BtrFS等。为了方便查找,从根节点开始逐级目录往下,一直到文件本身,把这些目录、子目录、文件的名字用特殊的字符(例如Windows/DOS用“\”,类Unix系统用“/”)拼接起来,这样的一串字符称之为文件路径,例如Linux中的“/etc/systemd/system.conf”或者Windows中的“C:\Windows\System32\taskmgr.exe”。路径是访问某个具体的文件的唯一标识。例如,Windows下的D:\data\file.exe就是一个文件的路径,它表示D分区下的data目录下的file.exe文件。
文件系统是建立在块设备上面的,文件系统不但记录文件路径,还记录哪些块组成一个文件,哪些块记录的是目录/子目录信息。不同的文件系统有不同的组织结构。为了方便管理,硬盘这样的块设备通常可以划分为多个逻辑块设备,也就是硬盘分区(Partition)。反过来,单个介质的容量、性能有限,可以通过某些技术手段把多个物理块设备组合成一个逻辑块设备,例如各种级别的RAID,JBOD等。文件系统也可以建立在这些逻辑块设备之上。无论如何,应用服务器应用并不需要关心所要访问的文件位于底层的块设备的具体位置,只需要该文件的文件名/ID发送给文件系统,由文件系统根据所述文件名/ID查询出文件路径即可。
比较常见的文件访问协议是NFS、CIFS或者SMB等,本实施例不对此进行任何限定。
本申请中的文件系统为读写文件系统。读写文件系统是既可以写文件到存储设备,也可以从存储设备读取文件的文件系统,例如:FAT、HPFS、NTFS、EXT4、F2FS等等。
文件系统中一般包括元数据区和数据区,元数据区包括超级块和索引节点(inode)区。元数据区的超级块内可以包括文件系统的控制信息、数据结构等内容,元数据区的inode区可以包括文件的描述信息,例如文件长度、文件类型等,文件类型例如为普通文件(regular inode)、目录文件(directory inode)、软链接(symbol link inode)、特殊文件(special inode)等。数据区中存储的数据可以是基于无损压缩技术进行文件级别的压缩处理后得到的数据。数据区中的数据在存储介质(例如为磁盘、闪存等)的物理存储空间上按照磁盘块的集合来进行存储。其中,同一文件的数据可以在连续的磁盘块中存储,或者,也可以在不连续的磁盘块中交叉存储。
应理解,本申请中引入磁盘块的概念并不意味着存储介质仅限定为磁盘,磁盘块可以用来表示存储介质的物理存储空间经划分后得到的小的物理存储空间。
当然,本申请中的存储系统还可以包括分布式存储系统。所谓分布式存储系统是指将数据分散存储在多台独立的存储节点上的系统。传统的网络存储系统采用集中式的存储阵列存放所有数据,存储阵列的性能既是系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。
以上,为本申请的一种应用场景的简单介绍。
在上述存储系统中,按数据读写能力对器件的速率进行排序,由强到弱的顺序如下:中央处理器(central processing unit,CPU)>>双倍数据速率同步动态随机存储器(double data rate synchronous dynamic random access memory,DDR SDRAM)>闪存芯片falsh。可见,存储系统内数据访问瓶颈是数据在内存与flash之间的IO(输入输出)时间开销。
为了提升存储系统的整体的IO读写性能,需要对内存中的文件进行压缩。由于文件系统中元数据区占整个文件系统比例较小,数据区往往占据较高的设备存储容量。所以,当向falsh写入数据时,压缩数据,并将压缩后的数据写入falsh中,可以减少falsh的存储容量占用,延长falsh的使用寿命。
目前,Linux的读写文件系统,例如:F2FS、第二代闪存文件系统(journallingFlash file system version2,JFFS2)、B树文件系统(B-tree file system,BTRFS)等,Windows的读写文件系统,例如:NTFS等,均可以采用如下数据压缩方式:
将需要压缩的原始文件数据(或称源数据)按照固定大小的最小可压缩单元(cluster)进行压缩,压缩后的文件数据(或称压缩数据)包括头部数据和压缩数据。其中,头部数据用于表征文件数据的属性信息;压缩数据用于表征文件数据的内容。再将压缩后的文件数据保存到falsh上,并以4kb的大小对齐。
示例性的,如图5所示的固定输入压缩模式示意图,将4个地址连续的数据块(block)作为一个cluster0进行压缩,得到由头部数据(header)+压缩数据(compresseddata)组成的压缩文件数据。若压缩文件数据小于4kb,则将压缩文件数据以4kb大小存储在falsh上。
假设,图5所示的原始文件数据(或称源数据)大小为4个block,每个block大小为4kb,一个block为一个逻辑页,对原始文件数据的逻辑页进行编号:0、1、2、3。将原始文件数据按照75%的压缩率压缩成压缩文件数据,该压缩文件数据大小为12kb。故压缩文件数据大小为3个block,所以,压缩文件数据的实际页为3页,即读取单个逻辑页需要读取的falsh实际页的大小如表1所示。
表1
逻辑页号 | 0 | 1 | 2 | 3 |
实际读取的闪存页数目(页) | 3 | 3 | 3 | 3 |
在将压缩后的文件数据保存到falsh上之后。若需要在falsh上读取原始文件数据的目标逻辑页,则需要读取压缩文件数据的3页数据,并将压缩文件数据解压后才能读取到目标逻辑页。例如,在随机读取的场景下,若需要在falsh上读取0号逻辑页的原始文件数据,则需要将压缩文件数据的3页数据都读取出来,并解压压缩文件数据之后,才可以成功读取到0号逻辑页的原始文件数据。因此,数据读取效率为:
可见,经过图5所示的数据压缩方式得到的压缩文件数据,在随机读取的场景下,读取效率较低。
为了解决上述技术问题,本申请实施例提供了一种数据压缩方法,该方法通过获取可读写文件系统中数据区的m个数据块。采用预设压缩算法压缩m个数据块,依次得到n个压缩数据块,其中,每个压缩数据块的第一容量相同,第一容量表征压缩数据块能够包含的压缩处理后的数据的字节数。其中,m,n均为大于等于1的正整数。
其中,预设压缩算法可以为采用固定输出压缩模式对应的压缩算法,如,(lempel-ziv 4,LZ4)压缩算法。当然,预设压缩算法还可以为其他压缩算法,本申请实施例不做具体限定。
示例性的,在一种应用场景中,如图6所示,假设源数据大小为16kb,以4kb的数据是一个数据块,亦是一个逻辑页为例,对源数据的逻辑页进行编号:0、1、2、3,如表2的第一行所示。
假设将逻辑页连续的16kb的源数据划分为3份,分别为:6kb、7kb、5kb。对这3份数据采用预设压缩算法(如,LZ4)对其进行压缩,直到压缩数据块中压缩后的每份数据大小为4kb为止。
压缩数据块的数据页为3个页,并分别编号为:如图6所示的压缩页4、压缩页5和压缩页6。
表2
逻辑页号 | 0 | 1 | 2 | 3 |
实际读取的闪存页数目(页) | 1 | 2 | 2 | 1 |
可见,逻辑页0的源数据都压缩在压缩页4中,故压缩成1页。逻辑页1的一部分源数据压缩在压缩页4中,逻辑页1的另一部分源数据压缩在压缩页5中,故压缩成2页。逻辑页2的一部分源数据压缩在压缩页5中,逻辑页2的另一部分源数据压缩在压缩页6中,故压缩成2页。逻辑页3的源数据都压缩在压缩页6中,故压缩成1页。
因此,在随机读取场景下,可能读取上述任意一个或者多个逻辑页。示例性的,当读取逻辑页0时,只需读取一个压缩页,如表2第二行第二列所示。解压之后可以获得逻辑页0的全部数据。
此时,读取效率可按照下列式2计算得出:
读取逻辑页3的读取效率同读取逻辑页0的读取效率。
当读取逻辑页1时,需要读取2个压缩页,如表2的第二行第三列所示。将压缩页4和压缩页5的数据解压之后才可以获得逻辑页1的全部数据。
此时,读取效率可按照下列式3计算得出:
读取逻辑页2的读取效率同读取逻辑页1的读取效率。
另外,平均4个逻辑页的读取效率可按照下列式4计算得出:
从式2、式3、式4计算得出的读取效率可以看出,在随机读取场景下,图6所示的数据压缩方法的读取效率要远远大于图5所示的数据压缩方法的读取效率的。
可见,本申请实施例通过将可读写文件系统中数据区的m个数据块采用固定输出压缩模式对应的压缩算法进行压缩,依次得到n个相同字节数的数据的压缩数据块,使得输出的每个压缩数据块均是固定大小。当读取数据块时,可以有效提高读取效率,可以保证随机读场景以很小的读放大系数完成数据的读取。
另外,图8所示的现有可扩展只读文件系统(extendable read-only filesystem,erofs)中数据块索引方式。在数据块地址数组data_addr中,存取的都是block地址,其指向实际数据块的地址。当erofs在制作镜像时,采用图5所示的方法压缩数据时,由于存储设备(例如:磁盘)的结构和文件内容已经固定,无法支持对文件的修改。但是在用户实际操作的场景下,对于存储设备上的许多压缩文件可能需要经常修改,erofs无法支持这种诉求。
上述数据块索引可以查找到对应的数据块,可以理解为,该数据块索引也即inode,也即元数据。其中,inode就是用来存储元数据的区域,也即用来存储文件相关属性信息的区域,例如:文件的创建者、创建日期、大小、数据块的位置等等。其中,每个inode都有一个号码,操作系统用不同的inode号码来识别不同的文件。示例性的,表面上,用户通过文件名,打开文件。实际上,系统先根据文件名找到对应的inode号码,然后通过inode号码获取到inode信息,再根据inode信息查找到数据块的地址,读取该数据。
也就是说,inode记录了文件的属性以及该文件实际存储位置,即数据块号(blocknumber),每一个block(常见大小4KB),通过inode可以实现文件的查找定位。inode是Linux中的,Unix中是vnode。基本上,inode包含的信息至少有如下这些:(1)文件的类型(2)文件访问权限;(3)文件的所有者与组;(4)文件的大小;(5)链接数,即指向该inode的文件名总数;(6)文件的状态改变时间(ctime)、最近访问时间(atime)和最近修改时间(mtime);(7)文件特殊属性,SUID、SGID和SBIT;(8)文件内容的真正指向(pointer)。
如图8所示,为现有的数据块索引格式,该数据块索引格式是不支持可扩展的,例如:不支持追加写、块预留、删节(truncate)等等。其中,追加写指的是在原有文件的基础上,添加新内容,不删除原有文件中的内容。块预留指的是文件系统提前考虑如果文件增长,可以从哪块空间分配磁盘块,并将这些磁盘块预留下来。truncate指的是修改文件,例如:删除、新增等等。
示例性的,如图8所示,将数据块索引用blk entry代指,为便于描述,简写为blk。其中blk 1,为压缩数据块1的索引,在blk1中存放有压缩数据块1在存储设备上的地址。blk2,为压缩数据块2的索引,在blk2中存放有压缩数据块2在存储设备上的地址。blk3,为压缩数据块3的索引,在blk3中存放有压缩数据块3在存储设备上的地址。blk4,为压缩数据块4的索引,在blk4中存放有压缩数据块4在存储设备上的地址。因此,根据blk中存放的地址可以确定压缩数据块在存储设备上的位置。
为了使得读写文件系统支持写入、覆盖写、预分配、truncate等,本申请实施例提供的数据压缩方法还包括:建立n个压缩数据中的第i个压缩数据块对应的j个数据块中每个数据块的第一索引,并记录第一索引与j个数据块的映射关系。其中,i为大于等于1,且小于等于n的正整数。j为大于等于1,且小于等于m的正整数。其中,第一索引用于标识j个数据块包含中每个数据块在存储介质中的存储位置,及j个数据块中每个数据块包含的属性信息。当然,第一索引还用于标识第i个压缩数据块在存储介质中的存储位置,及j个数据块中每个数据块包含的属性信息。
其中,属性信息以下至少一项:
第一属性,用于表征数据块被压缩后所在的压缩数据块的存储位置是否是预先分配的。
第二属性,用于表征数据块的数据页是否有效;也即,是正常数据页还是空洞数据页,其中空洞数据页,可以理解为空白数据页。
第三属性,用于表征数据块的数据页是否是数据块的压缩数据块的第一个压缩页。
第四属性,用于表征数据块的数据页是否包含在两个压缩块的压缩数据页中。
第五属性,用于表征数据块的数据页是否是数据块被压缩后的压缩数据块的压缩页。
第六属性,用于表征数据块的数据页所在的压缩数据块的索引地址。
第七属性,用于表征当数据块的数据页属于数据块的压缩数据块的第一个压缩页时,第七属性的属性值为数据块在压缩数据块对应的集合内的偏移;当数据块的数据页不属于数据块的压缩数据块的第一个压缩页时,第七属性的属性值为数据块的数据页距离压缩数据块的第一个压缩页的距离。
示例性的,如图7所示,数据块的第一索引包括:blk entry,其对应存放数据块或者压缩数据块的地址;extent entry,其对应存放扩展的属性信息。其中,每个extententry与blk entry一一对应,每个数据页都有对应的一个extent entry和blk entry。
其中,Extent entry成员的集合表示方式如下:
示例性的,如集合A所示,数据块索引中包括的成员可以如集合A所示,需要说明的是,每个数据页都有对应的一个集合A。
A{
is_reserved,
is_valid,
is_compress,
first_page,
cross_block,
blkidx,
offset,
…..
其他可扩展属性,
};
集合成员含义解释如下:
is_reserved为上述第一属性。
is_valid为上述第二属性。
first_page为上述第三属性。
cross_block为上述第四属性。
is_compress为上述第五属性。
blkidx为上述第六属性。
ofs为上述第七属性。
可见,在读写文件系统中应用图6所示的方法压缩数据时,可以对图7所示的数据块的索引中包含的属性进行修改,从而可以对存储设备上的压缩文件进行修改。
下面结合具体的示例,对本申请实施例提供的数据压缩方法进行说明。
图9为本申请实施例提供的一种数据压缩方法的流程示意图。如图9所示,该方法包括:
S901、获取可读写文件系统中数据区的m个数据块,m为大于等于1的正整数。
该m个数据块可以理解为需要回写的数据块。其中,回写可以是指在写操作时,先将数据先写入内存中进行缓存,但不会立即写入存储设备(例如:磁盘)中。当在一些特定条件或操作下(例如:回刷机制、同步(sync)操作等),才会将内存中缓存的数据写入存储设备。
S902、采用预设压缩算法压缩m个数据块,依次得到n个压缩数据块,其中,每个压缩数据块的第一容量相同,第一容量表征压缩数据块能够包含的压缩处理后的数据的字节数,n为大于等于1的正整数。
其中,预设压缩算法可以为LZ4压缩算法,当然,也可以其他固定输出的压缩算法,本申请实施例不做具体限定。
其中,m可以为任意的正整数。如,m为4,m为10,或m为20。
S902具体可实现为:
S9021、将m个数据块中的各数据块以预设顺序依次分配至第一集合。
该预设顺序可以连续的存储地址的顺序。也就是说,m个数据块的连续顺序。
该第一集合可以称为最小可压缩单元(cluster)。换句话说,第一集合为最小可压缩的数据块集合。如,图6中所示的6kb的数据块集合、7kb的数据块集合和5kb的数据块集合。
示例性的,m个数据块映射在存储介质中的一段连续的地址。假设以一个数据块为起点,按照数据块映射在存储介质中的地址的顺序,依次划分固定大小的数据集合,如图6所示,将数据块0及数据块1的1/2数据组成6kb的数据集合;将数据块1的1/2数据,数据块2的3/4数据,及空白数据页组成7kb的数据集合;将数据块2的1/4数据,及数据块3组成5kb的数据集合。
S9022、确定第一集合中的j个数据块的数据容量是否等于第一集合的额定容量,j为大于等于1,且小于等于m的正整数。若j个数据块的数据容量不等于第一集合的额定容量,则执行S9021;若j个数据块的数据容量等于第一集合的额定容量,则执行S9023。
S9023、按照设定压缩的阈值,对第一集合中的j个数据块执行固定压缩操作,并得到第i个压缩数据块。
其中,设定压缩的阈值,用于表征压缩率。示例性的,设定压缩的阈值的表达公式可以为:
设定压缩的阈值=数据总长度-数据总长度*压缩率
S9024、确定j个数据块的数据总长度是否大于第i个压缩数据块的头部数据和压缩数据的数据总长度与设定压缩的阈值之和。若是,则执行S903。否则,将源数据页提交至闪存。
S903、建立n个压缩数据中的第i个压缩数据块对应的j个数据块中每个数据块的第一索引,并记录所述第一索引与j个数据块的映射关系;其中,i为大于等于1,且小于等于n的正整数;j为大于等于1,且小于等于m的正整数。
应理解为,当压缩完一个压缩数据块时,建立该压缩数据块对应的各数据块中每个数据块的索引。
其中,第一索引用于标识j个数据块包含中每个数据块在存储介质中的存储位置,及j个数据块中每个数据块包含的属性信息。
示例性的,以linux的f2fs读写文件系统为例,数据块在F2fs上的第一索引格式可以为:
第一索引包含属性信息的数据结构可以为:
如,Entry数据结构:
其中,属性信息可以包括以下至少一项:
第一属性(is_reserved),用于表征数据块被压缩后所在的压缩数据块的存储位置是否是预先分配的;
第二属性(is_valid),用于表征数据块的数据页是否有效;
第三属性(first_page),用于表征数据块的数据页是否是数据块的压缩数据块的第一个压缩页;
第四属性(cross_block),用于表征数据块的数据页是否包含在两个压缩块的压缩数据页中;
第五属性(is_compress),用于表征数据块的数据页是否是数据块被压缩后的压缩数据块的压缩页;
第六属性(blkidx),用于表征数据块的数据页所在的压缩数据块的索引地址。
第七属性(ofs),用于表征当数据块的数据页属于数据块的压缩数据块的第一个压缩页时,第七属性的属性值为数据块在压缩数据块对应的集合内的偏移;当数据块的数据页不属于数据块的压缩数据块的第一个压缩页时,第七属性的属性值为数据块的数据页距离压缩数据块的第一个压缩页的距离。
在一种具体可实现方式中,如图10所示,为本申请实施例提供的一种数据块索引更新的流程示意图。如图10所示,属性信息可以包括第三属性(first_page)和第七属性(ofs),S903具体可实现为:
S1031、确定j个数据块中每个数据块的数据页是否是第i个压缩数据块的第一个压缩页。若是,则第三属性的属性值赋值为1;若否,则第三属性的属性值赋值为0。
S1032、当第三属性的属性值为1时,更新第七属性的属性值为在数据块内对应的第一集合内的偏移。
S1033、当第三属性的属性值为0时,更新第七属性的属性值为数据块的数据页距离第i个压缩数据块的第一个压缩页的距离。
当然,属性信息还可以包括第四属性(cross_block),S103具体可实现为:
S1034、确定j个数据块中的每个数据块的数据页是否包含在两个压缩块的压缩数据页中。若是,则第四属性的属性值赋值为1;若否,则第四属性的属性值赋值为0。
当然,属性信息还可以包括第二属性(is_valid),S103具体可实现为:
S1035、确定j个数据块中的每个数据块的数据页是否有效。若是,则第二属性的属性值赋值为1;若否,则第二属性的属性值赋值为0。
当然,属性信息还可以包括第六属性(blkidx),S103具体可实现为:
S1036、确定m个数据块中的每个数据块的数据页所在的压缩数据块的索引地址。
其中,按照m个数据块在内存中的存储位置的顺序,以最小固定压缩单元(如第一集合)的大小进行压缩。当完成第一次压缩(即压缩出第1个压缩数据块)时,第1个压缩数据块对应的完整数据块的数据页均在第1压缩块的索引位置上。如,第1个压缩数据块对应的数据块有:数据块0、数据块1、数据块2、数据块3的部分数据。第1个压缩数据块对应的完整数据块为数据块0、数据块1和数据块2。故,数据块0、数据块1和数据块2的数据页在第1个压缩数据块的索引位置上。
这里需要说明的是,除了上述第七属性需要依附于第三属性之外,其他的属性对应的数据块索引更新流程是相互独立的。本申请实施例中对各个第一属性、第二属性、第四属性、第五属性和第六属性对应的数据块索引更新流程的顺序不做具体限定。
示例性的,假设,如图11所示,m个数据块包括数据块0(即block0)、数据块1(即block1)、数据块2(即block2)、数据块3(即block3)。其中,block0、block1、block2、block3在内存中映射一段连续的地址。当按照block0、block1、block2、block3在内存中映射一段连续的地址的顺序(如图11中由左向右的压缩方向),以最小固定压缩单元(如第一集合)的大小进行压缩。在压缩过程中:
当取block0,及block1的一部分达到最小固定压缩单元(如4kb)时,执行第一次压缩,得到第1个压缩数据块(compress blk0)。此时,建立block0的数据块索引,如表3所示:
表3
数据块序号(BlkNum) | first_page | cross_block | blkidx | ofs | is_valid |
block0 | 1 | 0 | 0 | 0 | 1 |
结合图10可得,block0的数据页落在了第一压缩数据块的第一压缩页上,故first_page赋值为1。block0的数据页只落在了第一压缩数据块的第一压缩页上,故cross_block的赋值为0。block0的数据页在第一压缩数据块的索引地址为第一压缩数据块(compress blk0)的序号,故blkidx的赋值为0。block0的数据页落在了第一压缩数据块的第一压缩页上,block0在其对应的第一集合内的偏移为0,故ofs赋值为0。block0的数据页是有效数据页,故is_valid的赋值为1。
当取block1的剩余部分,block2,及block3的一部分达到最小固定压缩单元(如4kb)时,执行第二次压缩,得到第2个压缩数据块(compress blk1)。此时,建立block1和block2的数据块索引,如表4所示:
表4
数据块序号(BlkNum) | first_page | cross_block | blkidx | ofs | is_valid |
Block1 | 1 | 1 | 1 | Ofs1 | 1 |
Block2 | 0 | 0 | 1 | 1 | 1 |
结合图10可得,block1的数据页落在了第二压缩数据块的第一压缩页上,故first_page赋值为1。Block1的数据页落在了第一压缩数据块和第二压缩数据块的压缩页上,故cross_block的赋值为1。Block1的数据页在第二压缩数据块的索引地址为第二压缩数据块(compress blk1)的序号,故blkidx的赋值为1。Block1的数据页落在了第二压缩数据块的第一压缩页上,block1在数据块的集合内的偏移为Ofs1,故ofs赋值为Ofs1。Block1的数据页是有效数据页,故is_valid的赋值为1。
同理,block2的数据页未落在了第二压缩数据块的第一压缩页上,故first_page赋值为0。Block2的数据页只落在了第二压缩数据块的压缩页上,故cross_block的赋值为0。Block2的数据页在第二压缩数据块的索引地址为第二压缩数据块(compress blk1)的序号,故blkidx的赋值为1。Block2的数据页未落在了第二压缩数据块的第一压缩页上,block2的数据页距离第一压缩数据块的第一压缩页的距离为1,故ofs赋值为1。Block2的数据页是有效数据页,故is_valid的赋值为1。
当取block3的剩余部分达到最小固定压缩单元(如4kb)时,执行第三次压缩,得到第3个压缩数据块(compress blk2)。此时,建立block3的数据块索引,如表5所示:
表5
数据块序号(BlkNum) | first_page | cross_block | blkidx | ofs | is_valid |
block3 | 1 | 1 | 2 | Ofs2 | 1 |
结合图10可得,block3的数据页落在了第三压缩数据块的第一压缩页上,故first_page赋值为1。Block1的数据页落在了第二压缩数据块和第三压缩数据块的压缩页上,故cross_block的赋值为1。Block1的数据页在第三压缩数据块的索引地址为第二压缩数据块(compress blk2)的序号,故blkidx的赋值为2。Block3的数据页落在了第三压缩数据块的第一压缩页上,block3在数据块的集合内的偏移为Ofs2,故ofs赋值为Ofs2。Block3的数据页是有效数据页,故is_valid的赋值为1。
S904、确定m个数据是否压缩完毕。若压缩完毕,则将压缩数据块的压缩页提交至设备。若否,则执行S902。
在一些实施例中,如图12所示,为本申请实施例提供的一种数据压缩方法的流程示意图。如图12所示,在执行S902之前,本申请实施例提供的数据压缩方法还包括:
S905、获取待覆盖写入数据的第二集合。
S906、确定待覆盖写入数据的第二集合中是否包含压缩数据块。若是,则执行S907;若否,则执行现有的数据覆盖写入流程。
其中,第二集合可以包括p个压缩数据块,p为大于等于1的正整数。
S907、获取第二集合中的p个压缩数据块中第一目标压缩数据的压缩页,及第一目标压缩数据块的压缩页对应的q个数据块,q为大于等于1的正整数。
S908、确定q个数据块中的第一目标数据块在q个数据块中的位置偏移。
具体可以为,读取第二集合中各压缩数据块的索引地址,并解压上述压缩数据块,得到上述压缩数据块对应的各数据块。再确定各个数据块在q个数据块中的位置偏移。
S909、根据第一压缩页和第一数据块在压缩页内
的偏移位置,获取第一数据块的数据页。
S910、确定第一目标数据块的数据页为待覆盖写入数据的数据页。
S911、将第二数据块覆盖写入第一数据块的数据页。
S912、将第二数据块分配给第一集合。
综上,在读写文件系统f2fs中,采用本申请实施提供的固定输出压缩模式压缩指定so文件、vdex文件和odex文件等,可达到如下收益效果:如,在电子设备上安装40个应用的过程中,平均每个应用可获得12%的时间收益。应用安装过程so文件存在追加写,vdex文件和odex文件存在覆盖写流程。40个应用的平均启动收益,相比于固定输入压缩模式压缩数据可获得额外8%的启动收益。
上述为本申请实施例提供的数据压缩方法,应用上述数据压缩方法对数据进行压缩之后,需要读取数据。如图14所示,为本申请实施例提供的一种数据读取的流程示意图。如图14所示,该数据读取流程如下:
S141、读取第一数据块的第一索引,得到第一数据块对应的第一压缩数据块的索引地址,其中,第一索引包括第一数据块的属性信息。
其中,第一数据块的属性信息可以包括上述实施例中的第一属性至第七属性中的至少一个。示例性的,以第一数据块的属性信息包括第三属性(first_page)、第四属性(cross_block)、第六属性(blkidx)和第七属性(ofs)为例:
在覆盖写时和只读场景中,假设第一数据块为图13中所示的数据块2(block2)。读取block2的ofs、cross_block、blkidx等属性信息,得到block2对应的第一压缩数据块的索引地址。具体为,沿用表4,读取到block2的ofs的赋值为1,可确定Block2的数据页未落在了第二压缩数据块的第一压缩页上,亦可得到block2的数据页距离第一压缩数据块的第一压缩页的距离为1。再读取到block2的cross_block的赋值为0,可确定Block2的数据页只落在了第一压缩数据块的压缩页上,并为落在其他的压缩数据块的压缩页上。再读取到block2的blkidx的赋值为1,可确定Block2的数据页在第一压缩数据块的索引地址可以为第一压缩数据块的序号,即可得到第一压缩数据块的索引地址为1。
S142、读取第一数据块对应的第一压缩数据块的索引。
S143、根据第一压缩数据块的索引,解压第一压缩数据块,得到第一压缩数据块对应的多个数据块,该多个数据块中包括第一数据块。
具体为,根据第一压缩数据块的索引在设备上找到第一压缩数据块。找到第一压缩数据块之后,解析第一压缩数据块,并得到解析后的多个数据块。例如,如图13所示,第一压缩数据块为copress blk1,copress blk1解析后得到:数据块1(block1)的部分数据,数据块2(block2),及数据块3(block3)的部分数据。
S144、确定第一数据块在解压后的多个数据块内的偏移。
具体为,根据第一数据块的属性信息可得出,第一数据块为图13中所示的数据块2(block2)。如图13所示,block2在copress blk1解析后的多个数据块中的偏移(dstofs)的表达式为:
dstofs=block_size-ofs1%block_size
其中,dstofs表示block2在copress blk1解析后的多个数据块中的偏移;block_size表示数据块的长度;ofs1表示第七属性的属性值;ofs1%block_size表示取余数。
S145、根据第一数据块在解压后的多个数据块内的偏移,可得到第一数据块的数据。
沿用上述示例,第一数据块即为block2,如图13和表4所示,即可得到block2的数据。
具体的,该可能的设计中所述的通信系统用于执行图9所示数据压缩方法中各个设备的功能,因此可以达到与上述数据压缩方法相同的效果。
图15为本申请实施例提供的一种数据压缩装置,该数据压缩装置1500可以包括:第一获取单元1501,用于获取可读写文件系统中数据区的m个数据块,m为大于等于1的正整数。压缩单元1502,用于采用预设压缩算法压缩m个数据块,依次得到n个压缩数据块,其中,每个压缩数据块的第一容量相同,第一容量表征压缩数据块能够包含的压缩处理后的数据的字节数,n为大于等于1的正整数。更新单元1503,用于建立n个压缩数据中的第i个压缩数据块对应的j个数据块中每个数据块的第一索引,并记录第一索引与j个数据块的映射关系。其中,i为大于等于1,且小于等于n的正整数;j为大于等于1,且小于等于m的正整数。其中,第一索引用于标识j个数据块包含中每个数据块在存储介质中的存储位置,及j个数据块中每个数据块包含的属性信息。
在一种具体可实现方式中,压缩单元1502用于:将m个数据块中的各数据块以预设顺序依次分配至第一集合。当第一集合中的j个数据块的数据容量等于第一集合的额定容量时,按照设定压缩的阈值,对j个数据块执行压缩操作,并得到第i个压缩数据块。
在一种具体可实现方式中,更新单元1503用于:当第i个压缩数据块的头部数据和压缩数据的数据总长度与设定压缩的阈值之和小于等于j个数据块的数据总长度时,建立j个数据块中每个数据块的第一索引。
在一种具体可实现方式中,属性信息包括以下至少一项:第一属性,用于表征数据块被压缩后所在的压缩数据块的存储位置是否是预先分配的;第二属性,用于表征数据块的数据页是否有效;第三属性,用于表征数据块的数据页是否是数据块的压缩数据块的第一个压缩页;第四属性,用于表征数据块的数据页是否包含在两个压缩块的压缩数据页中;第五属性,用于表征数据块的数据页是否是数据块被压缩后的压缩数据块的压缩页;第六属性,用于表征数据块的数据页所在的压缩数据块的索引地址;第七属性,用于表征当数据块的数据页属于数据块的压缩数据块的第一个压缩页时,第七属性的属性值为数据块在压缩数据块对应的集合内的偏移;当数据块的数据页不属于数据块的压缩数据块的第一个压缩页时,第七属性的属性值为数据块的数据页距离压缩数据块的第一个压缩页的距离。
在一种具体可实现方式中,属性信息包括第三属性,更新单元1503还用于:当j个数据块中每个数据块的数据页是第i个压缩数据块的第一个压缩页时,第三属性的属性值赋值为1。当j个数据块中每个数据块的数据页不是第i个压缩数据块的第一个压缩页时,第三属性的属性值赋值为0。
在一种具体可实现方式中,属性信息包括第七属性,更新单元1503还用于:当第三属性的属性值为1时,更新第七属性的属性值为数据块在压缩数据块对应的集合内的偏移。当第三属性的属性值为0时,更新第七属性的属性值为数据块的数据页距离压缩数据块的第一个压缩页的距离。
在一种具体可实现方式中,属性信息包括第四属性,更新单元1503还用于:当j个数据块中的每个数据块的数据页包含在两个压缩块的压缩数据页中时,第四属性的属性值赋值为1。当j个数据块中的每个数据块的数据页不包含在两个压缩块的压缩数据页中时,第四属性的属性值赋值为0。
在一种具体可实现方式中,属性信息包括第二属性,更新单元还用于:当j个数据块中的每个数据块的数据页为有效时,第二属性的属性值赋值为1。当j个数据块中的每个数据块的数据页为无效时,第二属性的属性值赋值为0。
在一些可实现方式中,还包括:第二获取单元1504,用于获取待覆盖写入数据的第二集合,第二集合包括p个压缩数据块,p为大于等于1的正整数。第三获取单元1505,用于获取p个压缩数据块中第一目标压缩数据的压缩页,及第一目标压缩数据块的压缩页对应的q个数据块,q为大于等于1的正整数。第一确定单元1506,用于确定q个数据块中的第一目标数据块在q个数据块中的位置偏移。第二确定单元1507,用于确定第一目标数据块的数据页为待覆盖写入数据的数据页。
在一些可实现方式中,还包括:第一读取单元,用于读取第一数据块的第一索引,得到第一数据块对应的第一压缩数据块的索引地址,其中,第一索引包括第一数据块的属性信息。第二读取单元,用于读取第一数据块对应的第一压缩数据块的索引。解压单元,用于根据第一压缩数据块的索引,解压第一压缩数据块,得到第一压缩数据块对应的多个数据块,该多个数据块中包括第一数据块。第三确定单元,用于确定第一数据块在解压后的多个数据块内的偏移。第三获取单元,用于根据第一数据块在解压后的多个数据块内的偏移,可得到第一数据块的数据。
在一种具体可实现方式中,第一索引用于标识第i个压缩数据块在存储介质中的存储位置,及j个数据块中每个数据块包含的属性信息。
因此,本申请实施例提供的数据压缩方法,当读取数据块时,可以有效提高读取效率,可以保证随机读场景以很小的读放大系数完成数据的读取。另外,数据块的索引中包含的属性可以进行修改,从而可以对存储设备上的压缩文件进行修改。可见,本申请实施例解决已有读写文件系统压缩方案随机读放大的问题,同时解决已有的固定输出压缩方式的文件系统无法支持数据和元数据更新的问题。
本申请实施例还提供了一种设备,该设备包括:用于执行上述任一项所述的各个步骤的单元,或者,用于执行上述任一项所述的各个步骤的单元。
本申请实施例还提供了一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行上述任一方法。
本申请实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一方法。
本申请实施例还提供了一种芯片,该芯片包括处理器和接口电路,该接口电路和该处理器耦合,该处理器用于运行计算机程序或指令,以实现上述方法,该接口电路用于与该芯片之外的其它模块进行通信。
在本申请的描述中,除非另有说明,“/”表示“或”的意思,例如,A/B可以表示A或B。本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。此外,“至少一个”是指一个或多个,“多个”是指两个或两个以上。“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
在本申请的描述中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
尽管结合具体特征及其实施例对本申请进行了描述,显而易见的,在不脱离本申请的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本申请的示例性说明,且视为已覆盖本申请范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
需要说明的是:以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (24)
1.一种数据压缩方法,其特征在于,所述方法包括:
获取可读写文件系统中数据区的m个数据块,m为大于等于1的正整数;
采用预设压缩算法压缩所述m个数据块,依次得到n个压缩数据块,其中,每个压缩数据块的第一容量相同,所述第一容量表征压缩数据块能够包含的压缩处理后的数据的字节数,n为大于等于1的正整数;
建立所述n个压缩数据中的第i个压缩数据块对应的j个数据块中每个数据块的第一索引,并记录所述第一索引与j个数据块的映射关系;其中,i为大于等于1,且小于等于n的正整数;j为大于等于1,且小于等于m的正整数;
其中,所述第一索引用于标识所述j个数据块包含中每个数据块在存储介质中的存储位置,及所述j个数据块中每个数据块包含的属性信息。
2.根据权利要求1所述的方法,其特征在于,所述采用预设压缩算法压缩所述m个数据块,依次得到n个压缩数据块,包括:
将所述m个数据块中的各数据块以预设顺序依次分配至第一集合;
当所述第一集合中的所述j个数据块的数据容量等于所述第一集合的额定容量时,按照设定压缩的阈值,对所述j个数据块执行压缩操作,并得到所述第i个压缩数据块。
3.根据权利要求2所述的方法,其特征在于,所述建立所述n个压缩数据中的第i个压缩数据块对应的j个数据块中每个数据块的第一索引,包括:
当所述第i个压缩数据块的头部数据和压缩数据的数据总长度与所述设定压缩的阈值之和小于等于所述j个数据块的数据总长度时,建立所述j个数据块中每个数据块的第一索引。
4.根据权利要求1-3中任一项所述的方法,其特征在于,所述属性信息包括以下至少一项:
第一属性,用于表征数据块被压缩后所在的压缩数据块的存储位置是否是预先分配的;
第二属性,用于表征数据块的数据页是否有效;
第三属性,用于表征数据块的数据页是否是所述数据块的压缩数据块的第一个压缩页;
第四属性,用于表征数据块的数据页是否包含在两个压缩块的压缩数据页中;
第五属性,用于表征数据块的数据页是否是所述数据块被压缩后的压缩数据块的压缩页;
第六属性,用于表征数据块的数据页所在的压缩数据块的索引地址;
第七属性,用于表征当数据块的数据页属于所述数据块的压缩数据块的第一个压缩页时,所述第七属性的属性值为所述数据块在所述压缩数据块对应的集合内的偏移;当所述数据块的数据页不属于所述数据块的压缩数据块的第一个压缩页时,所述第七属性的属性值为所述数据块的数据页距离压缩数据块的第一个压缩页的距离。
5.根据权利要求4所述的方法,其特征在于,所述属性信息包括第三属性,所述建立所述n个压缩数据中的第i个压缩数据块对应的j个数据块中每个数据块的第一索引,包括:
当所述j个数据块中每个数据块的数据页是所述第i个压缩数据块的第一个压缩页时,所述第三属性的属性值赋值为1;
当所述j个数据块中每个数据块的数据页不是所述第i个压缩数据块的第一个压缩页时,所述第三属性的属性值赋值为0。
6.根据权利要求4或5所述的方法,其特征在于,所述属性信息包括第七属性,还包括:
当所述第三属性的属性值为1时,更新所述第七属性的属性值为所述数据块在所述压缩数据块对应的集合内的偏移;
当所述第三属性的属性值为0时,更新所述第七属性的属性值为所述数据块的数据页距离压缩数据块的第一个压缩页的距离。
7.根据权利要求4-6中任一项所述的方法,其特征在于,所述属性信息包括第四属性,所述建立所述n个压缩数据中的第i个压缩数据块对应的j个数据块中每个数据块的第一索引,包括:
当所述j个数据块中的每个数据块的数据页包含在两个压缩块的压缩数据页中时,所述第四属性的属性值赋值为1;
当所述j个数据块中的每个数据块的数据页不包含在两个压缩块的压缩数据页中时,所述第四属性的属性值赋值为0。
8.根据权利要求4-7中任一项所述的方法,其特征在于,所述属性信息包括第二属性,所述建立所述n个压缩数据中的第i个压缩数据块对应的j个数据块中每个数据块的第一索引,包括:
当所述j个数据块中的每个数据块的数据页为有效时,所述第二属性的属性值赋值为1;
当所述j个数据块中的每个数据块的数据页为无效时,所述第二属性的属性值赋值为0。
9.根据权利要求1-8中任一项所述的方法,其特征在于,在所述采用预设压缩算法压缩所述m个数据块,依次得到n个压缩数据块之前,还包括:
获取待覆盖写入数据的第二集合,所述第二集合包括p个压缩数据块,p为大于等于1的正整数;
获取所述p个压缩数据块中第一目标压缩数据的压缩页,及所述第一目标压缩数据块的压缩页对应的q个数据块,q为大于等于1的正整数;
确定所述q个数据块中的第一目标数据块在所述q个数据块中的位置偏移;
确定所述第一目标数据块的数据页为待覆盖写入数据的数据页。
10.根据权利要求1-9中任一项所述的方法,其特征在于,所述第一索引用于标识所述第i个压缩数据块在存储介质中的存储位置,及所述j个数据块中每个数据块包含的属性信息。
11.一种数据压缩装置,其特征在于,所述装置包括:
第一获取单元,用于获取可读写文件系统中数据区的m个数据块,m为大于等于1的正整数;
压缩单元,用于采用预设压缩算法压缩所述m个数据块,依次得到n个压缩数据块,其中,每个压缩数据块的第一容量相同,所述第一容量表征压缩数据块能够包含的压缩处理后的数据的字节数,n为大于等于1的正整数;
更新单元,用于建立所述n个压缩数据中的第i个压缩数据块对应的j个数据块中每个数据块的第一索引,并记录所述第一索引与j个数据块的映射关系;其中,i为大于等于1,且小于等于n的正整数;j为大于等于1,且小于等于m的正整数;
其中,所述第一索引用于标识所述j个数据块包含中每个数据块在存储介质中的存储位置,及所述j个数据块中每个数据块包含的属性信息。
12.根据权利要求11所述的装置,其特征在于,所述压缩单元用于:
将所述m个数据块中的各数据块以预设顺序依次分配至第一集合;
当所述第一集合中的所述j个数据块的数据容量等于所述第一集合的额定容量时,按照设定压缩的阈值,对所述j个数据块执行压缩操作,并得到所述第i个压缩数据块。
13.根据权利要求12所述的装置,其特征在于,所述更新单元用于:
当所述第i个压缩数据块的头部数据和压缩数据的数据总长度与所述设定压缩的阈值之和小于等于所述j个数据块的数据总长度时,建立所述j个数据块中每个数据块的第一索引。
14.根据权利要求11-13中任一项所述的装置,其特征在于,所述属性信息包括以下至少一项:
第一属性,用于表征数据块被压缩后所在的压缩数据块的存储位置是否是预先分配的;
第二属性,用于表征数据块的数据页是否有效;
第三属性,用于表征数据块的数据页是否是所述数据块的压缩数据块的第一个压缩页;
第四属性,用于表征数据块的数据页是否包含在两个压缩块的压缩数据页中;
第五属性,用于表征数据块的数据页是否是所述数据块被压缩后的压缩数据块的压缩页;
第六属性,用于表征数据块的数据页所在的压缩数据块的索引地址;
第七属性,用于表征当数据块的数据页属于所述数据块的压缩数据块的第一个压缩页时,所述第七属性的属性值为所述数据块在所述压缩数据块对应的集合内的偏移;当所述数据块的数据页不属于所述数据块的压缩数据块的第一个压缩页时,所述第七属性的属性值为所述数据块的数据页距离压缩数据块的第一个压缩页的距离。
15.根据权利要求14所述的装置,其特征在于,所述属性信息包括第三属性,所述更新单元还用于:
当所述j个数据块中每个数据块的数据页是所述第i个压缩数据块的第一个压缩页时,所述第三属性的属性值赋值为1;
当所述j个数据块中每个数据块的数据页不是所述第i个压缩数据块的第一个压缩页时,所述第三属性的属性值赋值为0。
16.根据权利要求14或15所述的装置,其特征在于,所述属性信息包括第七属性,所述更新单元还用于:
当所述第三属性的属性值为1时,更新所述第七属性的属性值为所述数据块在所述压缩数据块对应的集合内的偏移;
当所述第三属性的属性值为0时,更新所述第七属性的属性值为所述数据块的数据页距离压缩数据块的第一个压缩页的距离。
17.根据权利要求14-16中任一项所述的装置,其特征在于,所述属性信息包括第四属性,所述更新单元还用于:
当所述j个数据块中的每个数据块的数据页包含在两个压缩块的压缩数据页中时,所述第四属性的属性值赋值为1;
当所述j个数据块中的每个数据块的数据页不包含在两个压缩块的压缩数据页中时,所述第四属性的属性值赋值为0。
18.根据权利要求14-17中任一项所述的装置,其特征在于,所述属性信息包括第二属性,所述更新单元还用于:
当所述j个数据块中的每个数据块的数据页为有效时,所述第二属性的属性值赋值为1;
当所述j个数据块中的每个数据块的数据页为无效时,所述第二属性的属性值赋值为0。
19.根据权利要求11-18中任一项所述的装置,其特征在于,还包括:
第二获取单元,用于获取待覆盖写入数据的第二集合,所述第二集合包括p个压缩数据块,p为大于等于1的正整数;
第三获取单元,用于获取所述p个压缩数据块中第一目标压缩数据的压缩页,及所述第一目标压缩数据块的压缩页对应的q个数据块,q为大于等于1的正整数;
第一确定单元,用于确定所述q个数据块中的第一目标数据块在所述q个数据块中的位置偏移;
第二确定单元,用于确定所述第一目标数据块的数据页为待覆盖写入数据的数据页。
20.根据权利要求11-19中任一项所述的装置,其特征在于,所述第一索引用于标识所述第i个压缩数据块在存储介质中的存储位置,及所述j个数据块中每个数据块包含的属性信息。
21.一种设备,其特征在于,包括:用于执行权利要求1至10中任一项所述的数据压缩方法。
22.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括计算机指令,当所述计算机指令在电子设备上运行时,使得所述电子设备执行如权利要求1至10中任一项所述的数据压缩方法。
23.一种计算机程序,其特征在于,当所述程序被处理器调用时,权利要求1至10中任一项所述的数据压缩方法被执行。
24.一种芯片系统,其特征在于,包括一个或多个处理器,当所述一个或多个处理器执行指令时,所述一个或多个处理器执行如权利要求1至10中任一项所述的数据压缩方法。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110667882.7A CN115480692A (zh) | 2021-06-16 | 2021-06-16 | 一种数据压缩方法及装置 |
EP22823871.3A EP4336336A1 (en) | 2021-06-16 | 2022-04-07 | Data compression method and apparatus |
PCT/CN2022/085621 WO2022262381A1 (zh) | 2021-06-16 | 2022-04-07 | 一种数据压缩方法及装置 |
JP2023577669A JP2024525170A (ja) | 2021-06-16 | 2022-04-07 | データ圧縮方法及び装置 |
US18/567,644 US20240283463A1 (en) | 2021-06-16 | 2022-04-07 | Data compression method and apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110667882.7A CN115480692A (zh) | 2021-06-16 | 2021-06-16 | 一种数据压缩方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115480692A true CN115480692A (zh) | 2022-12-16 |
Family
ID=84419764
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110667882.7A Pending CN115480692A (zh) | 2021-06-16 | 2021-06-16 | 一种数据压缩方法及装置 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20240283463A1 (zh) |
EP (1) | EP4336336A1 (zh) |
JP (1) | JP2024525170A (zh) |
CN (1) | CN115480692A (zh) |
WO (1) | WO2022262381A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117708070A (zh) * | 2023-07-27 | 2024-03-15 | 荣耀终端有限公司 | 一种文件压缩方法及电子设备 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117389484B (zh) * | 2023-12-12 | 2024-04-26 | 深圳大普微电子股份有限公司 | 数据存储处理方法、装置、设备及存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727298B (zh) * | 2009-11-04 | 2012-05-23 | 北京东方广视科技股份有限公司 | 实现独立磁盘冗余阵列的方法和装置 |
CN103020205B (zh) * | 2012-12-05 | 2018-07-31 | 中科天玑数据科技股份有限公司 | 一种分布式文件系统上基于硬件加速卡的压缩解压缩方法 |
CN103516369B (zh) * | 2013-06-20 | 2016-12-28 | 易乐天 | 一种自适应数据压缩和解压缩的方法和系统及存储装置 |
CN107947799B (zh) * | 2017-11-28 | 2021-06-29 | 郑州云海信息技术有限公司 | 一种数据压缩方法及装置 |
US20190339911A1 (en) * | 2018-05-04 | 2019-11-07 | EMC IP Holding Company LLC | Reporting of space savings due to compression in storage systems |
CN110557124B (zh) * | 2018-05-30 | 2021-06-22 | 华为技术有限公司 | 一种数据压缩方法及装置 |
-
2021
- 2021-06-16 CN CN202110667882.7A patent/CN115480692A/zh active Pending
-
2022
- 2022-04-07 JP JP2023577669A patent/JP2024525170A/ja active Pending
- 2022-04-07 EP EP22823871.3A patent/EP4336336A1/en active Pending
- 2022-04-07 WO PCT/CN2022/085621 patent/WO2022262381A1/zh active Application Filing
- 2022-04-07 US US18/567,644 patent/US20240283463A1/en active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117708070A (zh) * | 2023-07-27 | 2024-03-15 | 荣耀终端有限公司 | 一种文件压缩方法及电子设备 |
CN117708070B (zh) * | 2023-07-27 | 2024-08-02 | 荣耀终端有限公司 | 一种文件压缩方法及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
US20240283463A1 (en) | 2024-08-22 |
WO2022262381A1 (zh) | 2022-12-22 |
JP2024525170A (ja) | 2024-07-10 |
EP4336336A1 (en) | 2024-03-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Kwon et al. | Strata: A cross media file system | |
JP6664218B2 (ja) | 効率的なデータオブジェクトストレージ及び検索 | |
US8285967B1 (en) | Method for on-demand block map generation for direct mapped LUN | |
US9342256B2 (en) | Epoch based storage management for a storage device | |
US8924664B2 (en) | Logical object deletion | |
KR20090046567A (ko) | 반도체 디스크 및 그것의 동작 방법 | |
US11256678B2 (en) | Reconstruction of links between logical pages in a storage system | |
JP2016509310A (ja) | 格納されたデータにおける冗長削減 | |
US9542401B1 (en) | Using extents of indirect blocks for file mapping of large files | |
US7415653B1 (en) | Method and apparatus for vectored block-level checksum for file system data integrity | |
CN114860163A (zh) | 一种存储系统、内存管理方法和管理节点 | |
US11099940B1 (en) | Reconstruction of links to orphaned logical pages in a storage system | |
WO2022262381A1 (zh) | 一种数据压缩方法及装置 | |
CN112463753B (zh) | 一种区块链数据存储方法、系统、设备及可读存储介质 | |
CN109804359A (zh) | 用于将数据回写到存储设备的系统和方法 | |
WO2021208239A1 (zh) | 一种低延迟的文件系统地址空间管理方法、系统及介质 | |
US11334523B2 (en) | Finding storage objects of a snapshot group pointing to a logical page in a logical address space of a storage system | |
US11232043B2 (en) | Mapping virtual block addresses to portions of a logical address space that point to the virtual block addresses | |
CN115904255A (zh) | 一种数据请求方法、装置、设备及存储介质 | |
US7424574B1 (en) | Method and apparatus for dynamic striping | |
Jiao et al. | BetrFS: a compleat file system for commodity SSDs | |
US20210034467A1 (en) | Techniques for duplicating inode state to prevent loss of inode metadata | |
US20230026819A1 (en) | Techniques for metadata updating and retrieval | |
CN115168317A (zh) | 一种lsm树存储引擎构建方法和系统 | |
Zhou et al. | A file system bypassing volatile main memory: Towards a single-level persistent store |
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 |