一种基于全闪存阵列的空间回收方法及系统与流程

文档序号:20682870发布日期:2020-05-08 18:34阅读:144来源:国知局
一种基于全闪存阵列的空间回收方法及系统与流程

本申请涉及数据存储技术领域,尤其涉及一种基于全闪存阵列的空间回收方法及系统。



背景技术:

一般地,为了节省数据的存储空间,文件在存储时,会对文件中的数据进行去重压缩,以减小数据的占用空间。

所谓去重,即通过计算数据块的安全哈希摘要(比如sha1指纹)来唯一识别数据块,避免了数据的逐个字符的匹配,而且存储系统只需要简单地维护安全哈希摘要的索引表,就可以实现快速方便地识别重复数据,且重复的数据内容只需要记录相应的数据指针信息即可达到节省存储空间的目的。

而数据压缩也是一种冗余数据消除技术,主要通过编码的方式消除冗余数据信息,即在保证原有数据信息不丢失的前提下,将原始内容进行转换,对于重复的字节序列用更少字节数的编码表示,从而达到消除部分冗余数据并最终节省存储空间的目的。

而对于现有的压缩去重技术,当文件数据发生更新(删除或更改)时,即在存储原有压缩数据的地址空间中,删除掉原压缩数据,或对原压缩数据进行更新,如:假设原文件中一个非重复数据块压缩后的存储空间为50k,而当文件数据删除后,则会出现50k的空间碎片,而当文件数据更改后,若更新后非重复数据块压缩后的数据长度为5k,则会出现45k的空间碎片,当在后期对空间碎片进行回收时,需要将未更新的非重复数据块迁移至另一存储地址,若与该未更新的非重复数据块相邻的数据块反复更新时,则需将该未更新的非重复数据块反复迁移,从而增加了对该存储系统的io次数,降低了该存储系统的io性能。



技术实现要素:

本申请实施例提供了一种基于全闪存阵列的空间回收方法及系统,用于提高空间回收的效率。

本申请实施例第一方面提供了一种基于全闪存阵列的空间回收方法,其中,全闪存阵列包括性能层和容量层,该方法包括:

获取所述性能层中的被压缩数据;

将所述被压缩数据切分为预设长度的第一数据块,计算所述第一数据块的哈希值;

将所述第一数据块的哈希值与所述容量层中的去重指纹库进行匹配,以确定是否存在匹配指纹;

若不存在所述匹配指纹,则确定所述第一数据块为非重复数据块,对所述第一数据块进行压缩,并将压缩后的第一数据块以预设长度为存储单位,以日志追加写的方式回写至所述容量层,而将所述第一数据块的指纹更新至所述去重指纹库中,所述日志追加写作为一种异地更新方式,用以提高所述容量层的io性能;

构建数据位图表,所述数据位图表用于记录对应每个存储单位或多个存储单位的空间占用状态,所述空间占用状态包括第一状态和第二状态,所述第一状态为无效占用,所述第二状态为有效占用;

扫描所述数据位图表,获取处于所述第二状态的存储单位中的未更新数据块,并将所述未更新数据块迁移至新的存储单位;

将所述未更新数据块划分为频繁迁移和非频繁迁移类型,并将非频繁迁移的未更新数据块进行固定化存储,避免对所述非频繁迁移的未更新数据块的频繁迁移。

优选的,所述将所述未更新数据块划分为频繁迁移和非频繁迁移类型,包括:

按照所述未更新数据块发生迁移的前后两次时间间隔的平均值,将所述未更新数据块划分为频繁迁移和非频繁迁移类型;

或,

按照所述未更新数据块在预设时间段内发生迁移的频率,将所述未更新数据块划分为频繁迁移和非频繁迁移类型;

或,

按照所述未更新数据块对应指纹的引用次数,将所述未更新数据块划分为频繁迁移和非频繁迁移类型。

优选的,在将所述未更新数据块迁移至新的存储单位之后,所述方法还包括:

将所述未更新数据块的元数据信息更新至所述文件元数据区域,所述元数据信息包括:所述未更新数据块的物理存储地址及所述未更新数据块的长度。

优选的,所述将压缩后的第一数据块以预设长度为存储单位,以日志追加写的方式回写至所述容量层,包括:

将压缩后的第一数据块以预设长度为存储单位,以日志追加写的方式回写至日志存储单元,并在所述日志存储单元写满后,将所述日志存储单元回写至所述容量层,所述日志存储单元的存储空间为所述容量层最小写入单元的整数倍。

优选的,在扫描所述数据位图表之后,获取处于所述第二状态的存储单位中的未更新数据块之前,所述方法还包括:

获取每个日志存储单元中处于第一状态的存储单位的数量,并判断所述处于第一状态的存储单位所占用的空间是否大于预设的空间占用阈值;

若是,则删除所述日志存储单元中处于第一状态的存储单位中的更新数据块。

优选的,所述方法还包括:

若存在所述匹配指纹,则确定所述第一数据块为重复数据,并将所述第一数据块的元数据信息回写至所述容量层的元数据区域,所述元数据信息包括所述第一数据块在所述被压缩数据中的逻辑地址、所述匹配指纹及所述匹配指纹的物理地址之间的对应关系。

优选的,所述方法还包括:

对所述去重指纹库中指纹的引用次数执行计数管理;

所述对所述去重指纹库中指纹的引用次数执行计数管理,包括:

当所述去重指纹库中存在所述第一数据块的匹配指纹时,则将所述匹配指纹的引用次数执行增长式运算;

和,

当引用所述去重指纹库中所述匹配指纹的第一数据块发生更新时,则将所述匹配指纹的引用次数执行递减式运算。

优选的,在将压缩后的第一数据块以日志追加写的方式回写至所述容量层之后,该方法还包括:

将所述第一数据块的元数据信息更新至所述容量层的文件元数据区域或所述去重指纹库中,所述元数据信息包括:所述第一数据块压缩后的物理存储地址及所述第一数据块压缩后的长度,以用于后期根据所述元数据信息对所述第一数据块进行解压。

本申请实施例第二方面提供了一种基于全闪存阵列的空间回收系统,其中,该全闪存阵列包括性能层和容量层,该系统包括:

获取单元,用于获取所述性能层中的被压缩数据;

切分计算单元,用于将所述被压缩数据切分为预设长度的第一数据块,计算所述第一数据块的哈希值;

匹配单元,用于将所述第一数据块的哈希值与所述容量层中的去重指纹库进行匹配,以确定是否存在匹配指纹;

去重单元,用于在不存在所述匹配指纹时,则确定所述第一数据块为非重复数据块,对所述第一数据块进行压缩,并将压缩后的第一数据块以预设长度为存储单位,以日志追加写的方式回写至所述容量层,而所述第一数据块的指纹更新至所述去重指纹库中,所述日志追加写作为一种异地更新方式,用以提高所述容量层的io性能;

构建单元,用于构建数据位图表,所述数据位图表用于记录对应每个存储单位或多个存储单位的空间占用状态,所述空间占用状态包括第一状态和第二状态,所述第一状态为无效占用,所述第二状态为有效占用;

扫描单元,用于扫描所述数据位图表,获取处于所述第二状态的存储单位中的未更新数据块,并将所述未更新数据块迁移至新的存储单位;

类型划分单元,用于将所述未更新数据块划分为频繁迁移和非频繁迁移类型,并将非频繁迁移的未更新数据块进行固定化存储,避免对所述非频繁迁移的未更新数据块的频繁迁移。

优选的,所述类型划分单元,包括:

第一划分模块,用于按照所述未更新数据块发生迁移的前后两次时间间隔的平均值,将所述未更新数据块划分为频繁迁移和非频繁迁移类型;

或,

第二划分模块,用于按照所述未更新数据块在预设时间段内发生迁移的频率,将所述未更新数据块划分为频繁迁移和非频繁迁移类型;

或,

第三划分模块,用于按照所述未更新数据块对应指纹的引用次数,将所述未更新数据块划分为频繁迁移和非频繁迁移类型。

优选的,所述系统还包括:

更新单元,用于将所述未更新数据块的元数据信息更新至所述文件元数据区域,所述元数据信息包括:所述未更新数据块的物理存储地址及所述未更新数据块的长度。

优选的,所述压缩单元,包括:

压缩模块,用于将压缩后的第一数据块以预设长度为存储单位,以日志追加写的方式回写至日志存储单元,并在所述日志存储单元写满后,将所述日志存储单元回写至所述容量层,所述日志存储单元的存储空间为所述容量层最小写入单元的整数倍。

优选的,所述扫描单元,包括:

扫描判断模块,用于扫描所述数据位图表,获取每个日志存储单元中处于第一状态的存储单位的数量,并判断所述处于第一状态的存储单位所占用的空间是否大于预设的空间占用阈值;

获取模块,用于获取每个日志存储单元中处于所述第二状态的存储单位中的未更新数据块,

删除迁移模块,用于在处于第一状态的存储单位所占用的空间大于预设的空间占用阈值时,删除所述日志存储单元中处于第一状态的存储单位中的更新数据块,并将所述未更新数据块迁移至新的存储单位。

优选的,所述系统还包括:

去重单元,用于在存在所述匹配指纹时,确定所述第一数据块为重复数据,并将所述第一数据块的元数据信息回写至所述容量层的元数据区域,所述元数据信息包括所述第一数据块在所述被压缩数据中的逻辑地址、所述匹配指纹及所述匹配指纹的物理地址之间的对应关系。

优选的,所述系统还包括:

计数单元,用于对所述去重指纹库中指纹的引用次数执行计数管理;

所述计数单元,包括:

第一计数模块,用于当所述去重指纹库中存在所述第一数据块的匹配指纹时,则将所述匹配指纹的引用次数执行增长式运算;

和,

第二计数模块,用于当引用所述去重指纹库中所述匹配指纹的第一数据块发生更新时,则将所述匹配指纹的引用次数执行递减式运算。

优选的,所述系统还包括:

更新单元,用于将所述第一数据块的元数据信息更新至所述容量层的文件元数据区域或所述去重指纹库中,所述元数据信息包括:所述第一数据块压缩后的物理存储地址及所述第一数据块压缩后的长度,使得后期根据所述元数据信息对所述第一数据块进行解压。

本申请实施例还提供了一种基于全闪存阵列的空间回收系统,包括处理器,该处理器在执行存储于存储器上的计算机程序时,用于实现本申请实施例第一方面提供的基于全闪存阵列的空间回收方法。

本申请实施例还提供了一种可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时,用于实现本申请实施例第一方面提供的基于全闪存阵列的空间回收方法。

从以上技术方案可以看出,本申请实施例具有以下优点:

本申请实施例中,将非重复数据块压缩后,以预设长度的存储单位,以日志追加写的方式在容量层中进行存储,并构建数据位图表,用于对应记录每个存储单位的空间占用状态,使得当存储单位中的第一数据块发生更新时,则对应该存储单位的数据位图表由第二状态变更会第一状态,从而在后期空间回收时,即可通过扫描数据位图表,获知容量层中每个存储单位的空间占用状态,并在该存储单位的空间占用状态为第二状态时,将该存储单位中的未更新数据块迁移至新的存储单位,并在迁移的过程中,将未更新数据块划分为频繁迁移和非频繁迁移类型,并将非频繁迁移的未更新数据块进行固定化存储,避免对未更新数据块的频繁迁移。

附图说明

图1为本申请实施例中基于全闪存阵列的空间回收方法的一个实施例示意图;

图2为本申请实施例中全闪存阵列的物理架构示意图;

图3a为本申请实施例中对压缩后的第一数据块是以日志追加写的方式进行异地更新的示意图;

图3b为本申请实施例中数据位图表的示意图;

图4为本申请实施例中基于全闪存阵列的空间回收方法的另一个实施例示意图;

图5为本申请实施例中基于全闪存阵列的空间回收方法的另一个实施例示意图;

图6a为本申请实施例中数据去重前后逻辑地址及物理地址的示意图;

图6b为本申请实施例中容量层元数据区域中元数据信息的数据逻辑组织关系示意图;

图7为本申请实施例中基于全闪存阵列的空间回收系统的另一个实施例示意图;

图8为本申请实施例中基于全闪存阵列的空间回收系统的另一个实施例示意图。

具体实施方式

本申请实施例提供了一种基于全闪存阵列的空间回收方法及系统,用于提高空间回收效率。

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

本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

一般地,为了节省数据的存储空间,文件在存储时,会对文件中的数据进行去重压缩,以减小数据的占用空间。

所谓去重,即通过计算数据块的安全哈希摘要(比如sha1指纹)来唯一识别数据块,避免了数据的逐个字符的匹配,而且存储系统只需要简单地维护安全哈希摘要的索引表,就可以实现快速方便地识别重复数据,且重复的数据内容只需要记录相应的数据指针信息即可达到节省存储空间的目的。

而数据压缩也是一种冗余数据消除技术,主要通过编码的方式消除冗余数据信息,即在保证原有数据信息不丢失的前提下,将原始内容进行转换,对于重复的字节序列用更少字节数的编码表示,从而达到消除部分冗余数据并最终节省存储空间的目的。

而对于现有的压缩去重技术,一般是将被压缩数据块的哈希值与去重指纹库中的指纹进行比对,若存在匹配的指纹,则确定被压缩数据块为重复数据,则只需记录重复数据的指针信息即可;若不存在匹配的指纹,则确定被压缩数据块为非重复数据块,则将被压缩数据块进行压缩后进行存储,以达到节省存储空间的目的,而这种压缩存储方式,在当文件数据发生更新(删除或更改)时,即在存储原有压缩数据的地址空间中,删除掉原压缩数据,或对原压缩数据进行更新,如:假设原文件中一个非重复数据块压缩后的存储空间为50k,而当文件数据删除后,则会出现50k的空间碎片,而当文件数据更改后,若更新后非重复数据块压缩后的数据长度为5k,则会出现45k的空间碎片,当在后期对空间碎片进行回收时,需要将未更新的非重复数据块迁移至另一存储地址,而若在迁移的过程中,与该未更新的非重复数据块相邻存储的数据块反复更新时,则需将该未更新的非重复数据块反复迁移,从而增加了对该存储系统的io次数,降低了该存储系统的io性能。

针对该问题,本申请提出了一种基于全闪存阵列的空间回收方法,用于减少后续空间回收时对更新数据块的频繁迁移操作,提高存储系统的io性能。

为方便理解,下面对本申请中的基于全闪存阵列的空间回收方法进行描述,请参阅图1,本申请实施例中基于全闪存阵列的空间回收方法的一个实施例,包括:

101、获取所述性能层中的被压缩数据;

一般的,对于一台带有处理器的设备而言,存储系统的io性能是影响设备系统性能的主要因素,而当设备的外存储器部署为全闪存阵列时,一般的全闪存阵列的物理架构分为容量层和性能层,其中,容量层是指io响应较慢的ssd固态硬盘,或普通硬盘,而性能层是指io响应较快的ssd固态硬盘,具体请参阅图2所示的全闪存阵列的物理架构,其中性能层又称为写缓存,容量层又称读缓存,而如何避免在性能层的数据回写至容量层的过程中,出现当数据块反复更新时,在空间回收时,对更新的数据块反复迁移存储地址的问题,是本申请要解决的技术问题。

当性能层中的数据回写至容量层的过程中,对回写的数据进行去重压缩,而在去重压缩前,需要获取性能层中被压缩的数据,其中被压缩的数据可以是各种文件数据,也可以是应用软件中的消息数据,此处不做具体限制。

102、将所述被压缩数据切分为预设长度的第一数据块,计算所述第一数据块的哈希值;

数据在压缩的过程中,一般是将数据切分为预设长度的第一数据块,其中,数据块的切分粒度可以是2k、4k、8k或其他大小,并在切分完成后,或在执行切分时,计算第一数据块的哈希值。

具体的,哈希算法是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。所有散列函数都有如下一个基本特性:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具有确定性的结果。故一般可以将每个数据快的哈希值视为该数据块的指纹。

需要说明的是,在数据块的切分过程中,对于预设长度的大小,可以根据具体应用的实际需求进行切分,此处不做具体限制。

103、将所述第一数据块的哈希值与所述容量层中的去重指纹库进行匹配,以确定是否存在匹配指纹,若否,则执行步骤104,若是,则执行步骤108;

得到第一数据块的哈希值,即第一数据块的指纹后,可以将第一数据块与容量层中预先存储的去重指纹库进行匹配,以确定去重指纹库中是否存在匹配的指纹,若否,则执行步骤104,若是,则执行步骤108。

104、确定第一数据块为非重复数据块,对所述第一数据块进行压缩,并将压缩后的第一数据块以预设长度为存储单位,以日志追加写的方式回写至所述容量层,而将所述第一数据块的指纹更新至所述去重指纹库中,将第一数据块的元数据信息更新至容量层的文件元数据区域,所述元数据信息包括:所述第一数据块压缩后的物理存储地址及所述第一数据块压缩后的长度;

当去重指纹库中不存在第一数据块对应的指纹时,说明第一数据块为非重复数据块,则对第一数据块进行压缩,优选的压缩算法为lz4压缩算法。当压缩完成后,将压缩后的第一数据块以预设长度为存储单位,并以日志追加写的方式回写至容量层,并将第一数据块的哈希值(指纹)更新至去重指纹库中,而将第一数据块的元数据信息更新至文件元数据区域,所述元数据信息包括:第一数据块压缩后的物理存储地址及第一数据块压缩后的长度,以便于当第一数据块下次出现时,可以作为重复数据块进行处理,及后期能够根据第一数据块的元数据信息对第一数据块执行解压恢复。

需要说明的是,也可以将第一数据块的哈希值(指纹)及第一数据块的元数据信息同时更新至去重指纹库中,只要能够实现后期根据第一数据块的元数据信息对第一数据块执行解压恢复即可,此处对第一数据块元数据信息的更新地址,不做具体限制。

具体的,如假设原文件中一个非重复数据块压缩后的存储空间为6k,则将6k以预设长度(如1k)为存储单位,以日志追加写的方式回写至容量层,这样,压缩后为6k的非重复数据块在存储时,即占用6个1k的存储单位,需要说明的是,预设长度的存储单位也可以是2k,这样,压缩后为6k的非重复数据块在存储时,即占用3个2k的存储单位,此处对存储单位的预设长度不做具体限制。

因为日志追加写是按照时间顺序执行顺序写,故当第一数据块对应的文件更新时,对应文件中的新数据块执行压缩后,则是以时间顺序来执行追加写,即在存储介质中是存储在新的存储空间地址(新的存储单位)中,也即异地更新,而非在原来第一数据块对应的存储地址进行更新,这样就避免了文件数据更新后,新的数据块压缩后的长度与原来第一数据块压缩后存储空间不匹配的问题,进而避免了存储介质中存储空间的浪费,也避免了存储介质中产生更小的空间碎片,提高了对存储介质中存储空间的利用率,另外,因为异地更新只用执行写操作,而原地更新却要先执行读操作,再执行写操作,所以日志追加写的异地更新方式,也进一步提高了容量层的io性能。

进一步,因为ssd盘的最小写入单元为4k,且在一个最小写入单元未写满时,若下次还需要在该最小写入单元执行写操作时,根据ssd盘擦除写的特性,需要先对该最小写入单元中预先存储的已存储数据进行读取,然后擦除,再将需要新写入的新数据和读取出来的已存储数据重新写入,故本申请通过日志追加写的方式对文件数据执行异地更新时,还可以将压缩后的数据以预设长度为存储单位先存储至日志存储单元,并在日志存储单元写满后,再将日志存储单元回写至容量层,其中,日志存储单元的存储空间为容量层最小写入单元的整数倍,即4k的整数倍,如8k、12k或16k,这样,既适配了ssd盘最小写单元为4k的特性,也避免了在ssd盘中产生随机小写(即写入数据的长度小于最小写入单元4k)的问题,即进一步避免了存储介质中存储空间的浪费问题。

容易理解的是,存储单位是远小于日志存储单元的空间单位,且该存储单位主要是便于步骤105中构建数据位图所用,存储单位越小,越容易识别每个存储单位中数据的空间占用状态,但该存储单位越小,也会相应使得数据位图表中的数据量较大,故存储单位的大小可以根据实际应用中处理器的配置进行具体设置,此处不做具体限制。如预设长度的存储单位还可以是2k,3k或其他值,但该存储单位的预设长度一般小于容量层的最小写入单元(4k),此处对存储单位的预设长度不做具体限制。

105、构建数据位图表,该数据位图表用于记录对应每个存储单位或多个存储单位的空间占用状态,所述空间占用状态包括第一状态和第二状态,所述第一状态为无效占用,所述第二状态为有效占用;

将压缩后的第一数据块以预设长度的存储单位进行存储后,还可以进一步构建数据位图表,其中,该数据位图表用于记录对应每个存储单位(如1k)或多个存储单位的空间占用状态,每个存储单位的空间占用状态包括第一状态和第二状态,第一状态表示空间占用状态为无效占用,即该存储单位中存储的数据为无效数据,而第二状态表示空间占用状态为有效占用,即该存储单位中的数据为有效数据。

当压缩后的第一数据块以预设长度为存储单位,并以日志追加写的方式回写至容量层时,则是在某个存储单位中的第一数据块发生更改或删除时,则所述数据位图表中记录对应存储单位的空间占用状态由第二状态更改为第一状态,即该存储单位中的第一数据块由有效占用状态更改为无效占用状态,否则,所述数据位图表中记录对应存储单位的空间占用状态仍为第二状态(即有效占用状态),具体的,为便于操作,可以在数据位图表中用数字“0”来表示存储单位的空间占用状态为第一状态,而用数字“1”来表示存储单位的空间占用状态为第二状态。

因为在第一数据块发生更新(删除或更改)时,压缩后的第一数据块是以日志追加写的方式进行异地更新,即存储在新的存储地址(存储单位)中,第一数据块原有存储地址的数据将成为无效数据,所以当存储单位中的第一数据块发生更改或删除时,则所述数据位图表中记录对应存储单位的空间占用状态都为第一状态,而当第一数据块正常存在(未发生更新)时,则数据位图表中记录对应存储单位的空间占用状态为第二状态。图3a为本申请实施例中对压缩后的第一数据块是以日志追加写的方式进行异地更新的示意图,且图3a中也示出了数据块的逻辑地址、匹配指纹及匹配指纹对应的物理地址之间的对应关系;图3b为本申请实施例中数据位图表的示意图。

106、扫描所述数据位图表,获取处于所述第二状态的存储单位中的未更新数据块,并将所述未更新数据块迁移至新的存储单位;

在数据块更新的过程中,会出现多个存储单位的空间状态为无效占用,即该存储单位中的存储数据为无效数据,为了及时对存储单位中的无效数据进行空间回收,则可以通过扫描数据位图表,及时获取每个存储单位的空间状态,若该存储单位的空间状态为第一状态,即表明该存储单位中存储的数据为无效数据,需要对该无效数据执行删除操作,若该存储单位的空间状态为第二状态,即表明该存储单位中存储的数据为有效数据,需要将该存储单位中的有效数据(即未更新数据)迁移至其他存储地址(存储单位),以对当前的存储空间进行回收。

进一步,将未更新数据块迁移至新的存储单位后,还需要将未更新数据块的元数据信息更新至文件元数据区域中,其中,未更新数据块的元数据信息包括未更新数据块的物理存储地址及未更新数据块压缩后的长度,以便于后期根据未更新数据块的元数据信息执行数据解压操作。

107、将所述未更新数据块划分为频繁迁移和非频繁迁移类型,并将非频繁迁移的未更新数据块进行固定化存储,避免对非频繁迁移的未更新数据块的频繁迁移。

在将未更新数据块迁移至新的存储单位的过程中,为了避免出现与未更新数据块相邻存储的数据块反复更新时,将未更新数据块的存储地址反复迁移的问题,可以将未更新数据块划分为频繁迁移和非频繁迁移类型,并将非频迁移的未更新数据块进行固定化存储,避免对未更新数据块的频繁迁移。

具体的,可以根据不同的维度对未更新数据块执行类型的划分,而对于类型划分的维度将在下面的实施例中详细描述,此处不再赘述。

108、执行其他流程。

当第一数据块与去重指纹库中的指纹匹配,则执行其他流程,此处不做具体限制。

本申请实施例中,将非重复数据块压缩后,以预设长度的存储单位,以日志追加写的方式在容量层中进行存储,并构建数据位图表,用于对应记录每个存储单位的空间占用状态,使得当存储单位中的第一数据块发生更新时,则对应该存储单位的数据位图表由第二状态变更会第一状态,从而在后期空间回收时,即可通过扫描数据位图表,获知容量层中每个存储单位的空间占用状态,并在该存储单位的空间占用状态为第二状态时,将该存储单位中的未更新数据块迁移至新的存储单位,并在迁移的过程中,将未更新数据块划分为频繁迁移和非频繁迁移类型,并将非频繁迁移的未更新数据块进行固定化存储,避免对未更新数据块的频繁迁移。

基于图1所述的实施例,下面详细描述步骤107中划分数据类型的维度,请参阅图4,本申请实施例中基于全闪存阵列的空间回收方法的另一个实施例,包括:

1071、按照所述未更新数据块在预设时间段内发生迁移的前后两次时间间隔的平均值,将所述未更新数据块划分为频繁迁移和非频繁迁移类型;

具体的,在对未更新数据块迁移时,可以根据未更新数据块在预设时间段内(如2018年4月1日至5月1日之间)发生迁移的前后两次时间间隔的平均值,将未更新数据块划分为频繁迁移和非频繁迁移类型,假设未更新数据块在空间回收的过程中,发生了5次迁移,第1次迁移和第2次迁移之间的时间间隔为20分钟,第2次迁移和第3次迁移之间的时间间隔为10分钟,第3次迁移和第4次迁移之间的时间间隔为30分钟,第4次迁移和第5次迁移之间的时间间隔为40分钟,则未更新数据块在预设时间段内,发生迁移的前后两次时间间隔的平均值为20分钟,若预设的时间阈值为10分钟,而发生迁移的前后两次时间间隔的平均值20分钟大于预设的时间阈值10分钟,故该未更新数据块为频繁迁移数据类型。

需要说明的是,其中在预设时间段内发生迁移的前后两次时间间隔的平均值还可以更改为加权平均值等其他形式,此处不做具体限制。

1072、按照所述未更新数据块在预设时间段内发生迁移的频率,将所述未更新数据块划分为频繁迁移和非频繁迁移类型;

进一步,还可以根据未更新数据块在预设时间段内发生迁移的频率,将未更新数据块划分为频繁迁移和非频繁迁移类型,如在预设的时间段内(如2018年4月1日至5月1日之间),未更新数据块发生迁移的频率为20次,而预设的频率阈值为30次,而未更新数据块发生迁移的频率小于预设的频域阈值,故未更新数据块为非频繁迁移类型。

需要说明的是,上面的示例内容只是对划分方式的一种示例性说明,并不对具体的划分方式构成限制。

1073、按照所述未更新数据块对应指纹的引用次数,将所述未更新数据块划分为频繁迁移和非频繁迁移类型。

进一步,还可以根据未更新数据块在预设时间段内对应指纹的引用次数,将未更新数据块划分为频繁迁移和非频繁迁移类型,如未更新数据块对应指纹的引用次数为200次,即该未更新数据块为经常被引用,且不更新的数据块,而预设的指纹引用次数阈值为50次,而未更新数据块对应植物的引用次数200大于预设的引用次数阈值50,故该未更新数据块为非频繁迁移类型。

需要说明的是,上面的示例内容只是对划分方式的一种示例性说明,并不对具体的划分方式构成限制。

除此以外,还可以根据其他维度,如未更新数据块的创建时间、未更新数据块的可压缩性,作为数据类型的划分依据,此处对未更新数据块所属的数据类型的划分依据不做具体限制。

本申请实施例中,对将未更新数据块划分为频繁迁移和非频繁迁移类型的划分依据进行了详细的描述,提高了本申请实施例的可实施性。

基于图1所述实施例,下面详细描述基于全闪存阵列的空间回收方法,请参阅图5,本申请实施例中基于全闪存阵列的空间回收方法的另一个实施例,包括:

501、获取所述性能层中的被压缩数据;

502、将所述被压缩数据切分为预设长度的第一数据块,计算所述第一数据块的哈希值;

503、将所述第一数据块的哈希值与所述容量层中的去重指纹库进行匹配,以确定是否存在匹配指纹,若否,则执行步骤504,若是,则执行步骤509;

504、确定第一数据块为非重复数据块,对所述第一数据块进行压缩,并将压缩后的第一数据块以预设长度为存储单位,以日志追加写的方式回写至日志存储单元,并在所述日志存储单元写满后,将所述日志存储单元回写至所述容量层,所述日志存储单元的存储空间为所述容量层最小写入单元的整数倍,而将所述第一数据块的指纹更新至所述去重指纹库中,将第一数据块的元数据信息更新至容量层的文件元数据区域,所述元数据信息包括:所述第一数据块压缩后的物理存储地址及所述第一数据块压缩后的长度;

505、构建数据位图表,所述数据位图表用于记录对应每个存储单位或多个存储单位的空间占用状态,所述空间占用状态包括第一状态和第二状态,所述第一状态为无效占用,所述第二状态为有效占用;

需要说明的是,本实施例中的步骤501至505与图1所述实施例中的步骤101至105类似,此处不再赘述。

506、扫描所述数据位图表,获取每个日志存储单元中处于第一状态的存储单位的数量,并判断所述处于第一状态的存储单位所占用的空间是否大于预设的空间占用阈值,若是,则执行步骤507,若否,则执行步骤511;

构建数据位图表以后,还可以实时或定时地对数据位图表进行扫描,并在扫描的过程中,获取每个日志存储单元中处于第一状态的存储单位的数量,并判断处于第一状态的存储单位所占用的空间是否大于预设的空间阈值,如:在某个日志存储单元(200k)中,处于第一状态(即无效占用)的存储单位的数量为100个,每个存储单位为1k,则处于第一状态的存储单位所占用的空间为日志存储单元的50%,若预设的空间占用阈值为40%,而处于第一状态的存储单位所占用的空间利用率50%大于预设的空间占用阈值40%,即该日志存储单元中的无效数据超出40%,则执行步骤507,否则,执行步骤511。

507、删除所述日志存储单元中处于第一状态的存储单位中的更新数据块,获取所述日志存储单元中处于所述第二状态的存储单位中的未更新数据块,并将未更新数据块迁移至新的存储单位,同时将未更新数据块的元数据信息更新至文件元数据区域,未更新数据块的元数据信息包括未更新数据块的物理存储地址及未更新数据块压缩后的长度;

若处于第一状态的存储单位在日志存储单元中所占用的空间率大于预设的空间占用阈值,则表明该日志存储单元中的无效数据过多,可以对该日志存储单元执行空间回收操作,即删除该日志存储单元中处于第一状态的存储单位中的更新数据块,获取该日志存储单元中处于第二状态的存储单位中的未更新数据块,并将未更新数据块迁移至新的存储单位(即新的存储地址),同时将未更新数据块的元数据信息更新至文件元数据区域中,其中,未更新数据块的元数据信息包括未更新数据块的物理存储地址及未更新数据块压缩后的长度,以便于后期根据未更新数据块的元数据信息对数据执行解压操作。

508、将所述未更新数据块划分为频繁迁移和非频繁迁移类型,并将非频繁迁移的未更新数据块进行固定化存储,避免对非频繁迁移的未更新数据块的频繁迁移;

需要说明的是,本实施例中的步骤508与图1所述实施例中的步骤107类似,此处不做具体限制。

509、确定第一数据块为重复数据,并将所述第一数据块的元数据信息回写至所述容量层的元数据区域,所述元数据信息包括所述第一数据块在所述被压缩数据中的逻辑地址、所述匹配指纹及所述匹配指纹的物理地址之间的对应关系。

当第一数据块的指纹与去重指纹库中的指纹匹配时,则确定第一数据块为重复数据,则将第一数据块的元数据信息回写至容量层的元数据区域,以用于在数据解压过程中根据第一数据块的元数据信息对第一数据块进行恢复。

具体的,第一数据块的元数据信息包括第一数据块在被压缩数据中的逻辑地址、匹配指纹、匹配指纹的物理地址之间的对应关系,具体的,第一数据块在被压缩数据中的逻辑地址是指第一数据块在被压缩数据中逻辑顺序(如在图6a中,数据块b5为文件1中的第一个数据块),而匹配指纹的物理地址,是指匹配指纹在容量层中具体的物理存储地址,以便于后期根据该物理地址对第一数据块执行解压恢复,其中,图6a为本申请实施例中数据去重前后逻辑地址及物理地址的示意图;图6b为本申请实施例中容量层元数据区域中元数据信息的数据逻辑组织关系示意图,在该数据逻辑组织关系图中,容易理解的是,多个数据块可以对应同一个指纹,即多个(n个)逻辑地址对应同一个指纹,而一个指纹只对应自身的一个物理存储地址,以用于后期根据该指纹对应数据块的物理存储,对该数据块执行解压恢复。

510、对去重指纹库中指纹的引用次数执行计数管理。

为了明确容量层中的空间碎片信息,即容量层中原有存储空间中的存储数据被删除后所产生的空间碎片,还可以对去重指纹库中指纹的引用次数执行计数管理,具体可以通过以下两个方面进行计数管理:

一、当所述去重指纹库中存在所述第一数据块的匹配指纹时,则将所述匹配指纹的引用次数执行增长式运算;

如被压缩数据中的第一数据块在去重指纹库中存在匹配指纹时,则对该匹配指纹的引用次数执行增长式运算,优选的为累加式运算,即当第一数据块在去重指纹库中存在匹配指纹时,对该匹配指纹的引用次数执行“+1”运算,当然,增长式运算还可以是乘法运算,或混合运算,只要是正相关运算即可,此处不做具体限制。

二、当引用所述去重指纹库中匹配指纹的第一数据块发生更新时,则将所述匹配指纹的引用次数执行递减式运算。

具体的,如去重指纹库中的某个匹配指纹对应的文件数据发生删除或更改时,则将对该匹配指纹的引用次数执行递减式运算,优选的为减法运算,即当匹配指纹对应的第一数据块发生删除或更新时,则对该匹配指纹的引用次数执行“-1”运算,当然,递减式运算还可以是除法运算,或混合运算,只要是负相关运算即可,此处不做具体限制。

这样,通过对去重指纹库中指纹引用次数的管理,便可以明确每个指纹的引用情况,当去重指纹库中第一指纹的引用次数为0时,则在对应的数据位图表中,引用第一指纹的第一数据块所对应的存储单位的空间占用状态为第一状态,即当第一指纹的引用次数为0时,则在对应的数据位图表中,引用第一指纹的第一数据块对应的存储单位的空间占用状态为无效占用,则可以对该存储单位所占用的空间进行定向回收,即删除该存储单位所占用空间中的无效数据。

511、执行其他流程。

若每个日志存储单元中处于第一状态的存储单位所占用的空间都不大于预设的空间占用阈值,则执行其他流程,此处不再具体限制。

本申请实施例中,将非重复数据块压缩后,以预设长度的存储单位,以日志追加写的方式回写至日志存储单元中,并在日志存储单元写满后,再回写至容量层中,并构建数据位图表,用于对应记录每个存储单位的空间占用状态,使得当存储单位中的第一数据块发生更新时,则对应该存储单位的数据位图表由第二状态变更会第一状态,从而在后期空间回收时,即可通过扫描数据位图表,获知容量层中每个日志存储单元的空间占用状态,并在该日志存储单元的空间占用率大于预设的空间阈值时,删除该日志存储单元中处于第一状态的更新数据块,并将该日志存储单元中的处于第二状态的未更新数据块迁移至新的存储单位,并在迁移的过程中,将未更新数据块划分为频繁迁移和非频繁迁移类型,从而将非频繁迁移的未更新数据块进行固定化存储,避免对未更新数据块的频繁迁移,从而提高全闪存阵列的io性能。

上面描述了本申请实施例中的基于全闪存阵列的空间回收方法,下面来描述本申请实施例中基于全闪存阵列的空间回收系统,请参阅图7,本申请实施例中基于全闪存阵列的空间回收系统的一个实施例,包括:

获取单元701,用于获取所述性能层中的被压缩数据;

切分计算单元702,用于将所述被压缩数据切分为预设长度的第一数据块,计算所述第一数据块的哈希值;

匹配单元703,用于将所述第一数据块的哈希值与所述容量层中的去重指纹库进行匹配,以确定是否存在匹配指纹;

压缩单元704,用于在不存在所述匹配指纹时,则确定所述第一数据块为非重复数据块,对所述第一数据块进行压缩,并将压缩后的第一数据块以预设长度为存储单位,以日志追加写的方式回写至所述容量层,而将第一数据块的元数据信息及所述第一数据块的指纹更新至所述去重指纹库中,所述元数据信息包括:所述第一数据块压缩后的物理存储地址及所述第一数据块压缩后的长度;

构建单元705,用于构建数据位图表,所述数据位图表用于记录对应每个存储单位或多个存储单位的空间占用状态,所述空间占用状态包括第一状态和第二状态,所述第一状态为无效占用,所述第二状态为有效占用;

扫描单元706,用于扫描所述数据位图表,获取处于所述第二状态的存储单位中的未更新数据块,并将所述未更新数据块迁移至新的存储单位;

类型划分单元707,用于将所述未更新数据块划分为频繁迁移和非频繁迁移类型,并将非频繁迁移的未更新数据块进行固定化存储,避免对所述非频繁迁移的未更新数据块的频繁迁移。

需要说明的是,本实施例中各单元的作用与图1所述实施例中描述的类似,此处不再赘述。

本申请实施例中,将非重复数据块压缩后,以预设长度的存储单位,以日志追加写的方式在容量层中进行存储,并构建数据位图表,用于对应记录每个存储单位的空间占用状态,使得当存储单位中的第一数据块发生更新时,则对应该存储单位的数据位图表由第二状态变更会第一状态,从而在后期空间回收时,即可通过扫描数据位图表,获知容量层中每个存储单位的空间占用状态,并在该存储单位的空间占用状态为第二状态时,将该存储单位中的未更新数据块迁移至新的存储单位,并在迁移的过程中,将未更新数据块划分为频繁迁移和非频繁迁移类型,并将非频繁迁移的未更新数据块进行固定化存储,避免对未更新数据块的频繁迁移。

基于图7所述的实施例,下面详细描述本申请实施例中的基于全闪存阵列的空间回收系统,请参阅图8,本申请实施例中基于全闪存阵列的空间回收系统的另一个实施例,包括:

获取单元801,用于获取所述性能层中的被压缩数据;

切分计算单元802,用于将所述被压缩数据切分为预设长度的第一数据块,计算所述第一数据块的哈希值;

匹配单元803,用于将所述第一数据块的哈希值与所述容量层中的去重指纹库进行匹配,以确定是否存在匹配指纹;

压缩单元804,用于在不存在所述匹配指纹时,则确定所述第一数据块为非重复数据块,对所述第一数据块进行压缩,并将压缩后的第一数据块以预设长度为存储单位,以日志追加写的方式回写至所述容量层,而将第一数据块的元数据信息及所述第一数据块的指纹更新至所述去重指纹库中,所述元数据信息包括:所述第一数据块压缩后的物理存储地址及所述第一数据块压缩后的长度;

构建单元805,用于构建数据位图表,所述数据位图表用于记录对应每个存储单位或多个存储单位的空间占用状态,所述空间占用状态包括第一状态和第二状态,所述第一状态为无效占用,所述第二状态为有效占用;

扫描单元806,用于扫描所述数据位图表,获取处于所述第二状态的存储单位中的未更新数据块,并将所述未更新数据块迁移至新的存储单位;

类型划分单元807,用于将所述未更新数据块划分为频繁迁移和非频繁迁移类型,并将非频繁迁移的未更新数据块进行固定化存储,避免对所述非频繁迁移的未更新数据块的频繁迁移。

优选的,所述类型划分单元807,包括:

第一划分模块8071,用于按照所述未更新数据块发生迁移的前后两次时间间隔的平均值,将所述未更新数据块划分为频繁迁移和非频繁迁移类型;

或,

第二划分模块8072,用于按照所述未更新数据块在预设时间段内发生迁移的频率,将所述未更新数据块划分为频繁迁移和非频繁迁移类型;

或,

第三划分模块8073,用于按照所述未更新数据块对应指纹的引用次数,将所述未更新数据块划分为频繁迁移和非频繁迁移类型。

优选的,所述系统还包括:

更新单元810,用于将所述未更新数据块的元数据信息更新至文件元数据区域,所述元数据信息包括:所述未更新数据块的物理存储地址及所述未更新数据块的长度。

优选的,所述压缩单元804,包括:

压缩模块8041,用于将压缩后的第一数据块以预设长度为存储单位,以日志追加写的方式回写至日志存储单元,并在所述日志存储单元写满后,将所述日志存储单元回写至所述容量层,所述日志存储单元的存储空间为所述容量层最小写入单元的整数倍。

优选的,所述扫描单元806,包括:

扫描判断模块8061,用于扫描所述数据位图表,获取每个日志存储单元中处于第一状态的存储单位的数量,并判断所述处于第一状态的存储单位所占用的空间是否大于预设的空间占用阈值;

获取模块8062,用于获取每个日志存储单元中处于所述第二状态的存储单位中的未更新数据块,

删除迁移模块8063,用于在处于第一状态的存储单位所占用的空间大于预设的空间占用阈值时,删除所述日志存储单元中处于第一状态的存储单位中的更新数据块,并将所述未更新数据块迁移至新的存储单位。

执行模块8064,用于在处于第一状态的存储单位所占用的空间不大于预设的空间占用阈值时,执行其他流程。

优选的,所述系统还包括:

去重单元808,用于在存在所述匹配指纹时,确定所述第一数据块为重复数据,并将所述第一数据块的元数据信息回写至所述容量层的元数据区域,所述元数据信息包括所述第一数据块在所述被压缩数据中的逻辑地址、所述匹配指纹及所述匹配指纹的物理地址之间的对应关系。

优选的,所述系统还包括:

计数单元809,用于对所述去重指纹库中指纹的引用次数执行计数管理;

所述计数单元809,包括:

第一计数模块8091,用于当所述去重指纹库中存在所述第一数据块的匹配指纹时,则将所述匹配指纹的引用次数执行增长式运算;

和,

第二计数模块8092,用于当引用所述去重指纹库中所述匹配指纹的第一数据块发生更新时,则将所述匹配指纹的引用次数执行递减式运算。

需要说明的是,本实施例中各单元的作用与图5所述实施例中描述的类似,此处不再赘述。

本申请实施例中,将非重复数据块压缩后,以预设长度的存储单位,以日志追加写的方式回写至日志存储单元中,并在日志存储单元写满后,再回写至容量层中,并构建数据位图表,用于对应记录每个存储单位的空间占用状态,使得当存储单位中的第一数据块发生更新时,则对应该存储单位的数据位图表由第二状态变更会第一状态,从而在后期空间回收时,即可通过扫描数据位图表,获知容量层中每个日志存储单元的空间占用状态,并在该日志存储单元的空间占用率大于预设的空间阈值时,删除该日志存储单元中处于第一状态的更新数据块,并将该日志存储单元中的处于第二状态的未更新数据块迁移至新的存储单位,并在迁移的过程中,将未更新数据块划分为频繁迁移和非频繁迁移类型,从而将非频繁迁移的未更新数据块进行固定化存储,避免对未更新数据块的频繁迁移,从而提高全闪存阵列的io性能。

上面从模块化功能实体的角度对本申请实施例中的基于全闪存阵列的空间回收系统进行了描述,下面从硬件处理的角度对本申请实施例中的全闪存阵列的空间回收系统进行描述:

本申请实施例中全闪存阵列的数据压缩系统一个实施例包括:

处理器以及存储器;

存储器用于存储计算机程序,处理器用于执行存储器中存储的计算机程序时,可以实现如下步骤:

获取所述性能层中的被压缩数据;

将所述被压缩数据切分为预设长度的第一数据块,计算所述第一数据块的哈希值;

将所述第一数据块的哈希值与所述容量层中的去重指纹库进行匹配,以确定是否存在匹配指纹;

若不存在所述匹配指纹,则确定所述第一数据块为非重复数据块,对所述第一数据块进行压缩,并将压缩后的第一数据块以预设长度为存储单位,以日志追加写的方式回写至所述容量层,而所述第一数据块的指纹更新至所述去重指纹库中,将第一数据块的元数据信息更新至容量层的文件元数据区域,所述元数据信息包括:所述第一数据块压缩后的物理存储地址及所述第一数据块压缩后的长度;

构建数据位图表,所述数据位图表用于记录对应每个存储单位或多个存储单位的空间占用状态,所述空间占用状态包括第一状态和第二状态,所述第一状态为无效占用,所述第二状态为有效占用;

扫描所述数据位图表,获取处于所述第二状态的存储单位中的未更新数据块,并将所述未更新数据块迁移至新的存储单位;

将所述未更新数据块划分为频繁迁移和非频繁迁移类型,并将非频繁迁移的未更新数据块进行固定化存储,避免对所述非频繁迁移的未更新数据块的频繁迁移。

在本申请的一些实施例中,处理器,还可以用于实现如下步骤:

按照所述未更新数据块发生迁移的前后两次时间间隔的平均值,将所述未更新数据块划分为频繁迁移和非频繁迁移类型;

或,

按照所述未更新数据块在预设时间段内发生迁移的频率,将所述未更新数据块划分为频繁迁移和非频繁迁移类型;

或,

按照所述未更新数据块对应指纹的引用次数,将所述未更新数据块划分为频繁迁移和非频繁迁移类型。

在本申请的一些实施例中,处理器,还可以用于实现如下步骤:

将所述未更新数据块的元数据信息更新至所述文件元数据区域中,所述元数据信息包括:所述未更新数据块的物理存储地址及所述未更新数据块的长度。

在本申请的一些实施例中,处理器,还可以用于实现如下步骤:

将压缩后的第一数据块以预设长度为存储单位,以日志追加写的方式回写至日志存储单元,并在所述日志存储单元写满后,将所述日志存储单元回写至所述容量层,所述日志存储单元的存储空间为所述容量层最小写入单元的整数倍。

在本申请的一些实施例中,处理器,还可以用于实现如下步骤:

获取每个日志存储单元中处于第一状态的存储单位的数量,并判断所述处于第一状态的存储单位所占用的空间是否大于预设的空间占用阈值;

若是,则删除所述日志存储单元中处于第一状态的存储单位中的更新数据块。

在本申请的一些实施例中,处理器,还可以用于实现如下步骤:

若存在所述匹配指纹,则确定所述第一数据块为重复数据,并将所述第一数据块的元数据信息回写至所述容量层的元数据区域,所述元数据信息包括所述第一数据块在所述被压缩数据中的逻辑地址、所述匹配指纹及所述匹配指纹的物理地址之间的对应关系。

可以理解的是,上述说明的基于全闪存阵列的空间回收系统中的处理器执行所述计算机程序时,也可以实现上述对应的各装置实施例中各单元的功能,此处不再赘述。示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器中,并由所述处理器执行,以完成本申请。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述基于全闪存阵列的空间回收系统中的执行过程。例如,所述计算机程序可以被分割成上述基于全闪存阵列的空间回收系统中的各单元,各单元可以实现如上述相应基于全闪存阵列的空间回收系统说明的具体功能。

所述基于全闪存阵列的空间回收系统可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述基于全闪存阵列的空间回收系统可包括但不仅限于处理器、存储器。本领域技术人员可以理解,处理器、存储器仅仅是全闪存阵列的空间回收系统的示例,并不构成对全闪存阵列的空间回收系统的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述基于全闪存阵列的空间回收系统还可以包括输入输出设备、网络接入设备、总线等。

所述处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。

所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述基于全闪存阵列的空间回收系统的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

本申请还提供了一种计算机可读存储介质,该计算机可读存储介质用于实现基于全闪存阵列的空间回收系统的功能,其上存储有计算机程序,计算机程序被处理器执行时,处理器,可以用于执行如下步骤:

获取所述性能层中的被压缩数据;

将所述被压缩数据切分为预设长度的第一数据块,计算所述第一数据块的哈希值;

将所述第一数据块的哈希值与所述容量层中的去重指纹库进行匹配,以确定是否存在匹配指纹;

若不存在所述匹配指纹,则确定所述第一数据块为非重复数据块,对所述第一数据块进行压缩,并将压缩后的第一数据块以预设长度为存储单位,以日志追加写的方式回写至所述容量层,而将所述第一数据块的指纹更新至所述去重指纹库中,将第一数据块的元数据信息更新至容量层的文件元数据区域,所述元数据信息包括:所述第一数据块压缩后的物理存储地址及所述第一数据块压缩后的长度;

构建数据位图表,所述数据位图表用于记录对应每个存储单位或多个存储单位的空间占用状态,所述空间占用状态包括第一状态和第二状态,所述第一状态为无效占用,所述第二状态为有效占用;

扫描所述数据位图表,获取处于所述第二状态的存储单位中的更新数据块,并将所述更新数据块迁移至新的存储单位;

将所述更新数据块划分为频繁迁移和非频繁迁移类型,并将非频繁迁移的未更新数据块进行固定化存储,避免对所述非频繁迁移的未更新数据块的频繁迁移。

在本申请的一些实施例中,计算机可读存储介质存储的计算机程序被处理器执行时,处理器,可以具体用于执行如下步骤:

按照所述未更新数据块发生迁移的前后两次时间间隔的平均值,将所述未更新数据块划分为频繁迁移和非频繁迁移类型;

或,

按照所述未更新数据块在预设时间段内发生迁移的频率,将所述未更新数据块划分为频繁迁移和非频繁迁移类型;

或,

按照所述未更新数据块对应指纹的引用次数,将所述未更新数据块划分为频繁迁移和非频繁迁移类型。

在本申请的一些实施例中,计算机可读存储介质存储的计算机程序被处理器执行时,处理器,可以具体用于执行如下步骤:

将所述未更新数据块的元数据信息更新至所述文件元数据区域中,所述元数据信息包括:所述未更新数据块的物理存储地址及所述未更新数据块的长度。

在本申请的一些实施例中,计算机可读存储介质存储的计算机程序被处理器执行时,处理器,可以具体用于执行如下步骤:

将压缩后的第一数据块以预设长度为存储单位,以日志追加写的方式回写至日志存储单元,并在所述日志存储单元写满后,将所述日志存储单元回写至所述容量层,所述日志存储单元的存储空间为所述容量层最小写入单元的整数倍。

在本申请的一些实施例中,计算机可读存储介质存储的计算机程序被处理器执行时,处理器,可以具体用于执行如下步骤:

获取每个日志存储单元中处于第一状态的存储单位的数量,并判断所述处于第一状态的存储单位所占用的空间是否大于预设的空间占用阈值;

若是,则删除所述日志存储单元中处于第一状态的存储单位中的更新数据块。

在本申请的一些实施例中,计算机可读存储介质存储的计算机程序被处理器执行时,处理器,可以具体用于执行如下步骤:

若存在所述匹配指纹,则确定所述第一数据块为重复数据,并将所述第一数据块的元数据信息回写至所述容量层的元数据区域,所述元数据信息包括所述第一数据块在所述被压缩数据中的逻辑地址、所述匹配指纹及所述匹配指纹的物理地址之间的对应关系。

可以理解的是,所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在相应的一个计算机可读取存储介质中。基于这样的理解,本申请实现上述相应的实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行迁移,或者对其中部分技术特征进行等同替换;而这些迁移或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

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