一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据处理方法及存储设备与流程

2021-12-17 20:54:00 来源:中国专利 TAG:
数据处理方法及存储设备1.本技术要求于2020年06月11日提交的申请号为202010526840.7、发明名称为“一种存储系统、存储节点和数据存储方法”的中国专利申请的优先权,其全部内容通过引用结合在本技术中。
技术领域
:2.本技术涉及存储
技术领域
:,特别涉及一种数据处理方法及存储设备。
背景技术
::3.重删和压缩是存储行业中的关键技术。存储设备通过进行重删和压缩,能够减少实际存储的数据规模,节约数据在存储设备中占用的存储空间,提高存储设备的存储效率。4.目前,存储设备会预先设置一个固定的粒度,基于该粒度进行重删,并基于该粒度进行压缩。例如,预先将粒度设定为8千字节(kilobyte,kb),则存储设备在进行重删时,会判断每8kb的数据块是否是重复块,如果某个8kb的数据块是重复块,则存储设备删除该8kb的数据块;并且,存储设备在进行压缩时,每一次压缩8kb的数据块。5.采用上述方法处理数据时,重删粒度和压缩粒度必须是相同的,可见该方法局限性强。技术实现要素:6.本技术实施例提供了一种数据处理方法及存储设备,一定程度上解决数据处理方法面临的局限性。所述技术方案如下:7.第一方面,提供了一种数据处理方法,该方法由存储设备执行,包括:获取数据;基于第一粒度对所述数据进行重复数据删除处理;基于第二粒度对所述数据进行压缩处理,所述第二粒度的尺寸大于所述第一粒度的尺寸;将经过所述重复数据删除处理和所述压缩处理的数据存储在所述存储设备的硬盘中。8.在第一方面提供的方法中,由于存储设备在重复数据删除处理和压缩处理时采用了不一样的粒度,采用大粒度进行重复数据删除处理,采用小粒度进行压缩处理,因此摆脱了重删粒度和压缩粒度必须相同的限制,一定程度上避免粒度过大而导致重删率下降以及粒度过小而导致压缩率下降,有助于提升重删压缩整体的缩减率。9.在第一方面中,本技术并不限定所述重复数据删除处理和所述压缩处理的先后顺序。某些场景下可以先执行压缩处理再执行重复数据删除处理,在某些场景下可以先执行重复数据删除处理再执行压缩处理。以先执行重复数据删除处理再执行压缩处理为例,在经过重复数据删除处理之后得到重复块和非重复块,本技术可以只对非重复块进行压缩处理。如果先执行压缩处理再执行重复数据删除处理,就是对所述数据进行压缩以后得到压缩块,再针对所述压缩块进行重复数据删除处理。10.可选地,所述存储设备中存储有元数据,所述元数据是基于元数据管理粒度来管理的,所述元数据管理粒度的尺寸小于或等于设定的最大值,并且大于或等于设定的最小值,所述第一粒度的尺寸等于所述最小值的整数倍。11.通过这种方式,由于将元数据管理粒度的最小值作为重复数据删除处理时使用的粒度,有助于重复数据删除处理时取到较优粒度,从而提高重删率并节省存储资源。12.可选地,所述第二粒度的尺寸是所述最小值与压缩率的乘积。13.通过这种方式,由于压缩处理时采用的粒度不再是固定的值,而是根据压缩率动态选择的,从而保证数据读取性能不下降的情况下压缩率较优。14.可选地,所述基于第一粒度对所述数据进行重复数据删除处理包括:将所述数据划分为多个数据块;获取每个数据块的指纹;根据所述指纹,从所述多个数据块中确定重复块以及非重复块。15.可选地,所述基于第二粒度对所述数据进行压缩处理包括:基于所述第二粒度对所述非重复块进行压缩处理,得到压缩块,所述经过所述重复数据删除处理和所述压缩处理的数据包括所述压缩块。16.可选地,所述方法还包括:记录所述压缩块的元数据。17.可选地,所述记录所述压缩块的元数据包括:如果所述压缩块的数量为多个且多个压缩块的地址连续,为所述多个压缩块记录一条元数据。18.通过为多个地址连续的压缩块记录一条元数据,减少了记录的元数据的数量,从而节省元数据在存储设备中占用的存储资源。19.可选地,所述多个压缩块的地址连续是指多个压缩块的物理地址连续且逻辑地址连续。20.可选地,所述一条元数据包括所述多个压缩块中第一个压缩块的地址以及每个压缩块的长度。21.通过采用这样的方式记录元数据,在能够通过元数据读取数据的基础上,达到压缩的元数据空间较优的效果。22.可选地,所述数据在经过所述重复数据删除处理和所述压缩处理之前还基于第三粒度压缩过,所述第三粒度的尺寸小于所述第二粒度的尺寸。23.通过这种方式,由于存储设备在发现压缩块原来的压缩粒度(第三粒度)并不是较优的压缩粒度(第二粒度)时,重新按照较优的压缩粒度(第二粒度)重新进行压缩,使得压缩块的压缩粒度得到优化,因此有助于提升压缩率。24.可选地,所述存储设备是存储阵列。25.可选地,所述存储设备是分布式存储系统中的一个存储节点。26.可选地,所述第一粒度为4kb,所述第二粒度为32kb。27.第二方面,提供了一种数据处理方法,该方法由存储设备执行,包括:获取数据;基于元数据管理粒度,确定第一粒度,所述元数据管理粒度是用于管理所述存储设备存储的元数据的粒度,所述元数据管理粒度的尺寸小于或等于设定的最大值并且大于或等于设定的最小值,所述第一粒度的尺寸等于所述最小值的整数倍;基于所述第一粒度对所述数据进行重复数据删除处理;将经过所述重复数据删除处理的数据存储在所述存储设备的硬盘中。28.在第二方面提供的方法中,由于存储设备重复数据删除处理时采用的粒度是基于元数据管理粒度确定的,通过将元数据管理粒度的最小值作为重复数据删除处理时使用的粒度,有助于重复数据删除处理时取到较优粒度,从而提高重删率并节省存储资源。29.可选地,所述基于第一粒度对所述数据进行重复数据删除处理包括:将所述数据划分为多个数据块;获取每个数据块的指纹;根据所述指纹,从所述多个数据块中确定重复块以及非重复块。30.可选地,所述第一粒度为4kb。31.第三方面,提供了一种数据处理方法,该方法由存储设备执行,包括:获取数据;基于元数据管理粒度,确定第二粒度,所述元数据管理粒度是用于管理所述存储设备存储的元数据的粒度,所述元数据管理粒度的尺寸小于或等于设定的最大值并且大于或等于设定的最小值,所述第二粒度的尺寸是所述最小值与设定的压缩率的乘积;基于所述第二粒度对所述数据进行压缩处理;将经过所述压缩处理的数据存储在所述存储设备的硬盘中。32.在第三方面提供的方法中,由于存储设备压缩处理时采用的粒度不再是固定的值,而是根据元数据管理粒度以及压缩率动态确定的,从而保证数据读取性能不下降的情况下压缩率较优。33.可选地,所述第二粒度的尺寸是所述最小值与压缩率的乘积。34.可选地,所述基于第二粒度对所述数据进行压缩处理包括:35.基于所述第二粒度对所述非重复块进行压缩处理,得到压缩块,所述经过所述重复数据删除处理和所述压缩处理的数据包括所述压缩块。36.可选地,所述方法还包括:记录所述压缩块的元数据。37.可选地,所述记录所述压缩块的元数据包括:38.如果所述压缩块的数量为多个且多个压缩块的地址连续,为所述多个压缩块记录一条元数据。39.可选地,所述一条元数据包括所述多个压缩块中第一个压缩块的地址以及每个压缩块的长度。40.可选地,所述数据在经过所述重复数据删除处理和所述压缩处理之前还基于第三粒度压缩过,所述第三粒度的尺寸小于所述第二粒度的尺寸。41.可选地,所述方法还包括:保存所述重复块的指纹。42.可选地,所述方法还包括:记录所述非重复块的元数据,并将所述非重复块的指纹保存至指纹表。43.可选地,所述第二粒度为32kb。44.第四方面,提供了一种存储设备,该存储设备包括至少一个处理器和硬盘,该至少一个处理器用于执行指令,使得该存储设备执行上述第一方面、第一方面中任一种可选方式、第二方面、第二方面中任一种可选方式、第三方面、第三方面中任一种可选方式中的至少一项所提供的数据处理方法,所述硬盘用于存储数据。第四方面提供的存储设备的具体细节可参见上述第一方面、第一方面中任一种可选方式、第二方面、第二方面中任一种可选方式、第三方面、第三方面中任一种可选方式中的至少一项,此处不再赘述。45.在一些实施例中,该至少一个处理器包括第一处理器、第二处理器以及第三处理器;46.所述第一处理器,用于获取数据;47.所述第二处理器,用于基于第一粒度对所述数据进行重复数据删除处理;48.所述第三处理器,用于基于第二粒度对所述数据进行压缩处理,所述第二粒度的尺寸大于所述第一粒度的尺寸;49.所述第一处理器,还用于将经过所述重复数据删除处理和所述压缩处理的数据存储在所述硬盘中。50.第五方面,提供了一种存储设备,该存储设备具有实现上述第一方面、第一方面中任一种可选方式、第二方面、第二方面中任一种可选方式、第三方面、第三方面中任一种可选方式中的至少一项中数据处理的功能。存储设备包括至少一个模块,至少一个模块用于实现上述第一方面、第一方面中任一种可选方式、第二方面、第二方面中任一种可选方式、第三方面、第三方面中任一种可选方式中的至少一项所提供的数据处理方法。51.在一些实施例中,存储设备中的模块通过软件实现,存储设备中的模块是程序模块。在另一些实施例中,存储设备中的模块通过硬件或固件实现。第五方面提供的存储设备的具体细节可参见上述第一方面、第一方面中任一种可选方式、第二方面、第二方面中任一种可选方式、第三方面或者第三方面中任一种可选方式,此处不再赘述。52.第六方面,提供了一种计算机可读存储介质,该存储介质中存储有至少一条指令,该指令由处理器读取以使存储设备执行上述第一方面、第一方面中任一种可选方式、第二方面、第二方面中任一种可选方式、第三方面、第三方面中任一种可选方式中的至少一项所提供的数据处理方法。53.第七方面,提供了一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。存储设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该存储设备执行上述第一方面、第一方面中任一种可选方式、第二方面、第二方面中任一种可选方式、第三方面、第三方面中任一种可选方式中的至少一项所提供的数据处理方法。54.第八方面,提供了一种芯片,当该芯片在存储设备上运行时,使得存储设备执行上述第一方面、第一方面中任一种可选方式、第二方面、第二方面中任一种可选方式、第三方面、第三方面中任一种可选方式中的至少一项所提供的数据处理方法。附图说明55.图1是本技术实施例提供的一种分布式存储系统的系统架构的示意图;56.图2是本技术实施例提供的一种存储元数据的示意图;57.图3是本技术实施例提供的一种数据处理方法的流程图;58.图4是本技术实施例提供的一种前重删的示意图;59.图5是本技术实施例提供的一种数据处理方法的流程图;60.图6是本技术实施例提供的一种后重删的示意图;61.图7是本技术实施例提供的一种为多个压缩块记录一条元数据的示意图;62.图8是本技术实施例提供的一种存储设备的结构示意图。具体实施方式63.为使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。64.由于本技术实施例涉及重删压缩技术的应用,为了便于理解,下面先对本技术实施例涉及的重删压缩技术中的术语相关概念进行介绍。65.(1)重删(deduplicate)66.重删,是重复数据删除的简称,它是一种数据缩减技术。在存储系统中存储了很多重复数据,这些数据占用了大量硬盘空间,利用重删技术,能够删除重复数据,对于相同数据仅存储一份,从而节约数据存储空间。重删的技术原理包括:首先执行分块,即,将待写入的数据划分为多个数据块;然后进行指纹计算,即,根据每个划分的数据块,计算数据块的指纹;然后进行指纹查找,即,以指纹为索引,在指纹表中进行查找比对。如果指纹表存在相同的指纹,说明为重复块,则不保存数据块,而是保存数据块的指纹索引。如果指纹表不存在相同的指纹,表明数据块是一个非重复块(也称唯一块),则保存数据块并创建数据块的元数据。按照执行时机的不同,重删分为前重删和后重删,以下通过(2)和(3)进行介绍。按照查重方式的不同,重删分为定长重删和相似重删,以下通过(4)和(5)进行介绍。67.(2)前重删68.前重删是指在数据写入硬盘之前进行重删。前重删也称在线重删。69.(3)后重删70.后重删是指在数据写入硬盘之后进行重删。后重删也称离线重删。后重删的实现方式包括多种。在一些实施例中,将数据写入硬盘之后,将数据从硬盘读取到缓存中;为缓存中的数据进行指纹计算,通过比较指纹是否相同从而确定重复数据;如果发现重复数据则进行重删,再将重删后的数据重新写入硬盘中。在一些实施例中,当获取到待存储的数据时,计算数据的指纹;将数据写入到硬盘中,并将指纹保存至机会表中。当需要进行重删时,从机会表中读取指纹,对不同指纹进行比较从而确定重复数据;如果发现重复数据则进行重删。71.(4)定长重删72.采用定长重删的方式时,要求不同数据块必须完全相同才能将数据块作为重复块并重删。并且,在执行分块时,会按照预先设定的粒度对数据进行划分,在进行指纹查找时,数据是按粒度对齐的。73.(5)相似重删74.采用相似重删的方式时,不要求数据块完全匹配,两个数据块相似即可判定数据块为重复块。并且,在执行分块时,也会按照预先设定的粒度对数据进行划分。75.(6)指纹(fingerprint,fp)76.指纹是数据块的本质特征。数据块本身往往较大,因此指纹的目标是期望以较小的数据表示(如16、32、64、128字节)来区别不同数据块。在一些实施例中,采用哈希算法计算数据块的指纹,数据块的指纹为数据库的哈希值。在理想情况下,每个数据块具有唯一的指纹,不同的数据块具有不同的指纹。当然,在存在哈希碰撞的情况下,不同数据块也可能具有相同的指纹。77.(7)压缩78.压缩是一种字节级的数据缩减技术,其思想是采用编码技术,将较长的数据用较短的、经过编码的格式来表示,以此达到减少数据大小的目的。79.(8)压缩率80.压缩率是一个大于或等于1的正整数。压缩率表示数据在压缩前的数据量与压缩后的数据量之间的比值。例如,将32kb的数据压缩为8kb,则压缩率为4:1。81.(9)重删压缩82.重删压缩是指重删和压缩搭配一起使用的缩减技术。在采用重删压缩的方案时,当查找到重复块以及非重复块后,会先对多个非重复块进行压缩,保存压缩后的块。当读取数据时,会对压缩后的块进行解压缩。由于非重复块经过了压缩,使得数据的缩减效果为重删效果和压缩效果的叠加,缩减掉的数据更多。83.(10)读放大84.读放大是指从硬盘中实际读取的数据粒度大于读请求对应的数据粒度的情况。读放大会带来网络带宽资源的消耗,影响数据读取的性能。例如,硬盘存储数据的粒度是8kb。存储设备接收读请求,读请求指示存储设备读取4kb数据;存储设备从硬盘中读取4kb数据所在的8kb数据块,从8kb数据块中确定被请求读取的4kb数据,将4kb数据返回给读请求的发起方。在这个例子中,读请求对应的数据粒度是4kb,而实际读取的数据粒度是8kb,由于额外读取4kb数据,会过多占用带宽资源并影响数据读取性能。85.(11)指纹索引(fingerprintindex,fpi)86.指纹索引即数据块的指纹的索引。指纹索引用于查询对应的指纹。为了简明起见,本技术实施例后续在不至于引入理解困难的情况下用“fpi数字”的形式来简化表示具体的fpi,数字的含义是对应数据块的标识,如fpi4表示数据块4的指纹索引。87.(12)存储单元88.存储单元是指存储设备中能够进行存储操作的最小单元,存储操作包括数据写入操作或数据读写操作。例如,存储单元是存储设备的一个扇区。89.(13)物理地址90.物理地址是指数据在硬盘中存储的实际地址。具体地,硬盘上的每个区域是由区域所在的磁头(heads)、柱面(cylinder,即磁道)、扇区(sector)确定的。物理地址包括三个参数,分别是磁头参数、柱面参数以及扇区参数。磁头参数用于标识数据所在的磁头。柱面参数用于标识数据所在的柱面,扇区参数用于标识数据所在的扇区。通过数据的物理地址,能够指明硬盘应当用哪个磁头、从哪个柱面上哪个扇区上读取数据。91.(14)逻辑地址92.逻辑地址和物理地址不同。逻辑地址的全称是逻辑区块地址(logicalblockaddress,lba)。通过采用lba作为数据的地址,将物理地址这种基于磁头、柱面和扇区的三维寻址方式转变为一维的线性寻址,从而提高了寻址的效率。93.逻辑地址是存储设备呈现给主机的逻辑空间的地址。主机在向存储设备发送写请求或读请求时,会将逻辑地址携带在写请求或读请求中。存储设备接收到送写请求或读请求时,会获取写请求或读请求携带的逻辑地址,对逻辑地址经过一次或多次地址转换确定物理地址,向物理地址写入数据或者从物理地址读取数据。94.逻辑地址连续例如是lba连续。例如,数据块1的lba是201,数据块2的lba是202,数据块3的lba是203,可称数据块1、数据块2和数据块3的逻辑地址连续。95.(15)元数据96.元数据是描述业务数据属性的数据。例如,元数据描述指纹、逻辑地址、物理地址、逻辑地址与物理地址之间的映射关系,指纹与逻辑地址之间的映射关系等等。元数据的存储方式与业务数据的存储方式有所区别。元数据一般采用一定的数据结构来存储。存储元数据的数据结构例如为二叉树、b 树等,这些数据结构要求以一定的粒度来管理元数据。在本技术的一些实施例中,将管理元数据的粒度称为元数据管理粒度。97.(16)指纹表98.指纹表用于保存存储设备存储的每个数据块的指纹。99.(17)机会表100.机会表用于保存最近一段时间在存储设备写入的数据块的指纹。机会表与指纹表有所区别。机会表可以理解为一个临时的窗口,用于寻找具有重删机会的数据块。具体地,存储设备会将最近一段时间产生的数据块的指纹存放在机会表中,当满足重删触发条件(如负载低于阈值)时,存储设备会根据机会表中的指纹找到重复块,对重复块进行重删后,将重复块的指纹再保存至指纹表中。101.下面介绍本技术实施例提供的应用场景。102.本实施例提供的方法能够应用在分布式存储系统或集中式存储设备中,下面对这两种应用场景分别进行介绍。103.应用场景一、分布式存储系统104.参见附图1,本实施例提供了一种分布式存储系统100,如图1所示,系统100包括多个存储节点101以及至少一个主机102。每个主机102与存储节点101之间均通过有线或无线网络建立通信连接。例如,参考图1,各个主机102与存储节点101之间通过网际互连协议(internetprotocol,ip)网络或者其他网络建立通信连接。105.每个存储节点101包括网卡1011、一个或多个硬盘1012、处理器1013、处理器1014以及内存1015。106.网卡1011也称为网络接口卡(networkinterfacecard,nic)。网卡1011用于与主机102通信。107.硬盘1012例如为固态硬盘(solidstatedisk,ssd)或硬盘驱动器(harddiskdrive,hdd)。本实施例对存储节点101与硬盘1012之间的位置关系不做限定。在一些实施例中,如附图1所示,硬盘1012位于存储节点101的内部。例如,存储节点101为服务器,该服务器内设置有多个硬盘。在另一些实施例中,硬盘1012不在存储节点101的内部,而是位于与存储节点101耦合的硬盘框内,该硬盘框包括多个硬盘1012。108.处理器1013例如为中央处理器(centralprocessingunit,cpu)。处理器1013例如配置一个或多个。109.处理器1014用于承担压缩和/或重删的功能,从而减轻处理器1013的计算负担。在一些实施例中,处理器1014是和处理器1013具有相同物理形态的处理器。在另一些实施例中,处理器1014是和处理器1013具有不同物理形态的处理器。可选地,处理器1014是具备计算能力的处理芯片。例如,处理器1014是一个加速卡或协处理器或图形处理器(graphicsprocessingunit,gpu)或神经网络处理器(neural-networkprocessingunit,npu)等。处理器1014例如配置一个或多个。110.在存储节点101既包括处理器1014,又包括处理器1013的情况下,处理器1014和处理器1013可选地共同配合完成数据处理操作。例如,处理器1013用于从主机接收数据,将数据发送给处理器1014,以及指示处理器1014对数据进行压缩和/或重删。处理器1014在接收到处理器1013的指令的触发下,进行压缩和/或重删。111.在一些实施例中,在存储节点101具有多个处理器1014的情况下,处理器1013用于对多个处理器1014进行调度。例如,处理器1013将压缩任务和/或重删任务划分为多个子任务,将每个子任务分配至对应的处理器1014。112.在一些实施例中,存储节点101还包括通信总线(在附图1未示出),处理器1014和处理器1013例如均通过通信总线访问内存1015,得到内存1015缓存的指令或代码。113.需要说明的一点是,处理器1014是存储节点101可选的组件。在另一些实施例中,存储节点101没有处理器1014而具有处理器1013。例如,由处理器1013独立完成获取数据、对数据进行压缩和/或重删的操作。114.主机102包括应用1031以及客户端1032。115.存储节点101能够为主机102提供数据存储服务。例如,当主机102需要将数据存储至存储节点101时,主机102中应用1031(也称为上层应用)生成写请求,向存储节点101发送写请求。存储节点通过网卡1011接收写请求,将写请求指示的数据写入至硬盘1012,并保存数据的元数据。116.存储节点101能够为主机102提供数据访问服务。例如,当主机102需要访问存储节点101存储的数据时,主机102中应用1031生成读请求,向存储节点101发送读请求。存储节点通过网卡1011接收读请求。存储节点根据读请求指示的数据以及保存的元数据,确定数据在硬盘1012中的地址,从硬盘1012中的相应地址读取数据,通过网卡1011将数据发送至主机102。主机102接收数据,从而获得了存储节点101存储的数据。117.应用场景二、集中式存储设备118.集中式存储设备例如是存储阵列。存储阵列包括一个或多个控制器,又称存储控制器和一个或多个硬盘。集中式存储设备也可以是一个存储节点,如图1的存储节点101所示。存储设备中的控制器也称存储控制器。集中式存储设备通过有线网络或无线网络与主机相连。119.在以上介绍的应用场景中,随着数据的爆炸式增长,主机的数据存储需求与日俱增,数据在存储系统中占用的空间也越来越大。为了缓解存储系统的空间增长问题,重删压缩技术已成为本领域的热门研究课题。通过重删压缩,能够缩减数据的规模,从而有效降低存储系统的开销。120.时下的重删压缩方案中,由于元数据管理粒度是固定的,压缩和重删时使用的粒度也是保持一致的。121.但是经过研究发现,在重删和压缩采用相同粒度的情况下,如果粒度过大,压缩率会提高,重删率会下降;如果粒度过小,重删率提高,压缩率下降。由此可见,如果重删与压缩使用相同的粒度,会导致要么重删率下降,要么压缩率下降,重删率和压缩率无法同时达到较优。122.有鉴于此,本技术实施例中,存储设备在重删和压缩时会分别采用不同的粒度。即,重删粒度和压缩粒度是不同的,从而避免粒度过大导致重删率下降的情况以及粒度过小导致压缩率下降的情况。下面,通过(a)至(g)对本技术涉及的几种粒度以及不同粒度之间的关系进行介绍。123.(a)粒度(grain)124.粒度也称数据的尺寸、数据的大小或数据的长度。粒度越大,表示一个数据的尺寸越大。粒度的单位包括而不限于kb、兆(mb,mega,简称m)等。例如,粒度是4kb,含义是指一条数据的尺寸是4kb。对于存储设备而言,粒度是重要的参数。粒度会影响存储设备的很多业务,包括而不限于数据读取、数据存储、重删、压缩、元数据管理等。本技术的一些实施例中,将侧重描述重删、压缩、元数据管理这几类业务中涉及的粒度、不同粒度的关系以及粒度对于存储设备的影响。125.(b)重删粒度126.重删粒度用于指示存储设备查询重复数据时使用的粒度。重删粒度等于重删过程中分块的粒度。例如,在重删粒度的尺寸是4kb的情况下,存储设备会将数据划分为多个4kb数据块;存储设备会判断每个4kb数据块是否是重复块;如果一个4kb数据块是重复块,则存储设备会删除该4kb数据块。在一些实施例中,如果采用定长重删的方式进行重删,重删粒度的尺寸为4kb。如果采用相似重删的方式进行重删,重删粒度的尺寸为8kb。127.(c)压缩粒度128.压缩粒度用于指示存储设备执行数据压缩时使用的粒度。存储设备会根据压缩粒度,确定一次对多大的数据进行压缩。例如,在压缩粒度的尺寸是32kb的情况下,存储设备会对32kb的数据进行压缩。压缩粒度的尺寸会影响压缩率。经实验发现,压缩率与压缩粒度的尺寸成正比。当压缩粒度的尺寸小于32kb时,压缩粒度的尺寸越大,压缩率越大;当压缩粒度的尺寸超过32kb时,压缩率趋于稳定。在一些实施例中,压缩粒度的尺寸是根据压缩率确定的。在一些实施例中,压缩粒度的尺寸设置为32kb。129.(d)元数据管理粒度130.元数据管理粒度用于指示存储设备记录的元数据的粒度。例如,在一些实施例中,元数据管理粒度的取值不是一个固定值,而是能够在一定范围内动态变化。具体地,元数据管理粒度为一个区间。该区间具有最小值和最大值。存储设备记录的元数据粒度例如是区间的最小值、区间的最大值或者最小值与最大值之间的值。例如,元数据管理粒度的尺寸是[4kb,1m],则存储设备可选地记录一条4kb的元数据,或者记录一条1m的元数据,或者记录一条粒度在4kb与1m之间的元数据。[0131]在一些实施例中,元数据管理粒度的尺寸是存储单元的尺寸的整数倍。例如,元数据是通过至少一个存储单元存储的。元数据和存储单元之间的数量关系为一对一的关系或者一对多的关系。当元数据和存储单元之间的数量关系为一对一的关系时,一个存储单元存储一条元数据。当元数据和存储单元之间的数量关系为一对多的关系时,多个存储单元共同存储一条元数据,例如,多个物理地址连续且逻辑地址连续的存储单元共同存储一条元数据。在元数据采用这种方式存储时,元数据管理粒度的尺寸的最小值是一个存储单元的尺寸。[0132]例如,参见附图2,附图2示出了存储设备中的8个存储单元,这8个存储单元分别是存储单元201、存储单元202、存储单元203、存储单元204、存储单元205、存储单元206、存储单元207和存储单元208。元数据管理粒度的尺寸的最小值是8个存储单元中一个存储单元的尺寸,在附图2中通过1个格子表示。元数据管理粒度的尺寸的最大值是8个存储单元的尺寸之和,在附图2中通过8个格子表示。[0133](e)重删粒度与压缩粒度之间的关系[0134]在一些实施例中,重删粒度的尺寸与压缩粒度的尺寸成反比。重删粒度的尺寸小于压缩粒度的尺寸。例如,重删粒度的尺寸是4kb,压缩粒度的尺寸是32kb。由于重删粒度越小越有助于提升重删率,压缩率越大越有助于提升压缩率,因此存储设备采用大粒度压缩、小粒度重删的方案,有助于重删率和压缩率都得到提升,达到缩减率整体较优的效果。[0135]在一些实施例中,重删粒度以及压缩粒度均是根据元数据管理粒度确定的,具体参见下述(f)和(g)。存储设备通过根据元数据管理粒度分别为重删和压缩选择粒度,有助于重删和压缩均按照各自较优的粒度进行操作,使得重删率和压缩率均达到较优。[0136](f)重删粒度与元数据管理粒度之间的关系[0137]在一些实施例中,重删粒度是根据元数据管理粒度确定的。在一些实施例中,重删粒度的尺寸等于元数据管理粒度的尺寸的最小值。例如,在元数据管理粒度是[4kb,1m]的情况下,重删粒度的尺寸等于4kb。例如,在元数据管理粒度是[8kb,2m]的情况下,重删粒度的尺寸等于8kb。其中,在元数据管理粒度的最小值是一个存储单元的尺寸的情况下,重删粒度的尺寸例如是一个存储单元的尺寸。例如,参见附图2,重删粒度的尺寸例如是存储单元201的尺寸。[0138]通过将元数据管理粒度的最小值作为重删粒度,有助于重删粒度取到较优粒度,从而提高重删率并节省存储资源。以下对这一技术效果的技术原理进行论述。[0139]一方面,重删粒度会影响重删率。如果重删粒度过大,则重删率会下降。例如,如果重删粒度为32kb,则32kb的数据均是重复数据时,存储设备才会将32kb的数据作为重复块并删除。如果32kb的数据中只有部分数据是重复数据,比如只有24kb的数据是重复数据,另外8kb的数据不是重复数据,存储设备是不会进行重删的。从这个例子可见,重删粒度过大会导致重删效果不佳。[0140]另一方面,重删粒度会影响到元数据的存储开销。由于存储设备会为每个重复块记录一条元数据,重删粒度越小,存储设备记录的元数据就会越多。因此,如果重删粒度过小,产生过量的重复块,存储设备就需要记录过多的元数据,导致元数据占用过多的存储资源。[0141]而本实施例通过将元数据管理粒度的最小值作为重删粒度,由于重删粒度足够小,因此有助于提高重删率。并且,存储设备在重删时,无需为小于元数据管理粒度的最小值的数据记录元数据,因此避免记录过多元数据带来的资源浪费。[0142]在另一些实施例中,重删粒度的尺寸不是元数据管理粒度的最小值,而是元数据管理粒度的最小值的整数倍。例如,在元数据管理粒度是[4kb,1m]的情况下,重删粒度的尺寸为4kb至1m之间任意4kb的倍数。例如,重删粒度的尺寸是元数据管理粒度的最小值的2倍或3倍。其中,在元数据管理粒度的最小值是一个存储单元的尺寸的情况下,重删粒度的尺寸例如是存储单元的尺寸的整数倍。例如,参见附图2,重删粒度的尺寸例如是存储单元201的尺寸的整数倍。[0143](g)压缩粒度与元数据管理粒度之间的关系[0144]在一些实施例中,压缩粒度是根据元数据管理粒度确定的。在一些实施例中,压缩粒度是根据元数据管理粒度和压缩率共同确定的。在一些实施例中,压缩粒度是根据元数据管理粒度的最小值和压缩率确定的。例如,压缩粒度的尺寸是元数据管理粒度的最小值与压缩率的乘积。例如,如果压缩率是n:1,则压缩粒度的尺寸是元数据管理粒度的最小值的n倍,n为正整数。例如,在元数据管理粒度是[8kb,2m]且压缩率为4:1的情况下,压缩粒度的尺寸=8kb*4=32kb。[0145]其中,在元数据管理粒度的最小值是一个存储单元的尺寸的情况下,压缩粒度的尺寸例如是一个存储单元的尺寸与压缩率的乘积。例如,参见附图2,压缩粒度例如是存储单元201的尺寸与压缩率的乘积。例如,在压缩率是4:1的情况下,压缩粒度是存储单元201的尺寸的4倍,压缩粒度在附图2中对应于四个格子。由于压缩粒度的尺寸不再是固定的值,而是根据压缩率动态选择的,从而保证数据读取性能不下降的情况下压缩率较优。[0146]以上介绍的各种粒度以及粒度关系方面的特征例如应用在存储设备写数据的流程中。写数据的流程涉及前重删流程以及后重删流程。以下通过方法300,对存储设备如何利用上文描述的各种粒度进行前重删举例说明,通过方法400,对存储设备如何利用上文描述的各种粒度进行后重删举例说明。[0147]以下介绍的方法300和方法400由存储设备执行。[0148]在一些实施例中,方法300或方法400应用在分布式存储系统中,执行方法300或方法400的存储设备为分布式存储系统中的一个或多个存储节点。例如,执行方法300或方法400的存储设备为附图1所示系统100中的存储节点101,方法300或方法400处理的数据是系统100中主机102的数据。[0149]在另一些实施例中,方法300或方法400应用在集中式存储设备中,执行方法300或方法400的存储设备为存储阵列。[0150]在一些实施例中,方法300或方法400由cpu执行。在另一些实施例中,方法300或方法400由cpu和重删压缩的专用处理器协作执行,该重删压缩的专用处理器例如是硬件加速卡。例如,cpu为附图1所示的处理器1013,专用处理器为附图1所示的处理器1014。具体地,重删压缩的流程涉及数据分块、指纹计算、指纹查找、数据压缩、数据保存等任务。例如,由专用处理器执行指纹计算的任务以及数据压缩的任务,由cpu执行重删压缩流程涉及的其他任务,从而将指纹计算的任务以及数据压缩的任务从cpu卸载至专用处理器,减少重删压缩对cpu计算资源的占用,加速重删压缩流程的执行。[0151]需要说明的一点是,方法400与方法300同理的内容还请参见方法300,在方法400中不做赘述。[0152]参见附图3,附图3是本技术实施例提供的一种数据处理方法300的流程图。[0153]示例性地,方法300包括s310至s360。[0154]s310、存储设备获取多个数据块。[0155]在一些实施例中,s310具体包括以下步骤s311至步骤s313。[0156]s311、存储设备从主机接收写请求。[0157]其中,写请求用于请求存储设备存储数据,写请求包括待存储的数据以及数据的逻辑地址。[0158]s312、存储设备从写请求获取数据。[0159]s313、存储设备按照第一粒度,对数据进行划分,得到多个数据块,每个数据块的尺寸等于第一粒度的尺寸。[0160]第一粒度为上文介绍的重删粒度,即存储设备进行重复数据删除处理时使用的粒度。在一些实施例中,存储设备根据元数据管理粒度,确定第一粒度。举例来说,存储设备确定元数据管理粒度的最小值,将元数据管理粒度的最小值的整数倍作为第一粒度。可选地,将元数据管理粒度的最小值作为第一粒度。例如,在元数据管理粒度是[4kb,1m]的情况下,存储设备确定元数据管理粒度的最小值是4kb,则确定第一粒度的尺寸是4kb,将数据划分为多个4kb的数据块。[0161]s320、存储设备确定多个数据块中每个数据块的指纹。[0162]在一些实施例中,存储设备对每个数据块进行指纹计算,得到每个数据块的指纹。在一些实施例中,数据块的指纹是数据块的哈希值,存储设备对每个数据块进行哈希计算,得到每个数据块的哈希值。[0163]s330、存储设备根据每个数据块的指纹,在多个数据块中确定重复块以及非重复块。[0164]重复块的指纹与存储设备已存储的数据块的指纹相同。重复块包含的数据与存储设备已存储的数据块包含的数据完全相同;或者,重复块包含的数据与存储设备已存储的数据块包含的数据部分相同部分不同。如果采用定长重删的方式,那么重复块包含的数据与存储设备已存储的数据块包含的数据完全相同,如果采用相似重删的方式,那么只要求重复块包含的数据与存储设备已存储的数据块包含的数据部分相同。非重复块是指多个数据块中重复块之外的其他数据块。非重复块也称重删不成功的数据块。[0165]在一些实施例中,存储设备通过执行查询指纹表的步骤,从而判定数据块是重复块还是非重复块,在采用这种实现方式时,步骤s330也称指纹查询。其中,指纹表用于保存存储设备已存储的数据块的指纹。具体地,以多个数据块中的第一数据块为例,步骤s330包括:存储设备查询指纹表,对第一数据块的指纹与指纹表中的指纹进行比较;如果第一数据块的指纹与指纹表中一个指纹相同(即第一数据块命中指纹表),则存储设备确定第一数据块是重复块;如果第一数据块的指纹与指纹表中每个指纹均不同(即第一数据块未命中指纹表),则存储设备确定第一数据块是非重复块。[0166]在一些实施例中,s330在存储设备本地执行。在另一些实施例中,s330由存储设备和专用服务器协作执行。该专用服务器是一个独立的设备,与存储设备耦合或通过网络连接,该服务器中保存有指纹表,可以专门负责指纹查询工作。具体来说,存储设备将每个数据块的指纹按照预设规则发送至服务器,由该服务器根据每个数据块的指纹确定查询指纹表,从而将指纹查询的任务分担至服务器,避免指纹查询的运算量对存储设备带来性能瓶颈。[0167]执行s330的时机包括多种情况。在一些实施例中,步骤s330是在步骤s320完成后实时执行的。在另一些实施例中,存储设备在执行s320后会判断当前是否满足重删触发条件,若满足重删触发条件,再执行步骤s330。例如,在重删触发条件是负载低于阈值的情况下,存储设备执行步骤s320后,会判断负载是否低于阈值;若负载高于阈值,缓存得到的指纹并进行等待,若负载低于阈值,执行s330。[0168]存储设备对重复块执行的操作与对非重复块执行的操作有所区别。具体地,存储设备会对重复块进行重删操作,对非重复块进行压缩操作。下面通过s340对存储设备如何进行重删操作举例说明,通过s350和s360对存储设备如何进行压缩操作举例说明。[0169]值得说明的一点是,本实施例并不限定重删操作和压缩操作都要执行。在另一些实施例中,重删操作和压缩操作择一执行。具体地,前重删包括前重删成功的情况和前重删失败的情况,前重删失败的情况是指存储设备没有进行重删而进行压缩的情况。在前重删成功的情况下,如果存储设备确定待存储的数据块全部是重复块,存储设备执行s340,而不执行s350和s360;在前重删成功的情况下,如果存储设备确定待存储的数据块中一部分是重复块而另一部分是非重复块,存储设备执行s340,且执行s350和s360;在前重删失败的情况下,存储设备执行s350和s360,而不执行s340。[0170]例如,参见附图4,附图4中的(a)是对前重删成功的情况的举例说明。附图4中的(b)是对前重删失败(未重删有压缩)的情况的举例说明,在本文后续的描述中,将通过引用附图4所示的场景涉及的流程举例说明。[0171]附图4中的(a)所示的场景具体为:主机发起对数据块1、数据块2至数据块8这8个数据块的写请求;存储设备接收到写请求后,对8个数据块分别进行指纹计算,得到8个指纹。其中,8个指纹分别是数据块1的指纹fp1、数据块2的指纹fp2至数据块8的指纹fp8;存储设备分别根据8个指纹查询指纹表,发现指纹fp4与指纹fp7命中了指纹表,即,存储设备在指纹表中找到与数据块4的指纹fp4相同的指纹,并在指纹表中找到与数据块7的指纹fp7相同的指纹。因此,存储设备确定数据块4和数据块7均为重复块;存储设备不保存数据块4和数据块7,在存储单元204中记录数据块4的指纹fp4对应的指纹索引fpi4,在存储单元207中记录数据块7的指纹fp7对应的指纹索引fpi7。存储设备确定数据块4和数据块7之外的其他数据块是非重复块。存储设备对数据块1、数据块2和数据块3进行压缩,得到压缩块1,使用一条元数据表示压缩块1,得到压缩块1的元数据1。存储设备在存储单元201、存储单元202以及存储单元203这三个物理连续且逻辑连续的存储单元中,保存压缩块1的元数据1。存储设备对数据块5、数据块6和数据块8进行压缩,得到压缩块2,使用一条元数据2表示压缩块2,得到压缩块2的元数据2;存储设备在存储单元205、存储单元206以及存储单元208这三个物理连续而逻辑不连续的存储单元中保存压缩块2的元数据2。其中,元数据2包括两个部分,一个部分是元数据21,另一个部分是元数据22。存储单元205和存储单元206保存了元数据21,存储单元208保存了元数据22。此外,存储设备会将压缩块1和压缩块2写入至硬盘中。[0172]附图4中的(b)所示的场景具体为:主机发起对数据块1、数据块2至数据块8这8个数据块的写请求;存储设备接收到写请求后,存储设备对8个数据块进行指纹计算,得到8个指纹,这8个指纹分别是数据块1的指纹fp1、数据块2的指纹fp2至数据块8的指纹fp8;存储设备由于负载高于阈值或者其他原因导致重删失败。在这种情况下,存储设备对数据块1、数据块2和数据块3进行压缩,得到压缩块1,使用一条元数据表示压缩块1,得到压缩块1的元数据1。存储设备在存储单元201、存储单元202以及存储单元203这三个物理连续且逻辑连续的存储单元中,保存压缩块1的元数据1。存储设备对数据块4、数据块5和数据块6进行压缩,得到压缩块2,使用一条元数据表示压缩块2,得到压缩块2的元数据2。存储设备在存储单元204、存储单元205以及存储单元206这三个物理连续且逻辑连续的存储单元中,保存压缩块2的元数据2。存储设备对数据块7和数据块8进行压缩,得到压缩块3,使用一条元数据表示压缩块3,得到压缩块3的元数据3。存储设备在存储单元207、存储单元208这两个物理连续且逻辑连续的存储单元中,保存压缩块3的元数据3。此外,存储设备会将压缩块1、压缩块2和压缩块3写入至硬盘中。[0173]s340、存储设备为重复块记录元数据。[0174]存储设备通过记录重复块的元数据而不保存重复块,从而避免重复块占用硬盘的存储空间,因此节省了存储设备的存储资源。[0175]在一些实施例中,存储设备还记录非重复块的元数据,并将非重复块的指纹保存至指纹表,以便后续对新的块进行重复数据删除处理时,在指纹表中能够查到之前保存的非重复块的指纹。[0176]在一些实施例中,存储设备保存重复块的指纹。在一些实施例中,存储设备保存重复块的指纹索引。可选地,存储设备为重复块记录的元数据为重复块的指纹索引(fpi)。具体地,存储设备将重复块的指纹索引作为重复块的元数据,向元数据的存储单元写入重复块的指纹索引,从而将指纹索引保存在元数据的存储单元中。例如,参见附图4,存储设备确定数据块4和数据块7是重复块之后,将数据块4的指纹索引fpi4写入至存储单元204,将数据块7的指纹索引fpi7写入至存储单元207。[0177]参见附图4,重复块的元数据占用的存储空间大小等于第一粒度的尺寸。例如,重复块的元数据占用的存储空间大小等于元数据管理粒度的最小值。例如,参见附图4,元数据管理粒度的最小值对应于附图4中的一个格子,元数据管理粒度的最小值例如是一个存储单元的大小。比如说,数据块4的指纹索引fpi4占用存储单元204,数据块4的指纹索引fpi4占用的存储空间大小等于存储单元204的尺寸。[0178]在s340中存储设备如何记录元数据包括多种实现方式。在一些实施例中,存储设备根据元数据管理粒度,选取第一存储单元,在第一存储单元中存储重复块的元数据。其中,第一存储单元的粒度为元数据管理粒度的最小值。例如,元数据管理粒度是[4kb,1m],则存储设备选取尺寸为4kb的存储单元,在4kb的存储单元中存储重复块的元数据。[0179]s350、存储设备对多个非重复块进行压缩,得到压缩块。[0180]压缩块是指压缩后的非重复块。在一些实施例中,s350具体包括以下步骤a至步骤c。[0181]步骤a、存储设备获得数据的压缩率。[0182]如何获得压缩率包括多种实现方式。在一些实施例中,采用机器学习的方式根据样本进行模型训练,得到预测模型,当获取数据后,将数据输入预测模型,通过预测模型对数据进行压缩率预测,输出压缩率。在另一些实施例中,由用户根据经验预先设定压缩率。在另一些实施例中,考虑到连续的两个数据块的压缩率相同的概率很大,将上一个数据的压缩率作为当前待压缩的数据的压缩率。[0183]步骤b、存储设备根据预测出的压缩率,将多个非重复块划分为至少一个数据块组,每个数据块组包含的非重复块数量等于压缩率。[0184]例如,如果预测压缩率是3:1,则存储设备将3个非重复块划分为一个数据块组,使得一个数据块组包含3个非重复块,以便将3个非重复块放在一起压缩;如果预测压缩率是4:1,则存储设备将4个非重复块划分为一个数据块组,使得一个数据块组包含4个非重复块,以便将4个非重复块放在一起压缩。例如,参见附图4,在压缩率为3:1的情况下,附图4中的三个格子可以对应于一个压缩块,比如,参见附图4中的(a),存储设备将数据块1、数据块2和数据块3划分至一组,将数据块5、数据块6和数据块8划分至另一组。又如,参见附图4中的(b),存储设备将数据块1、数据块2和数据块3划分至一组,将数据块4、数据块5和数据块6划分至另一组,将数据块7和数据块8划分至一组。[0185]在一些实施例中,存储设备在分组时不仅考虑压缩率,还考虑不同非重复块是否连续。例如,存储设备根据压缩率以及每个非重复块的地址,将连续的多个非重复块划分至同一个数据块组中。其中,连续包括而不限于物理连续或者逻辑连续中的至少一项。物理是否连续例如根据物理地址是否连续确定,逻辑是否连续例如根据逻辑地址是否连续确定。[0186]步骤c、存储设备将每个数据块组压缩为一个压缩块。[0187]例如,参见附图4中的(a),存储设备将数据块1、数据块2和数据块3压缩为压缩块1,将数据块5、数据块6和数据块8压缩为压缩块2。又如,参见附图4中的(b),存储设备将数据块1、数据块2和数据块3压缩为压缩块1,将数据块4、数据块5和数据块6压缩为压缩块2,将数据块7和数据块8压缩为压缩块3。[0188]通过执行上述压缩流程,由于一个压缩块是根据一个数据块组中的每个非重复块压缩得到的,因此第二粒度等于一个数据块组包含的非重复块数量与非重复块的粒度的乘积。由于一个数据块组包含的非重复块数量等于压缩率,非重复块的粒度等于元数据管理粒度的最小值,因此第二粒度等于压缩率与元数据管理粒度的最小值的乘积。比如,参见附图4,压缩率等于3:1,元数据管理粒度对应于附图4中的一个格子,第二粒度对应于附图4中的三个格子。比如,第二粒度等于存储单元201、存储单元202和存储单元203这三个存储单元的尺寸之和。[0189]由此可见,本实施例提供的压缩粒度(即第二粒度)不再是与重删粒度(即第一粒度)相同的固定值,而是根据元数据管理粒度的最小值和压缩率来确定的,因此支持了压缩粒度动态选择的功能。通过压缩粒度的动态选择,有助于保证在数据读取性能不下降的情况下压缩率较优,获得最大压缩率和读放大的平衡。下面结合一个具体的例子,对达到这种技术效果的技术原理进行介绍。[0190]例如,元数据管理粒度的最小值是8kb,存储设备获得了4个8kb大小的数据块,这4个数据块分别是数据块a、数据块b、数据块c和数据块d。存储设备预测4个数据块的压缩率均是4:1,则存储设备确定压缩粒度是32kb,将数据块a、数据块b、数据块c和数据块d这32kb的数据一起压缩,得到一个8kb的压缩块e,将压缩块e存储至硬盘中。之后,存储设备接收到了读请求,读请求指示存储设备读取数据块a。存储设备响应于读请求,从硬盘读取8kb的压缩块e;存储设备对压缩块e进行解压缩,得到数据块a、数据块b、数据块c和数据块d,将其中的数据块a返回给读请求的发起方。从这个例子可见,读请求对应的数据粒度是8kb,存储设备从硬盘中实际读取的数据粒度(即压缩块e的粒度)也是8kb,可见从硬盘中实际读取的数据粒度与读请求对应的数据粒度是相同的,没有出现读放大的情况,也就避免了读放大会带来的读取性能下降以及带宽资源消耗。并且,由于压缩粒度为较优的32kb,有助于压缩率达到较优。[0191]s360、存储设备将压缩块存储至硬盘中,并为压缩块记录元数据。[0192]通过执行s360,存储设备将经过重复数据删除处理和压缩处理的数据(压缩块)存储在存储设备的硬盘中。[0193]压缩块的元数据例如表示数据的逻辑地址到压缩块的物理地址之间的映射关系。[0194]在一些实施例中,存储设备在尺寸属于[元数据管理粒度的最小值,压缩粒度]的存储单元内,存储压缩块的元数据。采用这种方式时,压缩块的元数据的粒度的最小值是元数据管理粒度的最小值,压缩块的元数据的粒度的最大值是压缩粒度(第二粒度)。在一些实施例中,压缩块的元数据的粒度为元数据管理粒度的最小值与压缩率的乘积。例如,压缩率为n:1,元数据管理粒度的最小值是一个存储单元的尺寸,则存储设备选取n个存储单元,则n个存储单元中存储压缩块的元数据。例如,参见附图4,压缩率为3:1,元数据管理粒度的最小值是一个存储单元的尺寸,存储设备会选取3个存储单元来记录一条压缩块的元数据,压缩块的元数据的粒度为存储单元的尺寸的三倍。比如说,存储设备选取存储单元201、存储单元202以及存储单元203记录压缩块1的元数据1,压缩块1的元数据1的粒度是存储单元201、存储单元202以及存储单元203的尺寸之和。[0195]存储设备记录元数据的方式具体包括下述方式一至方式二中的至少一项。[0196]方式a、存储设备为地址连续的多个压缩块记录一条元数据。[0197]在一些实施例中,在多个压缩块的地址连续的情况下,存储设备使用一条元数据来表示多个压缩块。其中,多个压缩块地址连续例如是多个压缩块物理地址连续且多个压缩块逻辑地址连续。在一些实施例中,存储设备记录的一条元数据包括两个部分,一个部分是地址连续的多个压缩块中第一个压缩块的地址,另一个部分是地址连续的多个压缩块中每个压缩块的长度。例如,参见附图7,附图7中的一个小格标识一个最小粒度的数据块或元数据,如一条4kb的数据块或者一条4kb的的元数据。附图7是对如何使用一条元数据表示压缩块1、压缩块2以及压缩块3的举例说明。附图7所示,存储设备压缩处理得到压缩块1、压缩块2以及压缩块3这三个地址连续的压缩块后,记录一条元数据,记录的一条元数据包含压缩块1(第一个压缩块)的元数据1以及跳转表(jumptable),元数据1指明了压缩块1的地址,跳转表包含压缩块1的长度、压缩块2的长度以及压缩块3的长度。例如,压缩块1的长度是9kb,压缩块2的长度是7kb,压缩块3的长度是4kb,则跳转表包含9kb、7kb以及4kb。[0198]通过采用这样的方式记录元数据,在能够通过元数据读取数据的基础上,达到压缩的元数据空间较优的效果,以下对实现这一技术效果的技术原理举例说明。[0199]一方面,由于元数据中记录了每个压缩块的长度,能够指明每个压缩块相对于第一个压缩块的偏移量。例如,第二个压缩块相对于第一个压缩块的偏移量是第一个压缩块的长度,第三个压缩块相对于第一个压缩块的偏移量是第一个压缩块与第二个压缩块的长度之和。因此,当需要读取第二个压缩块时,能够根据第一个压缩块的地址以及第二个压缩块相对于第一个压缩块的偏移量,在硬盘中寻址到第二个压缩块,当需要读取第三个压缩块时,能够根据第一个压缩块的地址以及第三个压缩块相对于第一个压缩块的偏移量,在硬盘中寻址到第三个压缩块。比如说,在附图7的场景下,当需要读取压缩块2时,存储设备从压缩块1的元数据1的地址向后偏移9kb,即可从硬盘中找到压缩块2。当需要读取压缩块3时,存储设备从压缩块1的元数据1的地址向后偏移9kb 7kb=16kb,即可从硬盘中找到压缩块3。由此可见,通过这种元数据的记录方式,能够在硬盘中分别定位到每个压缩块,保证每个压缩块都能被读取。[0200]另一方面,由于为地址连续的多个压缩块记录一条元数据,减少了记录的元数据的数量,从而节省元数据在存储设备中占用的存储资源。比如说,在附图7的场景下,由于存储设备记录了压缩块1的元数据1,无需记录压缩块2的元数据2和压缩块3的元数据3,所以节省了压缩块2的元数据2和压缩块3的元数据3占用的存储空间。[0201]方式b、存储设备为地址不连续的多个压缩块记录多条元数据。[0202]在一些实施例中,在多个压缩块的地址不连续的情况下,存储设备使用多条元数据分别表示多个压缩块。可选地,如方式a同理,为两个或两个以上地址连续的压缩块记录一条元数据。其中,地址不连续的多个压缩块在逻辑上的间隔例如对应于重复块的指纹索引。[0203]例如,参见附图4中的(a),压缩块2是根据数据块5、数据块6和数据块8这3个非重复块压缩得到的。其中,数据块5和数据块6是两个逻辑上相邻的块。数据块6和数据块8是逻辑上相隔的。具体地,数据块5的逻辑地址与数据块6的逻辑地址连续,数据块6的逻辑地址与数据块8的逻辑地址不连续。例如,数据块5的逻辑地址是205,长度是8kb,数据块6的逻辑地址是206,长度是8kb。数据块8的逻辑地址是208,长度是8kb。而数据块6和数据块8之间在逻辑上本来存在数据块7,而数据块7被发现是重复块而被重删掉,使得存储单元207存储的是数据块7的指纹索引fpi4。存储设备将数据块5、数据块6和数据块8压缩为压缩块2,为压缩块2记录的元数据2包括两条元数据,分别是元数据21和元数据22。元数据21表示起始逻辑地址是205,长度是8kb*2=12kb。元数据22表示起始逻辑地址是208,长度是8kb。[0204]在这个例子中,同一个压缩块(压缩块2)对应了两条元数据(元数据21和元数据22)。在压缩块2解压缩后,元数据21和元数据22对应于解压后数据块的不同部分。具体地,压缩块2解压缩后会得到数据块5、数据块6和数据块8,元数据21对应于数据块5和数据块6,元数据22对应于数据块8。[0205]本实施例提供的前重删方法中,存储设备由于使用不同的粒度进行重删和压缩,摆脱了重删粒度和压缩粒度必须相同的限制,一定程度上避免粒度过大导致重删率下降的情况以及粒度过小导致压缩率下降的情况,从而提升重删压缩整体的缩减率。进一步地,由于重删粒度和压缩粒度都是根据元数据管理粒度确定的,使得重删和压缩分别按照较优的粒度操作,有助于重删率和压缩率均达到较优。[0206]参见附图5,附图5是本技术实施例提供的一种数据处理方法400的流程图。[0207]示例性地,方法400包括s410至s450。[0208]s410、存储设备将多个数据块存储至硬盘中。[0209]在一些实施例中,存储设备还计算每个数据块的指纹,将数据块的指纹以及数据块的物理位置保存在机会表中。其中,机会表例如是键值对的形式,机会表的键是数据块的指纹。机会表的值是数据块的物理位置。机会表用于找到重复块的指纹。[0210]在一些实施例中,存储设备会先对多个数据块进行压缩,得到压缩块,再将压缩块存储至硬盘中。压缩流程如上述方法300描述的压缩流程类似。具体地,存储设备在压缩过程中,会预测数据的压缩率;存储设备根据预测出的压缩率以及元数据管理粒度,确定第二粒度,根据该第二粒度进行压缩。例如,存储设备确定元数据管理粒度的最小值与压缩率的乘积,作为第二粒度。[0211]s420、存储设备在多个数据块中确定重复块以及非重复块。[0212]例如,存储设备从机会表中读取每个数据块的指纹,对数据块的指纹与指纹表中已记录的指纹进行比较。如果数据块的指纹和指纹表中已记录的一个指纹相同,存储设备确定数据块为重复块。如果数据块的指纹和指纹表中已记录的每个指纹均不同,存储设备确定数据块为非重复块,存储设备将数据块的指纹记录至指纹表中。[0213]s430、存储设备为重复块更新已记录的元数据。[0214]存储设备找到可重删的重复块后,会更新重复块的元数据。在一些实施例中,存储设备将重复块的元数据更新为重复块的指纹。例如,存储设备确定第二存储单元,第二存储单元用于保存重复块的元数据,第二存储单元的粒度为元数据管理粒度的最小值。存储设备向第二存储单元写入重复块的指纹,使得第二存储单元保存的元数据从之前记录的元数据覆盖为重复块的指纹。[0215]例如,参见附图6,存储设备在硬盘中存储数据块1、数据块2至数据块8后,确定数据块4和数据块7均是重复块,则更新数据块4的元数据以及数据块7的元数据。具体地,存储设备使用数据块4的指纹索引fpi4作为数据块4的元数据,向存储单元204覆盖写入数据块4的指纹索引fpi4,使得存储单元204保存的数据从数据块4的元数据刷新为指纹索引fpi4;此外,存储设备使用数据块7的指纹索引fpi7作为数据块7的元数据,向存储单元207覆盖写入数据块7的指纹索引fpi7,使得存储单元207保存的数据从数据块4的元数据刷新为指纹索引fpi7。其中,附图6中的(a)是对后重删前的元数据的举例说明,附图6中的(b)是对待更新的元数据的举例说明,附图6中的(c)是对合并后的元数据的举例说明,附图6中的(d)是对碎片整理后的元数据的举例说明。[0216]s440、存储设备对重复块进行垃圾回收。[0217]在为重复块更新元数据后,重复块可称为垃圾数据,存储设备通过删除重复块,从而释放重复块占用的存储空间。例如,参见附图6,存储设备将存储单元204保存的元数据更新为数据块4的指纹索引fpi4,将存储单元207保存的元数据更新为数据块7的指纹索引fpi7后,删除数据块4和数据块7。在一些实施例中,存储设备将重复块以及非重复块均从硬盘中读取出来,对重复块以及非重复块原本在硬盘中占用的存储单元进行擦除,再将非重复块重新写入至硬盘中,从而进行垃圾回收。[0218]其中,重复块包括压缩块以及普通的数据块。因此,在垃圾回收过程中,可能是压缩块被覆盖,也可能是普通的数据块被覆盖。对于普通的数据块,存储设备只需要将有效的数据搬出即可。对于压缩块而言,存储设备需要先将不定长粒度的压缩块进行解压,然后对解压后的数据中有效部分的数据重新压缩。由于被压缩块的粒度变小了,压缩率此时会下降,存储设备会通过执行以下s450,执行碎片整理流程,从而实现进行最大粒度压缩。[0219]s450、存储设备对非重复块进行碎片整理。[0220]通过执行s450,存储设备将经过重复数据删除处理和压缩处理的数据(碎片整理后的非重复块)存储在存储设备的硬盘中。[0221]具体地,存储设备在碎片整理过程中,如果待整理的数据是重复块,则存储设备保留重复块的指纹索引。其中,待整理的数据例如包括尚未按照第二粒度进行压缩处理的数据。如果待整理的数据是压缩块,则存储设备判断压缩块对应的压缩粒度(即第二粒度)是否小于较优的压缩粒度(如元数据管理粒度的最小值与压缩率的乘积),如果压缩块对应的压缩粒度(即第二粒度)小于较优的压缩粒度,则按照较优的压缩粒度对多个压缩块重新进行压缩,从而提升压缩率。例如,存储设备先对压缩块进行解压,得到非重复块,之后,存储设备按照与步骤sf50同理的方式,根据元数据管理粒度的最小值和压缩率确定压缩粒度。存储设备多个非重复块划分为至少一个数据块组,将每个数据块组压缩为一个压缩块,从而重新压缩。[0222]例如,压缩率是3:1,元数据管理粒度的最小值等于一个存储单元的尺寸,较优的压缩粒度等于三个存储单元的尺寸。参见附图6中的(c),存储设备在碎片整理过程中,确定压缩块2对应的压缩粒度是2个存储单元的尺寸,确定压缩块3对应的压缩粒度是1个存储单元的尺寸,压缩块2和压缩块3对应的压缩粒度均小于较优的压缩粒度,则存储设备对压缩块2解压,得到数据块5和数据块6,并对压缩块3解压,得到数据块8。存储设备对数据块5、数据块6和数据块8重新进行压缩,得到新的压缩块2,向硬盘写入新的压缩块2。在这个例子中,新的压缩块2对应的压缩粒度为三个存储单元的尺寸,比压缩块2对应的压缩粒度和压缩块3对应的压缩粒度更优,从而有助于提升压缩率。[0223]本实施例提供的后重删方法中,存储设备由于使用不同的粒度进行重删和压缩,摆脱了第一粒度和第二粒度必须相同的限制,一定程度上避免粒度过大导致重删率下降的情况以及粒度过小导致压缩率下降的情况,从而提升重删压缩整体的缩减率。进一步地,由于第一粒度和第二粒度都是根据元数据管理粒度确定的,使得重删和压缩分别按照较优的粒度操作,有助于重删率和压缩率均达到较优。[0224]以上介绍了本技术实施例的方法300和方法400,以下从逻辑功能的角度介绍本技术实施例的存储设备。[0225]请参考附图8,附图8示出了上述实施例中所涉及的存储设备的一种可能的结构示意图。附图8所示的存储设备600例如实现方法300或方法400中存储设备的功能。存储设备600包括获取模块601、重删模块602、压缩模块603和存储模块604。[0226]获取模块601,用于获取数据;重删模块602,用于基于第一粒度对数据进行重复数据删除处理;压缩模块603,用于基于第二粒度对数据进行压缩处理,第二粒度的尺寸大于第一粒度的尺寸;存储模块604,用于将经过重复数据删除处理和压缩处理的数据存储在存储设备的硬盘中。[0227]在一些实施例中,存储设备还包括:记录模块,用于记录压缩块的元数据。[0228]本实施例对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可选地有另外的划分方式。[0229]在一些实施例中,存储设备600中至少一个模块集成在一个处理器、同一个芯片或同一个单板中。例如,获取模块601、重删模块602、压缩模块603均集成在同一个处理器中,通过该处理器实现获取模块601、重删模块602、压缩模块603的功能。[0230]在另一些实施例中,存储设备600不同模块通过不同的处理器或者其他不同的硬件实现。例如,获取模块601通过附图1所示的网卡1011实现,重删模块602和压缩模块603的功能分别通过不同的专用处理器实现,存储模块604的功能通过中央处理器实现。[0231]本领域普通技术人员可以意识到,结合本文中所公开的实施例中描述的各方法步骤和模块,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各实施例的步骤及组成。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。[0232]所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和模块的具体工作过程,可以参见前述方法实施例中的对应过程,在此不再赘述。[0233]在本技术所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,该模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或模块的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。[0234]该作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本技术实施例方案的目的。[0235]另外,在本技术各个实施例中的各模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以是两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件模块的形式实现。[0236]该集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例中方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。[0237]本技术中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,应理解,“第一”、“第二”之间不具有逻辑或时序上的依赖关系,也不对数量和执行顺序进行限定。还应理解,尽管以下描述使用术语第一、第二等来描述各种元素,但这些元素不应受术语的限制。这些术语只是用于将一元素与另一元素区别分开。例如,在不脱离各种示例的范围的情况下,第一粒度可以被称为第二粒度,并且类似地,第二粒度可以被称为第一粒度。第一粒度和第二粒度都可以是粒度,并且在某些情况下,可以是单独且不同的粒度。[0238]本技术中术语“至少一个”的含义是指一个或多个,本技术中术语“多个”的含义是指两个或两个以上,例如,多个压缩块是指两个或两个以上的压缩块。本文中术语“系统”和“网络”经常可互换使用。[0239]还应理解,术语“如果”可被解释为意指“当...时”(“when”或“upon”)或“响应于确定”或“响应于检测到”。类似地,根据上下文,短语“如果确定...”或“如果检测到[所陈述的条件或事件]”可被解释为意指“在确定...时”或“响应于确定...”或“在检测到[所陈述的条件或事件]时”或“响应于检测到[所陈述的条件或事件]”。[0240]以上描述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本技术揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以权利要求的保护范围为准。[0241]在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机程序指令。在计算机上加载和执行该计算机程序指令时,全部或部分地产生按照本技术实施例中的流程或功能。该计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。[0242]该计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,该计算机程序指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质(例如软盘、硬盘、磁带)、光介质(例如,数字视频光盘(digitalvideodisc,dvd)、或者半导体介质(例如固态硬盘)等。[0243]本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。[0244]以上,以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献