一种数据存储方法及存储设备转让专利

申请号 : CN201711331166.1

文献号 : CN109918018B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张海艳周钊雷和阳

申请人 : 华为技术有限公司

摘要 :

本申请实施例公开一种数据存储方法及存储设备,涉及存储技术领域,在确定待存储数据块的类型为结构数据块后,将待存储数据块的元数据保存至结构数据存储区,待存储数据块包括结构区和数据区,结构区存储待存储数据块的元数据,数据区存储待存储数据块的用户数据;删除待存储数据块的元数据,并保存满足结构区的空间大小的多个预设字符至结构区中,得到更新后的待存储数据块;在确定更新后的待存储数据块与已存储数据块相同后,获取待存储数据块的逻辑存储地址、待存储数据块的元数据在结构数据存储区中的存储地址和已存储数据块的指纹索引,并保存三者之间的对应关系,有效的提高了数据块的重删率。

权利要求 :

1.一种数据存储方法,其特征在于,包括:

在确定待存储数据块的类型为结构数据块后,将所述待存储数据块的元数据保存至结构数据存储区,所述结构数据存储区用于存储数据块的元数据,所述待存储数据块包括结构区和数据区,所述结构区用于存储所述待存储数据块的元数据,所述数据区用于存储所述待存储数据块的用户数据;

删除所述待存储数据块的元数据,并保存满足所述结构区的空间大小的多个预设字符至所述结构区中,得到更新后的待存储数据块;

在确定所述更新后的待存储数据块与已存储数据块相同后,获取所述待存储数据块的逻辑存储地址和所述待存储数据块的元数据在所述结构数据存储区中的存储地址,并从指纹桶中获取所述已存储数据块的指纹索引;

保存所述待存储数据块的逻辑存储地址、所述待存储数据块的元数据在所述结构数据存储区中的存储地址以及所述已存储数据块的指纹索引之间的对应关系。

2.如权利要求1所述的数据存储方法,其特征在于,所述确定待存储数据块的类型为结构数据块之前,所述数据存储方法还包括:确定所述待存储数据块中预设位置的数据的数值为预设数值后,根据预设的一致性校验算法,对所述待存储数据块进行一致性校验,确定所述待存储数据块是否包括所述结构区和所述数据区;

所述确定待存储数据块的类型为结构数据块,具体包括:

确定所述待存储数据块包括所述结构区和所述数据区后,确定所述待存储数据块的类型为结构数据块。

3.如权利要求1或2所述的数据存储方法,其特征在于,所述数据存储方法还包括:接收客户端设备发送的数据访问请求,所述数据访问请求包括所述待存储数据块的逻辑存储地址,所述数据访问请求用于请求访问所述待存储数据块;

响应所述数据访问请求,获取与所述待存储数据块的逻辑存储地址对应的所述已存储数据块的指纹索引和所述待存储数据块的元数据在所述结构数据存储区中的存储地址;

根据所述待存储数据块的元数据在所述结构数据存储区中的存储地址获取所述待存储数据块的元数据;

从所述指纹桶中获取与所述已存储数据块的指纹索引对应的所述已存储数据块的物理存储地址,并根据所述已存储数据块的物理存储地址,获取所述已存储数据块;所述指纹桶用于记录所述已存储数据块的指纹索引与所述已存储数据块的物理存储地址之间的对应关系;

按照预设规则,将所述已存储数据块和所述待存储数据块的元数据重组,生成所述待存储数据块;

向所述客户端设备发送所述待存储数据块。

4.如权利要求1-2中任意一项所述的数据存储方法,其特征在于,所述确定所述更新后的待存储数据块与已存储数据块相同,具体包括:确定所述更新后的待存储数据块的指纹值与已存储数据块的指纹值相同,所述更新后的待存储数据块的压缩策略与所述已存储数据块的压缩策略相同,且所述更新后的待存储数据块与所述已存储数据块逐字节对比完全一致后,确定所述更新后的待存储数据块与所述已存储数据块相同。

5.如权利要求3所述的数据存储方法,其特征在于,所述确定所述更新后的待存储数据块与已存储数据块相同,具体包括:确定所述更新后的待存储数据块的指纹值与已存储数据块的指纹值相同,所述更新后的待存储数据块的压缩策略与所述已存储数据块的压缩策略相同,且所述更新后的待存储数据块与所述已存储数据块逐字节对比完全一致后,确定所述更新后的待存储数据块与所述已存储数据块相同。

6.一种数据存储方法,其特征在于,包括:

在确定待存储数据块的类型为结构数据块后,将所述待存储数据块的元数据保存至结构数据存储区,所述结构数据存储区用于存储数据块的元数据,所述待存储数据块包括结构区和数据区,所述结构区用于存储所述待存储数据块的元数据,所述数据区用于存储所述待存储数据块的用户数据;

删除所述待存储数据块的元数据,并保存满足所述结构区的空间大小的多个预设字符至所述结构区,得到更新后的待存储数据块;

在确定所述更新后的待存储数据块与已存储数据块不相同后,为所述更新后的待存储数据块分配目标物理存储空间,以存储所述更新后的待存储数据块;

获取所述待存储数据块的逻辑存储地址、所述待存储数据块的元数据在所述结构数据存储区中的存储地址、所述更新后的待存储数据块的物理存储地址、所述更新后的待存储数据块的指纹值、所述更新后的待存储数据块的指纹引用计数以及所述更新后的待存储数据块的指纹索引,所述更新后的待存储数据块的物理存储地址用于指示所述目标物理存储空间;

将所述更新后的待存储数据块的指纹值、所述更新后的待存储数据块的物理存储地址、所述更新后的待存储数据块的指纹引用计数和所述更新后的待存储数据块的指纹索引保存至指纹桶中,所述指纹桶用于记录所述已存储数据块的指纹值、所述已存储数据块的指纹引用计数、所述已存储数据块的物理存储地址以及所述已存储数据块的指纹索引之间的对应关系;

保存所述待存储数据块的逻辑存储地址、所述待存储数据块的元数据在所述结构数据存储区中的存储地址以及所述更新后的待存储数据块的指纹索引之间的对应关系。

7.如权利要求6所述的数据存储方法,其特征在于,所述确定待存储数据块的类型为结构数据块之前,所述数据存储方法还包括:确定所述待存储数据块中预设位置的数据的数值为预设数值后,根据预设的一致性校验算法,对所述待存储数据块进行一致性校验,确定所述待存储数据块是否包括所述结构区和所述数据区;

所述确定待存储数据块的类型为结构数据块,具体包括:

确定所述待存储数据块包括所述结构区和所述数据区后,确定所述待存储数据块的类型为结构数据块。

8.如权利要求6或7所述的数据存储方法,其特征在于,所述数据存储方法还包括:接收客户端设备发送的数据访问请求,所述数据访问请求包括所述待存储数据块的逻辑存储地址,所述数据访问请求用于请求访问所述待存储数据块;

响应所述数据访问请求,获取与所述待存储数据块的逻辑存储地址对应的所述更新后的待存储数据块的指纹索引和所述待存储数据块的元数据在所述结构数据存储区中的存储地址;

根据所述待存储数据块的元数据在所述结构数据存储区中的存储地址获取所述待存储数据块的元数据;

从所述指纹桶中获取与所述更新后的待存储数据块的指纹索引对应的所述更新后的待存储数据块的物理存储地址,并根据所述更新后的待存储数据块的物理存储地址,获取所述更新后的待存储数据块;

按照预设规则,将所述更新后的待存储数据块和所述待存储数据块的元数据重组,生成所述待存储数据块;

向所述客户端设备发送所述待存储数据块。

9.如权利要求6-7中任意一项所述的数据存储方法,其特征在于,所述确定所述更新后的待存储数据块与已存储数据块不相同,具体包括:在确定所述指纹桶中未存在与所述更新后的待存储数据块的指纹值相同的指纹值,或所述更新后的待存储数据块的压缩策略与已存储数据块的压缩策略不同,或所述更新后的待存储数据块与所述已存储数据块逐字节对比不完全一致后,确定所述更新后的待存储数据块与所述已存储数据块不相同。

10.如权利要求8所述的数据存储方法,其特征在于,所述确定所述更新后的待存储数据块与已存储数据块不相同,具体包括:在确定所述指纹桶中未存在与所述更新后的待存储数据块的指纹值相同的指纹值,或所述更新后的待存储数据块的压缩策略与已存储数据块的压缩策略不同,或所述更新后的待存储数据块与所述已存储数据块逐字节对比不完全一致后,确定所述更新后的待存储数据块与所述已存储数据块不相同。

11.一种存储设备,其特征在于,包括:

处理单元,用于确定待存储数据块的类型为结构数据块;

存储单元,用于在所述处理单元确定所述待存储数据块的类型为结构数据块后,将所述待存储数据块的元数据保存至结构数据存储区,所述结构数据存储区用于存储数据块的元数据,所述待存储数据块包括结构区和数据区,所述结构区用于存储所述待存储数据块的元数据,所述数据区用于存储所述待存储数据块的用户数据;

所述处理单元,还用于删除所述待存储数据块的元数据;

所述存储单元,还用于在所述处理单元删除待存储数据块的元数据后,保存满足所述结构区的空间大小的多个预设字符至所述结构区中,得到更新后的待存储数据块;

所述处理单元,还用于确定所述更新后的待存储数据块与已存储数据块是否相同,在确定所述更新后的待存储数据块与已存储数据块相同后,获取所述待存储数据块的逻辑存储地址和所述待存储数据块的元数据在所述结构数据存储区中的存储地址,并从指纹桶中获取所述已存储数据块的指纹索引;

所述存储单元,还用于保存所述处理单元获取到的所述待存储数据块的逻辑存储地址、所述待存储数据块的元数据在所述结构数据存储区中的存储地址以及所述已存储数据块的指纹索引之间的对应关系。

12.如权利要求11所述的存储设备,其特征在于,

所述处理单元,还用于在确定所述待存储数据块的类型为结构数据块之前,确定所述待存储数据块中预设位置的数据的数值是否为预设数值,并在确定所述待存储数据块中预设位置的数据的数值为预设数值后,根据预设的一致性校验算法,对所述待存储数据块进行一致性校验,确定所述待存储数据块是否包括所述结构区和所述数据区;

所述处理单元,具体用于确定所述待存储数据块包括所述结构区和所述数据区后,确定所述待存储数据块的类型为结构数据块。

13.如权利要求11或12所述的存储设备,其特征在于,所述存储设备还包括接收单元;

所述接收单元,用于接收客户端设备发送的数据访问请求,所述数据访问请求包括所述待存储数据块的逻辑存储地址,所述数据访问请求用于请求访问所述待存储数据块;

所述处理单元,还用于响应所述接收单元接收到的所述数据访问请求,获取与所述待存储数据块的逻辑存储地址对应的所述已存储数据块的指纹索引和所述待存储数据块的元数据在所述结构数据存储区中的存储地址;

所述处理单元,还用于根据所述待存储数据块的元数据在所述结构数据存储区中的存储地址获取所述待存储数据块的元数据;

所述处理单元,还用于从所述指纹桶中获取与所述已存储数据块的指纹索引对应的所述已存储数据块的物理存储地址,并根据所述已存储数据块的物理存储地址,获取所述已存储数据块;所述指纹桶用于记录所述已存储数据块的指纹索引与所述已存储数据块的物理存储地址之间的对应关系;

所述处理单元,还用于按照预设规则,将所述已存储数据块和所述待存储数据块的元数据重组,生成所述待存储数据块;

所述存储设备还包括发送单元;

所述发送单元,用于向所述客户端设备发送所述处理单元生成的所述待存储数据块。

14.如权利要求11-12中任意一项所述的存储设备,其特征在于,

所述处理单元,具体用于在确定所述更新后的待存储数据块的指纹值与已存储数据块的指纹值相同,所述更新后的待存储数据块的压缩策略与所述已存储数据块的压缩策略相同,且所述更新后的待存储数据块与所述已存储数据块逐字节对比完全一致后,确定所述更新后的待存储数据块与所述已存储数据块相同。

15.如权利要求13所述的存储设备,其特征在于,

所述处理单元,具体用于在确定所述更新后的待存储数据块的指纹值与已存储数据块的指纹值相同,所述更新后的待存储数据块的压缩策略与所述已存储数据块的压缩策略相同,且所述更新后的待存储数据块与所述已存储数据块逐字节对比完全一致后,确定所述更新后的待存储数据块与所述已存储数据块相同。

16.一种存储设备,其特征在于,包括:

处理单元,用于确定待存储数据块的类型为结构数据块;

存储单元,用于在所述处理单元确定所述待存储数据块的类型为结构数据块后,将所述待存储数据块的元数据保存至结构数据存储区,所述结构数据存储区用于存储数据块的元数据,所述待存储数据块包括结构区和数据区,所述结构区用于存储所述待存储数据块的元数据,所述数据区用于存储所述待存储数据块的用户数据;

所述处理单元,还用于删除所述待存储数据块的元数据;

所述存储单元,还用于在所述处理单元删除所述待存储数据块的元数据之后,保存满足所述结构区的空间大小的多个预设字符至所述结构区,得到更新后的待存储数据块;

所述处理单元,还用于确定所述更新后的待存储数据块与已存储数据块是否相同,并在确定所述更新后的待存储数据块与已存储数据块不相同后,为所述更新后的待存储数据块分配目标物理存储空间,以存储所述更新后的待存储数据块;

所述处理单元,还用于获取所述待存储数据块的逻辑存储地址、所述待存储数据块的元数据在所述结构数据存储区中的存储地址、所述更新后的待存储数据块的物理存储地址、所述更新后的待存储数据块的指纹值、所述更新后的待存储数据块的指纹引用计数以及所述更新后的待存储数据块的指纹索引,所述更新后的待存储数据块的物理存储地址用于指示所述目标物理存储空间;

所述存储单元,还用于将所述更新后的待存储数据块的指纹值、所述更新后的待存储数据块的物理存储地址、所述更新后的待存储数据块的指纹引用计数和所述更新后的待存储数据块的指纹索引保存至指纹桶中,所述指纹桶用于记录所述已存储数据块的指纹值、所述已存储数据块的指纹引用计数、所述已存储数据块的物理存储地址以及所述已存储数据块的指纹索引之间的对应关系;

所述存储单元,还用于保存所述待存储数据块的逻辑存储地址、所述待存储数据块的元数据在所述结构数据存储区中的存储地址以及所述更新后的待存储数据块的指纹索引之间的对应关系。

17.如权利要求16所述的存储设备,其特征在于,

所述处理单元,还用于在确定待存储数据块的类型为结构数据块之前,确定所述待存储数据块中预设位置的数据的数值是否为预设数值,并在确定所述待存储数据块中预设位置的数据的数值为预设数值后,根据预设的一致性校验算法,对所述待存储数据块进行一致性校验,确定所述待存储数据块是否包括所述结构区和所述数据区;

所述处理单元,具体用于在确定所述待存储数据块包括所述结构区和所述数据区后,确定所述待存储数据块的类型为结构数据块。

18.如权利要求16或17所述的存储设备,其特征在于,所述存储设备还包括接收单元;

所述接收单元,用于接收客户端设备发送的数据访问请求,所述数据访问请求包括所述待存储数据块的逻辑存储地址,所述数据访问请求用于请求访问所述待存储数据块;

所述处理单元,还用于响应所述接收单元接收到的所述数据访问请求,获取与所述待存储数据块的逻辑存储地址对应的所述更新后的待存储数据块的指纹索引和所述待存储数据块的元数据在所述结构数据存储区中的存储地址;

所述处理单元,还用于根据所述待存储数据块的元数据在所述结构数据存储区中的存储地址获取所述待存储数据块的元数据;

所述处理单元,还用于从所述指纹桶中获取与所述更新后的待存储数据块的指纹索引对应的所述更新后的待存储数据块的物理存储地址,并根据所述更新后的待存储数据块的物理存储地址,获取所述更新后的待存储数据块;

所述处理单元,还用于按照预设规则,将所述更新后的待存储数据块和所述待存储数据块的元数据重组,生成所述待存储数据块;

所述存储设备还包括发送单元;

所述发送单元,用于向所述客户端设备发送所述处理单元生成的所述待存储数据块。

19.如权利要求16-17中任意一项所述的存储设备,其特征在于,

所述处理单元,具体用于在确定所述指纹桶中未存在与所述更新后的待存储数据块的指纹值相同的指纹值,或所述更新后的待存储数据块的压缩策略与已存储数据块的压缩策略不同,或所述更新后的待存储数据块与所述已存储数据块逐字节对比不完全一致后,确定所述更新后的待存储数据块与所述已存储数据块不相同。

20.如权利要求18所述的存储设备,其特征在于,

所述处理单元,具体用于在确定所述指纹桶中未存在与所述更新后的待存储数据块的指纹值相同的指纹值,或所述更新后的待存储数据块的压缩策略与已存储数据块的压缩策略不同,或所述更新后的待存储数据块与所述已存储数据块逐字节对比不完全一致后,确定所述更新后的待存储数据块与所述已存储数据块不相同。

21.一种存储设备,其特征在于,所述存储设备包括:一个或多个处理器、存储器、通信接口;

所述存储器、所述通信接口与所述一个或多个处理器耦合;所述存储器用于存储计算机程序代码,所述计算机程序代码包括指令,当所述一个或多个处理器执行所述指令时,所述存储设备执行如权利要求1-5中任意一项所述的数据存储方法或执行如权利要求6-10中任意一项所述的数据存储方法。

22.一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,其特征在于,当所述指令在存储设备上运行时,使得所述存储设备执行如权利要求1-5中任意一项所述的数据存储方法或执行如权利要求6-10中任意一项所述的数据存储方法。

说明书 :

一种数据存储方法及存储设备

技术领域

[0001] 本申请实施例涉及存储技术领域,尤其涉及一种数据存储方法及存储设备。

背景技术

[0002] 随着时间的累计,存储设备存储的数据越来越多,在存储设备中,通常会存储有大量的重复数据。为了提高存储设备的存储效率和存储空间的利用率,业界提出了重复数据删除技术和数据压缩技术。重复数据删除技术用于删除重复出现的数据块,数据压缩技术则通过对数据重新编码来降低其冗余度。通常,重复数据删除技术和数据压缩技术配合起来一起使用,可有效的提高存储空间的利用率,并提高存储效率。重复数据删除技术和数据压缩技术的配合使用简称为重删压缩处理。
[0003] 现有技术中,对于结构化数据和非结构化数据而言,存储设备均以大小为4千字节(KB)或8KB的数据块为重删粒度。对于每个数据块而言,存储设备计算该数据块的指纹值,然后以指纹值为关键字在指纹桶中查看是否有与该数据块的指纹值相同的指纹值。如果有与该数据块的指纹值相同的指纹值,假设与该数据块的指纹值相同的指纹值为数据块A的指纹值,所述存储设备则进一步地判断该数据块的压缩策略与数据块A的压缩策略是否相同,以及进一步地将该数据块与数据块A进行逐字节对比。如果该数据块与数据块A的压缩策略相同,且该数据块与数据块A逐字节对比完全一致,则说明该数据块与数据块A重复,所述存储设备将数据块A的指纹值的引用计数加1,数据块A的指纹值的引用计数表示该指纹值对应的数据块被共享的次数。如果指纹桶中不存在与该数据块的指纹值相同的指纹值,或该数据块与数据块A的压缩策略不同,或该数据块与数据块A逐字节对比不完全一致,所述存储设备则将该数据块的指纹值按照预设规则插入指纹桶中,之后将该数据块中的数据压缩存放。
[0004] 然而,对于结构化数据块(包括结构化数据的数据块)而言,每个结构化数据块的结构固定,且每个结构化数据块均包括更新时间、块编号、块类型等各自独有的信息。这些独有的信息中少数几个字节的不同会导致整个结构化数据块无法删除,从而降低了结构化数据块的重删率。

发明内容

[0005] 本申请实施例提供一种数据存储方法及存储设备,能够解决结构化数据块的重删率较低的问题。
[0006] 为达到上述目的,本申请实施例采用如下技术方案:
[0007] 第一方面,提供一种数据存储方法,存储设备在确定待存储数据块的类型为结构数据块后,将待存储数据块的元数据保存至结构数据存储区,这里,结构数据存储区用于存储数据块的元数据,待存储数据块包括结构区和数据区,结构区用于存储待存储数据块的元数据,数据区用于存储待存储数据块的用户数据;存储设备删除待存储数据块的元数据,并保存满足结构区的空间大小的多个预设字符至结构区中,得到更新后的待存储数据块;在确定更新后的待存储数据块与已存储数据块相同后,存储设备获取待存储数据块的逻辑存储地址和待存储数据块的元数据在结构数据存储区中的存储地址,并从指纹桶中获取已存储数据块的指纹索引,之后,存储设备保存待存储数据块的逻辑存储地址、待存储数据块的元数据在结构数据存储区中的存储地址以及已存储数据块的指纹索引之间的对应关系。
[0008] 本申请实施例中的存储设备在确定待存储数据块分为用于存储待存储数据块的元数据的结构区以及用于存储待存储数据块的用户数据的数据区后,也就是说存储设备在确定待存储数据块为结构化数据块后,将待存储数据块的结构区所存储的所述待存储数据块的元数据保存到结构数据存储区中,删除所述待存储数据块的元数据,并保存满足待存储数据块的结构区的空间大小的多个预设字符至待存储数据块的结构区中,得到更新后的待存储数据块。更新后的待存储数据块为非结构化数据块,存储设备利用现有的重删压缩算法处理更新后的待存储数据块。
[0009] 由于存储设备是对更新后的待存储数据块进行重删压缩处理,并未考虑待存储数据块的元数据,避免了由于待存储数据块的元数据中的少数几个字节与已存储数据块的不同而导致待存储数据块无法重删的问题,有效的提高了结构化数据块的重删率,即有效的提高了数据块的重删率。
[0010] 可选的,本申请实施例中待存储数据块的逻辑存储地址、待存储数据块的元数据在结构数据存储区中的存储地址以及已存储数据块的指纹索引之间的对应关系可以采用数据块地址映射表表示,也可以采用其他形式表示,本申请实施例对此不作具体限定。
[0011] 可选的,在本申请的一种可能的实现方式中,存储设备还接收客户端设备发送的数据访问请求,该数据访问请求包括待存储数据块的逻辑存储地址,该数据访问请求用于请求访问待存储数据块;响应上述数据访问请求,存储设备获取与待存储数据块的逻辑存储地址对应的已存储数据块的指纹索引和待存储数据块的元数据在结构数据存储区中的存储地址,并根据待存储数据块的元数据在结构数据存储区中的存储地址获取待存储数据块的元数据;存储设备从指纹桶中获取与已存储数据块的指纹索引对应的已存储数据块的物理存储地址,并根据已存储数据块的物理存储地址,获取已存储数据块,这里,指纹桶用于记录已存储数据块的指纹索引与已存储数据块的物理存储地址之间的对应关系;存储设备按照预设规则,将已存储数据块和待存储数据块的元数据重组,生成待存储数据块,并向客户端设备发送待存储数据块。
[0012] 在存储设备已经存储待存储数据块的基础上,客户端设备可与该存储设备通信,访问待存储数据块。上述第一方面的应用场景中,存储设备存储有与待存储数据块重复的已存储数据块,存储设备将待存储数据的元数据单独存储于结构数据存储区中。这样,存储设备在获取到客户端设备发送的数据访问请求后,需要获取已存储数据块和待存储数据块的元数据,并按照预设规则,将已存储数据块和待存储数据块的元数据重组,生成待存储数据块。
[0013] 可选的,在本申请的另一种可能的实现方式中,上述“确定更新后的待存储数据块与已存储数据块相同”的方法为:存储设备在确定更新后的待存储数据块的指纹值与已存储数据块的指纹值相同,更新后的待存储数据块的压缩策略与已存储数据块的压缩策略相同,且更新后的待存储数据块与已存储数据块逐字节对比完全一致后,确定更新后的待存储数据块与已存储数据块相同。
[0014] 第二方面,提供一种存储设备,该存储设备包括处理单元和存储单元。
[0015] 本申请提供的各个单元模块所实现的功能具体如下:
[0016] 上述处理单元,用于确定待存储数据块的类型为结构数据块。上述存储单元,用于在上述处理单元确定待存储数据块的类型为结构数据块后,将待存储数据块的元数据保存至结构数据存储区,结构数据存储区用于存储数据块的元数据,待存储数据块包括结构区和数据区,结构区用于存储待存储数据块的元数据,数据区用于存储待存储数据块的用户数据。上述处理单元,还用于删除待存储数据块的元数据。上述存储单元,还用于在上述处理单元删除待存储数据块的元数据后,保存满足结构区的空间大小的多个预设字符至结构区中,得到更新后的待存储数据块。上述处理单元,还用于确定上述存储单元生成的更新后的待存储数据块与已存储数据块是否相同,在确定更新后的待存储数据块与已存储数据块相同后,获取待存储数据块的逻辑存储地址和待存储数据块的元数据在结构数据存储区中的存储地址,并从指纹桶中获取已存储数据块的指纹索引。上述存储单元,还用于保存上述处理单元获取到的待存储数据块的逻辑存储地址、待存储数据块的元数据在结构数据存储区中的存储地址以及已存储数据块的指纹索引之间的对应关系。
[0017] 可选的,在本申请的一种可能的实现方式中,上述处理单元,还用于在确定待存储数据块的类型为结构数据块之前,确定待存储数据块中预设位置的数据的数值是否为预设数值,并在确定待存储数据块中预设位置的数据的数值为预设数值后,根据预设的一致性校验算法,对待存储数据块进行一致性校验,确定待存储数据块是否包括结构区和数据区。相应的,上述处理单元,具体用于确定待存储数据块包括结构区和数据区后,确定待存储数据块的类型为结构数据块。
[0018] 可选的,在本申请的另一种可能的实现方式中,本申请实施例中的存储设备还包括接收单元,该接收单元用于接收客户端设备发送的数据访问请求,该数据访问请求包括待存储数据块的逻辑存储地址,该数据访问请求用于请求访问待存储数据块。上述处理单元,还用于响应上述接收单元接收到的数据访问请求,获取与待存储数据块的逻辑存储地址对应的已存储数据块的指纹索引和待存储数据块的元数据在结构数据存储区中的存储地址。上述处理单元,还用于根据待存储数据块的元数据在结构数据存储区中的存储地址获取待存储数据块的元数据。上述处理单元,还用于从指纹桶中获取与已存储数据块的指纹索引对应的已存储数据块的物理存储地址,并根据已存储数据块的物理存储地址,获取已存储数据块;指纹桶用于记录已存储数据块的指纹索引与已存储数据块的物理存储地址之间的对应关系。上述处理单元,还用于按照预设规则,将已存储数据块和待存储数据块的元数据重组,生成待存储数据块。此外,本申请实施例中的存储设备还包括发送单元,该发送单元,用于向客户端设备发送上述处理单元生成的待存储数据块。
[0019] 可选的,在本申请的另一种可能的实现方式中,上述处理单元,具体用于在确定更新后的待存储数据块的指纹值与已存储数据块的指纹值相同,更新后的待存储数据块的压缩策略与已存储数据块的压缩策略相同,且更新后的待存储数据块与已存储数据块逐字节对比完全一致后,确定更新后的待存储数据块与已存储数据块相同。
[0020] 第三方面,提供一种存储设备,该存储设备包括:一个或多个处理器、存储器、通信接口。其中,存储器、通信接口与一个或多个处理器耦合;存储设备通过通信接口与至少一个存储节点通信,存储器用于存储计算机程序代码,计算机程序代码包括指令,当一个或多个处理器执行指令时,存储设备执行如上述第一方面及其各种可能的实现方式所述的数据存储方法。
[0021] 具体的,上述处理器,用于确定待存储数据块的类型为结构数据块。上述存储器,用于在上述处理器确定待存储数据块的类型为结构数据块后,将待存储数据块的元数据保存至结构数据存储区,结构数据存储区用于存储数据块的元数据,待存储数据块包括结构区和数据区,结构区用于存储待存储数据块的元数据,数据区用于存储待存储数据块的用户数据。上述处理器,还用于删除待存储数据块的元数据。上述存储器,还用于在上述处理器删除待存储数据块的元数据后,保存满足结构区的空间大小的多个预设字符至结构区中,得到更新后的待存储数据块。上述处理器,还用于确定更新后的待存储数据块与已存储数据块是否相同,在确定更新后的待存储数据块与已存储数据块相同后,获取待存储数据块的逻辑存储地址和待存储数据块的元数据在结构数据存储区中的存储地址,并从指纹桶中获取已存储数据块的指纹索引。上述存储器,还用于保存上述处理器获取到的待存储数据块的逻辑存储地址、待存储数据块的元数据在结构数据存储区中的存储地址以及已存储数据块的指纹索引之间的对应关系。
[0022] 可选的,在本申请的一种可能的实现方式中,上述处理器,还用于在确定待存储数据块的类型为结构数据块之前,确定待存储数据块中预设位置的数据的数值是否为预设数值,并在确定待存储数据块中预设位置的数据的数值为预设数值后,根据预设的一致性校验算法,对待存储数据块进行一致性校验,确定待存储数据块是否包括结构区和数据区。相应的,上述处理器,具体用于确定待存储数据块包括结构区和数据区后,确定待存储数据块的类型为结构数据块。
[0023] 可选的,在本申请的另一种可能的实现方式中,上述通信接口,用于接收客户端设备发送的数据访问请求,该数据访问请求包括待存储数据块的逻辑存储地址,该数据访问请求用于请求访问待存储数据块。上述处理器,还用于响应上述通信接口接收到的数据访问请求,获取与待存储数据块的逻辑存储地址对应的已存储数据块的指纹索引和待存储数据块的元数据在结构数据存储区中的存储地址。上述处理器,还用于根据待存储数据块的元数据在结构数据存储区中的存储地址获取待存储数据块的元数据。上述处理器,还用于从指纹桶中获取与已存储数据块的指纹索引对应的已存储数据块的物理存储地址,并根据已存储数据块的物理存储地址,获取已存储数据块;指纹桶用于记录已存储数据块的指纹索引与已存储数据块的物理存储地址之间的对应关系。上述处理器,还用于按照预设规则,将已存储数据块和待存储数据块的元数据重组,生成待存储数据块。上述通信接口,还用于向客户端设备发送上述处理器生成的待存储数据块。
[0024] 第四方面,还提供一种计算机可读存储介质,该计算机可读存储介质中存储有指令;当其在存储设备上运行时,使得存储设备执行如上述第一方面及其各种可能的实现方式所述的数据存储方法。
[0025] 第五方面,还提供一种包含指令的计算机程序产品,当其在存储设备上运行时,使得存储设备执行如上述第一方面及其各种可能的实现方式所述的数据存储方法。
[0026] 本申请中第二方面、第三方面、第四方面、第五方面及其各种实现方式的具体描述,可以参考第一方面及其各种实现方式中的详细描述;并且,第二方面、第三方面、第四方面、第五方面及其各种实现方式的有益效果,可以参考第一方面及其各种实现方式中的有益效果分析,此处不再赘述。
[0027] 第六方面,提供一种数据存储方法,存储设备在确定待存储数据块的类型为结构数据块后,将待存储数据块的元数据保存至结构数据存储区,这里,结构数据存储区用于存储数据块的元数据,待存储数据块包括结构区和数据区,结构区用于存储待存储数据块的元数据,数据区用于存储待存储数据块的用户数据;存储设备删除待存储数据块的元数据,并保存满足结构区的空间大小的多个预设字符至结构区,得到更新后的待存储数据块;在确定更新后的待存储数据块与已存储数据块不相同后,存储设备为更新后的待存储数据块分配目标物理存储空间,以存储更新后的待存储数据块;存储设备获取待存储数据块的逻辑存储地址、待存储数据块的元数据在结构数据存储区中的存储地址、更新后的待存储数据块的物理存储地址、更新后的待存储数据块的指纹值、更新后的待存储数据块的指纹引用计数以及更新后的待存储数据块的指纹索引,更新后的待存储数据块的物理存储地址用于指示目标物理存储空间,并将更新后的待存储数据块的指纹值、更新后的待存储数据块的物理存储地址、更新后的待存储数据块的指纹引用计数和更新后的待存储数据块的指纹索引保存至指纹桶中,以及保存待存储数据块的逻辑存储地址、待存储数据块的元数据在结构数据存储区中的存储地址以及更新后的待存储数据块的指纹索引之间的对应关系,这里,指纹桶用于记录已存储数据块的指纹值、已存储数据块的指纹引用计数、已存储数据块的物理存储地址以及已存储数据块的指纹索引之间的对应关系。
[0028] 本申请实施例中的存储设备在确定待存储数据块分为用于存储待存储数据块的元数据的结构区以及用于存储待存储数据块的用户数据的数据区后,也就是说存储设备在确定待存储数据块为结构化数据块后,将待存储数据块的结构区所存储的所述待存储数据块的元数据保存到结构数据存储区中,删除所述待存储数据块的元数据,并保存满足待存储数据块的结构区的空间大小的多个预设字符至待存储数据块的结构区中,得到更新后的待存储数据块。更新后的待存储数据块为非结构化数据块,存储设备利用现有的重删压缩算法处理更新后的待存储数据块。
[0029] 由于存储设备是对更新后的待存储数据块进行重删压缩处理,并未考虑待存储数据块的元数据,避免了由于待存储数据块的元数据中的少数几个字节与已存储数据块的不同而导致待存储数据块无法重删的问题,有效的提高了结构化数据块的重删率,即有效的提高了数据块的重删率。
[0030] 可选的,在本申请的一种可能的实现方式中,存储设备还接收客户端设备发送的数据访问请求,该数据访问请求包括待存储数据块的逻辑存储地址,该数据访问请求用于请求访问待存储数据块;响应数据访问请求,存储设备获取与待存储数据块的逻辑存储地址对应的更新后的待存储数据块的指纹索引和待存储数据块的元数据在结构数据存储区中的存储地址,并根据待存储数据块的元数据在结构数据存储区中的存储地址获取待存储数据块的元数据;存储设备从指纹桶中获取与更新后的待存储数据块的指纹索引对应的更新后的待存储数据块的物理存储地址,并根据更新后的待存储数据块的物理存储地址,获取更新后的待存储数据块;存储设备按照预设规则,将更新后的待存储数据块和待存储数据块的元数据重组,生成待存储数据块,并向客户端设备发送待存储数据块。
[0031] 在存储设备已经存储待存储数据块的基础上,客户端设备可与该存储设备通信,访问待存储数据块。上述第六方面的应用场景中,存储设备将待存储数据的元数据单独存储于结构数据存储区中,将更新后的待存储数据块存储于目标物理存储空间。
[0032] 这样,存储设备在获取到客户端设备发送的数据访问请求后,需要获取更新后的待存储数据块和待存储数据块的元数据,并按照预设规则,将已存储数据块和待存储数据块的元数据重组,生成待存储数据块。
[0033] 可选的,在本申请的另一种可能的实现方式中,上述“确定更新后的待存储数据块与已存储数据块不相同”的方法为:在确定指纹桶中未存在与更新后的待存储数据块的指纹值相同的指纹值,或更新后的待存储数据块的压缩策略与已存储数据块的压缩策略不同,或更新后的待存储数据块与已存储数据块逐字节对比不完全一致后,确定更新后的待存储数据块与已存储数据块不相同。
[0034] 第七方面,提供一种存储设备,该存储设备包括处理单元和存储单元。
[0035] 本申请提供的各个单元模块所实现的功能具体如下:
[0036] 上述处理单元,用于确定待存储数据块的类型为结构数据块。上述存储单元,用于在上述处理单元确定待存储数据块的类型为结构数据块后,将待存储数据块的元数据保存至结构数据存储区,结构数据存储区用于存储数据块的元数据,待存储数据块包括结构区和数据区,结构区用于存储待存储数据块的元数据,数据区用于存储待存储数据块的用户数据。上述处理单元,还用于删除待存储数据块的元数据。上述存储单元,还用于在上述处理单元删除待存储数据块的元数据之后,保存满足结构区的空间大小的多个预设字符至结构区,得到更新后的待存储数据块。上述处理单元,还用于确定更新后的待存储数据块与已存储数据块是否相同,并在确定更新后的待存储数据块与已存储数据块不相同后,为更新后的待存储数据块分配目标物理存储空间,以存储更新后的待存储数据块。上述处理单元,还用于获取待存储数据块的逻辑存储地址、待存储数据块的元数据在结构数据存储区中的存储地址、更新后的待存储数据块的物理存储地址、更新后的待存储数据块的指纹值、更新后的待存储数据块的指纹引用计数以及更新后的待存储数据块的指纹索引,更新后的待存储数据块的物理存储地址用于指示目标物理存储空间。上述存储单元,还用于将上述处理单元获取到的更新后的待存储数据块的指纹值、更新后的待存储数据块的物理存储地址、更新后的待存储数据块的指纹引用计数和更新后的待存储数据块的指纹索引保存至指纹桶中,指纹桶用于记录已存储数据块的指纹值、已存储数据块的指纹引用计数、已存储数据块的物理存储地址以及已存储数据块的指纹索引之间的对应关系。上述存储单元,还用于保存上述处理单元获取到的待存储数据块的逻辑存储地址、待存储数据块的元数据在结构数据存储区中的存储地址以及更新后的待存储数据块的指纹索引之间的对应关系。
[0037] 可选的,在本申请的另一种可能的实现方式中,上述处理单元,还用于在确定待存储数据块的类型为结构数据块之前,确定待存储数据块中预设位置的数据的数值是否为预设数值,并在确定待存储数据块中预设位置的数据的数值为预设数值后,根据预设的一致性校验算法,对待存储数据块进行一致性校验,确定待存储数据块是否包括结构区和数据区。相应的,上述处理单元,具体用于在确定待存储数据块包括结构区和数据区后,确定待存储数据块的类型为结构数据块。
[0038] 可选的,在本申请的另一种可能的实现方式中,本申请实施例提供的存储设备还包括接收单元,该接收单元,用于接收客户端设备发送的数据访问请求,该数据访问请求包括待存储数据块的逻辑存储地址,该数据访问请求用于请求访问待存储数据块。上述处理单元,还用于响应上述接收单元接收到的数据访问请求,获取与待存储数据块的逻辑存储地址对应的更新后的待存储数据块的指纹索引和待存储数据块的元数据在结构数据存储区中的存储地址。上述处理单元,还用于根据待存储数据块的元数据在结构数据存储区中的存储地址获取待存储数据块的元数据。上述处理单元,还用于从指纹桶中获取与更新后的待存储数据块的指纹索引对应的更新后的待存储数据块的物理存储地址,并根据更新后的待存储数据块的物理存储地址,获取更新后的待存储数据块。上述处理单元,还用于按照预设规则,将更新后的待存储数据块和待存储数据块的元数据重组,生成待存储数据块。此外,本申请实施例提供的存储设备还包括发送单元,该发送单元用于向客户端设备发送处理单元生成的待存储数据块。
[0039] 可选的,在本申请的另一种可能的实现方式中,上述处理单元,具体用于在确定指纹桶中未存在与更新后的待存储数据块的指纹值相同的指纹值,或更新后的待存储数据块的压缩策略与已存储数据块的压缩策略不同,或更新后的待存储数据块与已存储数据块逐字节对比不完全一致后,确定更新后的待存储数据块与已存储数据块不相同。
[0040] 第八方面,提供一种存储设备,该存储设备包括:一个或多个处理器、存储器、通信接口。其中,存储器、通信接口与一个或多个处理器耦合;存储设备通过通信接口与至少一个存储节点通信,存储器用于存储计算机程序代码,计算机程序代码包括指令,当一个或多个处理器执行指令时,存储设备执行如上述第六方面及其各种可能的实现方式所述的数据存储方法。
[0041] 具体的,上述处理器,用于确定待存储数据块的类型为结构数据块。上述存储器,用于在上述处理器确定待存储数据块的类型为结构数据块后,将待存储数据块的元数据保存至结构数据存储区,结构数据存储区用于存储数据块的元数据,待存储数据块包括结构区和数据区,结构区用于存储待存储数据块的元数据,数据区用于存储待存储数据块的用户数据。上述处理器,还用于删除待存储数据块的元数据。上述存储器,还用于在上述处理器删除待存储数据块的元数据之后,保存满足结构区的空间大小的多个预设字符至结构区,得到更新后的待存储数据块。上述处理器,还用于确定更新后的待存储数据块与已存储数据块是否相同,并在确定更新后的待存储数据块与已存储数据块不相同后,为更新后的待存储数据块分配目标物理存储空间,以存储更新后的待存储数据块。上述处理器,还用于获取待存储数据块的逻辑存储地址、待存储数据块的元数据在结构数据存储区中的存储地址、更新后的待存储数据块的物理存储地址、更新后的待存储数据块的指纹值、更新后的待存储数据块的指纹引用计数以及更新后的待存储数据块的指纹索引,更新后的待存储数据块的物理存储地址用于指示目标物理存储空间。上述存储器,还用于将上述处理器获取到的更新后的待存储数据块的指纹值、更新后的待存储数据块的物理存储地址、更新后的待存储数据块的指纹引用计数和更新后的待存储数据块的指纹索引保存至指纹桶中,指纹桶用于记录已存储数据块的指纹值、已存储数据块的指纹引用计数、已存储数据块的物理存储地址以及已存储数据块的指纹索引之间的对应关系。上述存储器,还用于保存上述处理器获取到的待存储数据块的逻辑存储地址、待存储数据块的元数据在结构数据存储区中的存储地址以及更新后的待存储数据块的指纹索引之间的对应关系。
[0042] 可选的,在本申请的另一种可能的实现方式中,上述处理器,还用于在确定待存储数据块的类型为结构数据块之前,确定待存储数据块中预设位置的数据的数值是否为预设数值,并在确定待存储数据块中预设位置的数据的数值为预设数值后,根据预设的一致性校验算法,对待存储数据块进行一致性校验,确定待存储数据块是否包括结构区和数据区。相应的,上述处理器,具体用于在确定待存储数据块包括结构区和数据区后,确定待存储数据块的类型为结构数据块。
[0043] 可选的,在本申请的另一种可能的实现方式中,上述通信接口,用于接收客户端设备发送的数据访问请求,该数据访问请求包括待存储数据块的逻辑存储地址,该数据访问请求用于请求访问待存储数据块。上述处理器,还用于响应上述接收器接收到的数据访问请求,获取与待存储数据块的逻辑存储地址对应的更新后的待存储数据块的指纹索引和待存储数据块的元数据在结构数据存储区中的存储地址。上述处理器,还用于根据待存储数据块的元数据在结构数据存储区中的存储地址获取待存储数据块的元数据。上述处理器,还用于从指纹桶中获取与更新后的待存储数据块的指纹索引对应的更新后的待存储数据块的物理存储地址,并根据更新后的待存储数据块的物理存储地址,获取更新后的待存储数据块。上述处理器,还用于按照预设规则,将更新后的待存储数据块和待存储数据块的元数据重组,生成待存储数据块。上述通信接口,还用于向客户端设备发送处理器生成的待存储数据块。
[0044] 可选的,在本申请的另一种可能的实现方式中,上述处理器,具体用于在确定指纹桶中未存在与更新后的待存储数据块的指纹值相同的指纹值,或更新后的待存储数据块的压缩策略与已存储数据块的压缩策略不同,或更新后的待存储数据块与已存储数据块逐字节对比不完全一致后,确定更新后的待存储数据块与已存储数据块不相同。
[0045] 第九方面,还提供一种计算机可读存储介质,该计算机可读存储介质中存储有指令;当其在存储设备上运行时,使得存储设备执行如上述第六方面及其各种可能的实现方式所述的数据存储方法。
[0046] 第十方面,还提供一种包含指令的计算机程序产品,当其在存储设备上运行时,使得存储设备执行如上述第六方面及其各种可能的实现方式所述的数据存储方法。
[0047] 在本申请中,上述存储的名字对设备或功能模块本身不构成限定,在实际实现中,这些设备或功能模块可以以其他名称出现。只要各个设备或功能模块的功能和本申请类似,属于本申请权利要求及其等同技术的范围之内。
[0048] 本申请中第七方面、第八方面、第九方面、第十方面及其各种实现方式的具体描述,可以参考第六方面及其各种实现方式中的详细描述;并且,第七方面、第八方面、第九方面、第十方面及其各种实现方式的有益效果,可以参考第六方面及其各种实现方式中的有益效果分析,此处不再赘述。
[0049] 可选的,在上述第一方面及其任意一种可能实现的方式中,或者,在上述第六方面及其任意一种可能实现的方式中,在“确定待存储数据块的类型为结构数据块”之前,存储设备还确定待存储数据块中预设位置的数据的数值是否为预设数值。在确定待存储数据块中预设位置的数据的数值为预设数值之后,存储设备根据预设的一致性校验算法,对待存储数据块进行一致性校验,确定待存储数据块是否包括结构区和数据区。
[0050] 相应的,当存储设备确定待存储数据块包括结构区和数据区后,即可确定待存储数据块的类型为结构数据块。也就是说,上述“确定待存储数据块的类型为结构数据块”的方法为:确定待存储数据块包括结构区和数据区后,确定待存储数据块的类型为结构数据块。
[0051] 一般的,结构化数据块分为结构区和数据区。结构区用于存储描述这个结构化数据块本身的特征信息,例如块类型、块编号、数据块的更新时间等。数据区用于存储实际的业务数据,即存储用户数据。非结构化数据块无特定结构。因此,存储设备可基于结构化数据块的特定结构,判断待存储数据块的类型是否为结构化数据块。
[0052] 结构化数据块有特定结构,结构化数据块中的某一固定位置的数值可能归属于某一固定数据范围内,也可能为某一固定数值。具体的,存储设备通过判断待存储数据块中预设位置的数值是否为预设数值可初步确定待存储数据块是否为某一类型的结构化数据块。为了提升判断的准确性,存储设备可进一步结合预设的一致性校验算法来准确确定待存储数据块是否可分为结构区和数据区,即确定待存储数据块的类型是否为结构化数据块。
[0053] 本申请的这些方面或其他方面在以下的描述中会更加简明易懂。
[0054] 本申请提供一种数据存储方法及存储设备,存储设备在确定待存储数据块分为用于存储待存储数据块的元数据的结构区以及用于存储待存储数据块的用户数据的数据区后,也就是说存储设备在确定待存储数据块为结构化数据块后,将待存储数据块的结构区所存储的所述待存储数据块的元数据保存到结构数据存储区中,删除所述待存储数据块的元数据,并保存满足待存储数据块的结构区的空间大小的多个预设字符至待存储数据块的结构区中,得到更新后的待存储数据块。更新后的待存储数据块为非结构化数据块,存储设备利用现有的重删压缩算法处理更新后的待存储数据块。由于存储设备是对更新后的待存储数据块进行重删压缩处理,并未考虑待存储数据块的元数据,避免了由于待存储数据块的元数据中的少数几个字节与已存储数据块的不同而导致待存储数据块无法重删的问题,有效的提高了结构化数据块的重删率,即有效的提高了数据块的重删率。

附图说明

[0055] 图1为本申请实施例提供的结构化数据块的结构示意图;
[0056] 图2为本申请实施例提供的一种通用计算机设备的硬件结构示意图;
[0057] 图3为本申请实施例提供的一种通用计算机设备的逻辑结构示意图;
[0058] 图4为本申请实施例提供的一种数据存储系统的结构示意图;
[0059] 图5为本申请实施例提供的存储设备的结构示意图一;
[0060] 图6为本申请实施例提供的数据存储方法的流程示意图一;
[0061] 图7为本申请实施例提供的存储设备生成第一数据块的流程示意图;
[0062] 图8为本申请实施例提供的数据存储方法的流程示意图二;
[0063] 图9为本申请实施例提供的存储设备的结构示意图二。

具体实施方式

[0064] 在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
[0065] 本申请的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。例如,第一数据块和第二数据块等是用于区别不同的数据块,而不是用于描述数据块的特定顺序。
[0066] 在本申请实施例的描述中,除非另有说明,“多个”的含义是指两个或者两个以上,例如,多个结构区是指两个或者两个以上的结构区,多个数据块是指两个或者两个以上的数据块等。
[0067] 为了方便理解本申请实施例,首先在此介绍本申请实施例中涉及到的一些术语和名词。
[0068] 数据块:是主存储器与输入、输出设备,或与外存储器之间进行传输的一个数据单位。数据块的大小可以是固定的,也可以是可变的。本申请实施例主要以大小为4KB或8KB的数据块为例进行说明。
[0069] 数据块的指纹:是数据块的唯一标识,用于索引数据块。目前,主要将基于第五版消息摘要算法(Message Digest Algorithm MD5,MD5)对数据块进行运算后获得的值或基于安全散列算法(Secure Hash Algorithm 1,SHA-1)对数据块进行运算获得的散列值作为所述数据块的指纹。
[0070] 结构化数据:是指具有特定结构,严格地遵循数据格式和长度规范、占用一定存储空间的数据。结构化数据主要用于数据库类应用,存放于数据块中。单个结构、大小相同的结构化数据被称为结构化数据块。结构化数据块的大小固定(比如4KB、8KB),每个结构化数据块的结构固定,分为结构区和数据区。结构区用于存储描述这个结构化数据块本身的特征信息,例如块类型、块编号、数据块的更新时间等。数据区用于存储实际的业务数据,即存储用户数据。可选的,对于现有的结构化数据块而言,某些结构化数据块包括一个结构区,某些结构化数据块包括至少两个结构区。
[0071] 在一个示例中,如图1中的(a)所示,Oracle数据库的结构化数据块包括两个结构区(结构区1和结构区2)和一个数据区,结构区1占用该结构化数据块的前68个字节,结构区2占用该结构化数据块的最后4个字节,数据区为该结构化数据块中除去结构区1和结构区2的部分。
[0072] 在另一个示例中,如图1中的(b)所示,SQL Server数据库的结构化数据块的大小为8KB,每个结构化数据包括一个结构区和一个数据区,所述结构区占用该结构化数据块的前96个字节,数据区为该结构化数据块中除去结构区的部分。
[0073] 对于同一应用而言,该应用中的所有结构化数据块的结构均相同。也就是说,同一应用中,不同结构化数据块的结构区和数据区的大小均相同。
[0074] 示例性的,结构化数据块A与结构化数据块B均属于SQL Server数据库的结构化数据块,则结构化数据块A和结构化数据块B均包括一个结构区和一个数据区,且结构化数据块A的结构区的大小与结构化数据块B的结构区的大小相同,结构化数据块A的数据区的大小与结构化数据块B的数据区的大小相同。
[0075] 非结构化数据:是指格式无规律,数据长度不固定的数据。非结构化数据可以为办公文档、报表文件、图片文件、视频文件、音频文件等。非结构化数据可以按照4KB/8KB的粒度切分为数据块,该数据块称为非结构化数据块。非结构化数据块无特定结构,其存储的数据均为用户数据。
[0076] 重复数据删除技术:用于删除重复出现的数据块,其核心功能是存储设备在存储待存储数据块时,比较待存储数据块和已经存储的多个数据块,如果已经存储的多个数据块中存在与待存储数据块相同的数据块,说明该待存储数据块已经保存,存储设备通过指针或者指纹引用该待存储数据块,反之,保存该待存储数据块。
[0077] 实现数据块级重复数据删除技术时,删除数据的粒度较小,重复的数据块多,数据重删率越高。本申请实施例基于数据块级重复数据删除场景说明数据存储方法。
[0078] 数据压缩(Data Compression)技术:是指在数据处理时通过压缩数据量减少数据的存储空间或在一定存储空间内增加存储的数据量的技术。存储设备通常采用消除数据间隙、空字段、冗余信息以及不必要数据的方法缩短数据块的长度,以提高存储空间的利用率。数据压缩技术分为无损压缩和有损压缩两种。常用的无损压缩方法有:霍夫曼(Huffman)编码、算术编码、游程长度编码以及香农-范诺(Fano-Shannon)编码等。常用的有损压缩方法有:预测编码、变换编码以及混合编码等。
[0079] 通常,存储设备将重复数据删除技术和数据压缩技术配合起来一起使用,可有效的提高存储空间的利用率,并提高存储效率。
[0080] 可选的,上述存储设备可以理解为通用计算机设备。请参见图2,图2为本申请实施例提供的一种通用计算机设备的硬件结构示意图。
[0081] 如图2所示,本申请实施例中的通用计算机设备包括处理器20、存储器21以及通信接口22。处理器20、存储器21以及通信接口22通过总线23通信。
[0082] 该通用计算机设备通过通信接口22与其他设备通信。
[0083] 处理器20包括N(N≥1)个处理器内核(内核1、……、内核k、……、内核N),例如至少一个中央处理器(Central Processing Unit,CPU)等,每一个CPU可以是一个单核处理器(single-CPU),也可以是一个多核处理器(multi-CPU)。多个处理器内核可以分时,也可以同时读取存储器21中存储的数据。
[0084] 存储器21为存储介质,该存储器21可以存储数据、软件程序以及模块等。存储器21可以为硬盘(Hard Disk Drive,HDD)、固态硬盘(Solid-State Drive,SSD)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由处理器20存取的任何其他介质,但不限于此。存储器21包括用户数据存储区210、指纹桶211、数据块地址映射表212以及结构数据存储区213。
[0085] 用户数据存储区210用于存储经过重复数据删除处理和数据压缩处理后剩下的不重复的数据块。
[0086] 指纹桶211包括已存储数据块的指纹值、所述已存储数据块的指纹引用计数、所述已存储数据块的物理存储地址以及所述已存储数据块的指纹索引,指纹桶211用于记录已存储数据块的指纹值、所述已存储数据块的指纹引用计数、所述已存储数据块的物理存储地址以及所述已存储数据块的指纹索引之间的对应关系。
[0087] 这里,已存储数据块的指纹引用计数用于表示该指纹值的数据块被共享的次数,初始值为1。已存储数据块的指纹索引用于标识所述已存储数据块在指纹桶中的位置。
[0088] 可选的,指纹桶211可以采用映射关系表的形式体现,也可以采用其他能够用于表现对应关系的形式体现,本申请实施例对此不作具体限定。
[0089] 数据块地址映射表212包括已存储数据块的指纹索引、所述已存储数据块的元数据在结构数据存储区213中的存储地址以及所述已存储数据块的逻辑存储地址。
[0090] 数据块地址映射表212用于记录已存储数据块的指纹索引、所述已存储数据块的元数据在结构数据存储区213中的存储地址以及所述已存储数据块的逻辑存储地址之间的对应关系。
[0091] 需要说明的是,数据块地址映射表仅仅是一个名称,并不限定于数据块地址映射表为表格的形式。
[0092] 可选的,本申请实施例中的数据块地址映射表可以采用表格的形式体现,也可以以其他能够用于表征已存储数据块的指纹索引、所述已存储数据块的元数据在结构数据存储区中的存储地址以及所述已存储数据块的逻辑存储地址之间的对应关系的形式体现,本申请实施例对此不作具体限定。
[0093] 为了便于描述,本申请实施例以数据块地址映射表记录已存储数据块的指纹索引、所述已存储数据块的元数据在结构数据存储区213中的存储地址以及所述已存储数据块的逻辑存储地址之间的对应关系为例进行说明。
[0094] 一般的,在访问某一已存储数据块(以待访问数据块为例)的应用场景中,处理器20读取数据块地址映射表212,以获取待访问数据块的元数据在结构数据存储区213中的存储地址和待访问数据块的指纹索引,这样,处理器20能够根据待访问数据块的元数据在结构数据存储区213中的存储地址获取到该待访问数据块的元数据,并根据待访问数据块的指纹索引从指纹桶211中获取到待访问数据块的物理存储地址,以获取待访问数据块的用户数据。
[0095] 结构数据存储区213用于存储已存储的结构化数据块的元数据。对于非结构化数据块而言,所述非结构化数据块没有包括其元数据,因此,所述非结构化的元数据在结构数据存储区213中的存储地址为零。
[0096] 基于上述图2示出的通用计算机设备的硬件结构,图2示出的通用计算机设备的操作系统可以为Linux操作系统,也可以为其他操作系统,本申请实施例对此不作具体限定。
[0097] 图3示出了图2所示的通用计算机设备的逻辑结构示意图。如图3所示,图2中的通用计算机设备内置有M(M≥1)个应用程序(应用程序1、……、应用程序k、……、应用程序M),每个应用程序被安装在计算机设备的操作系统中。
[0098] 这里的应用程序可以是计算机设备自身内置的应用程序,也可以是用户自行安装的第三方服务商提供的应用程序,本申请实施例对此不作具体限定。每个应用程序可以在上述处理器20上运行。每个应用程序在运行中,可在存储器21中存储数据块,也可通过文件系统访问存储器21中存储的数据。
[0099] 图2示出的通用计算机设备可视为能够实现重复数据删除和数据压缩处理的数据存储系统。相应的,图2为本申请实施例中一种数据存储系统的结构示意图。
[0100] 实际应用中,能够实现重复数据删除和数据压缩处理的数据存储系统也可以包括客户端设备和存储设备。请参见图4,图4为本申请实施例提供的另一种数据存储系统的结构示意图。
[0101] 如图4所示,本申请实施例提供的数据存储系统包括客户端设备40以及存储设备41。存储设备41用于保存数据,能够实现重复数据删除和数据压缩处理,以提高该存储设备
41的存储空间的利用率。客户端设备40与存储设备41通信,能够访问存储设备41存储的数据,也可向存储设备41发送存储命令。客户端设备40与存储设备41可以部署于同一设备上,也可以独立部署,本申请实施例对此不作具体限定。
[0102] 特别的,若客户端设备40与存储设备41部署于同一设备,则该设备为图2示出的通用计算机设备。在这种情况下,图4示出的数据存储系统指通用计算机设备。
[0103] 现以客户端设备40与存储设备41独立部署为例进行说明。
[0104] 客户端设备40可以为任一内置有至少一个应用程序的计算机设备,每个应用程序被安装在客户端设备40的操作系统中。这里的应用程序可以是客户端设备自身内置的应用程序,也可以是用户自行安装的第三方服务商提供的应用程序,本申请实施例对此不作具体限定。每个应用程序在运行中,通过文件系统访问存储设备41中存储的数据。客户端设备40的操作系统可以为Linux系统,也可以为其他操作系统,本申请实施例对此不作具体限定。
[0105] 该客户端设备40的硬件结构与图2示出的通用计算机设备的硬件结构类似,此处不再进行详细赘述。
[0106] 存储设备41可以为存储阵列,也可以为用于提供存储服务的其他任一设备,本申请实施例对此不作具体限定。
[0107] 存储设备41将数据、软件程序等存储于存储介质中。存储介质可以为磁盘存储介质或者其他存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由客户端设备存取的任何其他介质,但不限于此。
[0108] 为了便于说明,下文均以客户端设备40和存储设备41独立部署为例进行说明。
[0109] 现有的数据存储的方法为:对于结构化数据块和非结构化数据块而言,存储设备41均以大小为4KB或8KB的数据块为重删粒度。对于每个数据块而言,存储设备41均按照上述重复数据删除技术和上述数据压缩技术处理。当已经存储的数据块中存在与待存储数据块相同的数据块,二者采用的压缩策略相同,且二者逐字节对比完全一致时,则说明待存储数据块为重复出现的数据块,存储设备41通过指针或指纹引用该待存储数据块,反之,存储设备41存储该待存储数据块。由于结构化数据块的结构固定,且每个结构化数据块均包括各自的元数据。元数据中少数几个字节的不同会导致整个结构化数据块无法删除,从而降低了结构化数据块的重删率。
[0110] 本申请实施例提供的数据存储方法中,存储设备41识别待存储数据块的类型,在确定待存储数据块的类型为结构化数据块后,将所述待存储数据块的结构区所存储的所述待存储数据块的元数据保存到结构数据存储区中,删除所述待存储数据块的元数据,并保存满足所述待存储数据块的结构区的空间大小的多个预设字符至所述待存储数据块的结构区中,得到更新后的待存储数据块。更新后的待存储数据块为非结构化数据块,存储设备41采用现有的重复数据删除技术和数据压缩技术处理更新后的待存储数据块。由于存储设备41是对更新后的待存储数据块进行重删压缩处理,并未考虑所述待存储数据块的元数据,避免了由于所述待存储数据块的元数据中的少数几个字节与已存储数据块的不同而导致所述待存储数据无法重删的问题。与现有的数据存储方法相比,本申请实施例提供的数据存储方法能够有效的提高结构化数据块的重删率,即有效的提高数据块的重删率。
[0111] 结合上述对结构化数据的描述可知,在同一应用中,不同结构化数据块的结构相同。一般的,存储设备对归属于同一应用的结构化数据块的处理过程相同。因此,对于同一应用的不同结构化数据块而言,本申请实施例中的存储设备保存满足数据块的结构区的空间大小的多个预设字符相同。这样,如果同一应用的两个结构化数据块的用户数据也相同,则这两个结构化数据块为相同的数据块。
[0112] 请参见图5,图5为本申请实施例提供的存储设备41的结构示意图。如图5所示,本申请实施例提供的存储设备41包括:通信接口51和控制模块52。通信接口51与控制模块52连接。在存储设备41中,通信接口51用于与客户端设备或者其他存储设备通信。
[0113] 控制模块52用于在确定待存储数据块的类型为结构化数据块后,将所述待存储数据块的元数据保存至结构数据存储区,删除所述待存储数据块的元数据,并保存满足所述待存储数据块的结构区的空间大小的多个预设字符至所述待存储数据块的结构区,得到更新后的待存储数据块。
[0114] 控制模块52还用于采用现有的重复数据删除技术和数据压缩技术处理更新后的待存储数据块,以及在数据块地址映射表中保存所述待存储数据块的逻辑存储地址、所述待存储数据块的元数据在所述结构数据存储区中的存储地址和所述已存储数据块的指纹索引。
[0115] 如图5所示,控制模块52包括处理器521和存储器522。处理器521和存储器522连接。通信接口51、处理器521和存储器522可以通过系统总线53连接。存储器522可以是独立存在的,通过系统总线53与处理器521相连接。存储器522也可以和处理器521集成在一起。
[0116] 处理器521用于确定待存储数据块的类型是否为结构化数据块。
[0117] 所述处理器521还用于在待存储数据块的类型为结构化数据的情况下,将所述待存储数据块的元数据保存至结构数据存储区,并保存满足所述待存储数据块的结构区的空间大小的多个预设字符至所述待存储数据块的结构区,得到更新后的待存储数据块。
[0118] 所述处理器521还用于采用现有的重复数据删除技术和数据压缩技术处理更新后的待存储数据块。所述处理器521还用于将所述待存储数据块的逻辑存储地址、所述待存储数据块的元数据在所述结构数据存储区中的存储地址和所述已存储数据块的指纹索引保存至存储器522中的数据块地址映射表中。
[0119] 存储器522用于存储数据块。存储器522还用于存储软件程序以及应用模块,处理器521通过运行存储在存储器522的软件程序以及应用模块,从而执行存储设备41的各种功能应用以及数据处理。
[0120] 存储器522主要包括存储程序区5221和存储数据区5222。其中,存储程序区5221可存储操作系统、至少一个功能所需的应用程序,比如确定是否为重复的数据块等。存储数据区5222可存储数据块的用户数据以及数据块的元数据等。
[0121] 处理器521可以是任何计算器件,可以是通用中央处理器(CPU),微处理器,可编程控制器,特定应用集成电路(Application-Specific Integrated Circuit,ASIC),或一个或多个用于控制以上方案程序执行的集成电路。处理器521是存储设备41的控制中心。处理器521利用各种接口和线路连接存储设备41的各个部分,通过运行或执行存储在存储器522内的软件程序和/或应用模块,执行存储设备41的各种功能和处理数据,从而对存储设备41进行整体监控。在具体实现中,作为一种实施例,处理器可以包括一个或多个CPU,例如图5中的处理器包括CPU 0和CPU 1。
[0122] 存储器522可以包括易失性存储器(Volatile Memory),例如,随机存取存储器(Random-Access Memory,RAM);该存储器522也可以包括非易失性存储器(non-volatile memory),例如,只读存储器(Read-Only Memory,ROM),快闪存储器(Flash Memory),硬盘(Hard Disk Drive,HDD)、固态硬盘(Solid-State Drive,SSD)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由网络设备存取的任何其他介质,但不限于此。
[0123] 系统总线53可以是外设部件互连标准(Peripheral Component Interconnect,PCI)总线或扩展工业标准结构(Extended Industry Standard Architecture,EISA)总线等。
[0124] 系统总线53可以分为地址总线、数据总线、控制总线等。本申请实施例中为清楚说明,在图5中将各种总线都示意为系统总线53。
[0125] 下面结合图4和图5所示的存储设备41的结构,详细描述存储设备41的各个部分在本申请中的作用。
[0126] 在本申请实施例中,通信接口51用于与客户端设备40通信,以获取待存储数据块,或向客户端设备40发送待访问数据块。
[0127] 本申请中,处理器521用于确定待存储数据块的类型是否为结构化数据块。
[0128] 处理器521还用于在待存储数据块的类型为结构化数据块的情况下,将所述待存储数据块的元数据保存至结构数据存储区,并保存满足所述待存储数据块的结构区的空间大小的多个预设字符至所述待存储数据块的结构区,得到更新后的待存储数据块,以及采用现有的重复数据删除技术和数据压缩技术处理更新后的待存储数据块,即当确定更新后的待存储数据块的指纹值与已存储数据块的指纹值相同,更新后的待存储数据块的压缩策略与已存储数据块的压缩策略相同,且更新后的待存储数据块与已存储数据块逐字节对比完全一致时,将已存储数据块的指纹引用计数加一。
[0129] 处理器521还用于获取所述待存储数据块的逻辑存储地址、所述待存储数据块的元数据在所述结构数据存储区中的存储地址和所述已存储数据块的指纹索引,并将获取到的所述待存储数据块的逻辑存储地址、所述待存储数据块的元数据在所述结构数据存储区中的存储地址和所述已存储数据块的指纹索引保存至数据块地址映射表中。
[0130] 本申请提供的数据存储方法中,存储设备41的处理器521在确定待存储数据块的类型为结构化数据块后,将所述待存储数据的结构区所存储的所述待存储数据块的元数据保存到结构数据存储区中,删除所述待存储数据块的元数据,并保存满足所述待存储数据块的结构区的空间大小的多个预设字符至所述待存储数据块的结构区中,得到更新后的待存储数据块。更新后的待存储数据块为非结构化数据块,存储设备41的处理器521利用现有的重删压缩算法处理更新后的待存储数据块。由于存储设备41是对更新后的待存储数据块进行重删压缩处理,并未考虑待存储数据块的元数据,避免了由于待存储数据块的元数据中的少数几个字节与已存储数据块的不同而导致待存储数据块无法重删的问题,有效的提高了结构化数据块的重删率,即有效的提高了数据块的重删率。
[0131] 下面结合图1所示的结构化数据块的结构,图4所示的数据存储系统的结构示意图,图5所示的存储设备41的结构示意图对本申请提供的数据存储方法进行详细的描述。
[0132] 具体的,请参见图6,图6为本申请实施例提供的一种数据存储方法的流程示意图。如图6所示,本实施例提供的数据存储方法中,S601由图4所示的客户端设备40执行,具体可由客户端设备40中的处理器执行。另外,S602~S617由图4或图5所示的存储设备41执行,具体可由图5所示的存储设备41中的控制模块52或者图5所示的控制模块52中的处理器521执行。
[0133] 为了便于描述,本申请实施例以更新后的待存储数据块称为第一数据块,与第一数据块的指纹值相同、且已经存储的数据块称为第二数据块为例进行说明。
[0134] 如图6所示,本申请实施例提供的数据存储方法具体包括如下步骤。
[0135] S601、客户端设备40向存储设备41发送存储请求,该存储请求包括待存储数据块和待存储数据块的逻辑存储地址。
[0136] 可选的,客户端设备可以采用不同的消息分别向存储设备41发送待存储数据块和待存储数据块的逻辑存储地址,也可以采用同一消息向存储设备41发送待存储数据块和待存储数据块的逻辑存储地址,本申请实施例对此不作具体限定。
[0137] S602、存储设备41判断待存储数据块的类型是否为结构化数据块。
[0138] 若存储设备41确定待存储数据块的类型为结构化数据块,则该存储设备41从S603顺序执行。
[0139] 若存储设备41确定待存储数据块的类型为非结构化数据块,则存储设备41采用现有的重复数据删除技术和数据压缩技术处理待存储数据块。
[0140] 具体的,若待存储数据块为非结构化数据块,则存储设备41执行的步骤可以参考下述S605~S617。
[0141] 需要说明的是,下述S605~S617中描述的是待存储数据块为结构化数据块的场景中,存储设备41处理的对象是第一数据块,而在待存储数据块为非结构化数据的场景中,参照步骤S605~S617实现时,与待存储数据块为结构化数据块的场景不同的是,存储设备41处理的对象是待存储数据块,由于对非结构化数据块进行处理的技术属于现有技术,这里不再单独进行详细赘述,具体实现时可以参照S605~S617的部分细节。
[0142] 从上面描述可知,结构化数据块分为结构区和数据区。结构区用于存储描述这个结构化数据块本身的特征信息,例如块类型、块编号、数据块的更新时间等。数据区用于存储实际的业务数据,即存储用户数据。非结构化数据块无特定结构。因此,存储设备41可基于结构化数据块的特定结构,判断待存储数据块的类型是否为结构化数据块。
[0143] 结构化数据块有特定结构,结构化数据块中的某一固定位置的数值可能归属于某一固定数据范围内,也可能为某一固定数值。具体的,存储设备41通过判断待存储数据块中预设位置的数值是否为预设数值可初步确定待存储数据块是否为某一类型的结构化数据块。为了提升判断的准确性,存储设备可进一步结合预设的一致性校验算法来准确确定待存储数据块是否可分为结构区和数据区,即确定待存储数据块的类型是否为结构化数据块。
[0144] 在一个示例中,Oracle数据库的结构化数据块的0x00位置的数值归属于0x0~0x40范围内,0x01位置的数值用于表示该结构化数据块的大小,其数值为0x82或0xA2。当
0x01位置的数值为0x82时,说明该结构化数据块的大小为4KB。当0x01位置的数值为0xA2时,说明该结构化数据块的大小为8KB。当0x01位置的数值为0x82时,该数据块的0x00位置的数值为0x0ffd,0x0E位置的数值为0x0ffc,0x08位置的数值为0x0ffe,0x09位置的数值为
0x0fff。当0x01位置的数值为0xA2时,该数据块的0x00位置的数值为0x1ffd,0x0E位置的数值为0x1ffc,0x08位置的数值为0x1ffe,0x09位置的数值为0x1fff。
[0145] 若存储设备41支持Oracle数据库,则存储设备判断待存储数据块的0x00位置的数值是否归属于0x0~0x40范围内,0x01位置的数值是否为0x82或0xA2。若待存储数据块的0x00位置的数值不归属于0x0~0x40范围内,或者待存储数据块的0x01位置的数值不是
0x82,也不是0xA2,则说明该待存储数据块不属于Oracle数据库的结构化数据块。若待存储数据块的0x00位置的数值归属于0x0~0x40范围内,且待存储数据块的0x01位置的数值为
0x82或0xA2,则存储设备41可初步确定该待存储数据块可能属于Oracle数据库的结构化数据块。
[0146] 在存储设备41初步确定该待存储数据块可能属于Oracle数据库的结构化数据块的情况下,为了提升判断的准确性,存储设备41对待存储数据块进行一致性校验。
[0147] 具体的,在待存储数据块的0x01位置的数值为0x82时,存储设备41判断待存储数据块中0x00位置的数值是否为0x0ffd、0x0E位置的数值是否为0x0ffc、0x08的位置的数值是否为0x0ffe、以及0x09位置的数值是否为0x0fff。若上述条件均满足,则存储设备41确定待存储数据块为大小为4KB的Oracle数据库的结构化数据块。若上述条件中有任意一个不满足,则存储设备41确定该待存储数据块不为Oracle数据库的结构化数据块。在待存储数据块的0x01的位置的数值为0xA2时,存储设备41判断待存储数据块中0x00位置的数值是否为0x1ffd、0x0E位置的数值是否为0x1ffc、0x08位置的数值是否为0x1ffe、以及0x09位置的数值是否为0x1fff。若上述判断条件均满足,则存储设备41确定待存储数据块为大小为8KB的Oracle数据库的结构化数据块。若上述判断条件中有任意一个不满足,则存储设备41确定该待存储数据块不为Oracle数据库的结构化数据块。
[0148] 在另一个示例中,SQL Server数据库的结构化数据块的0x00位置的数值为1,0x01位置的数值归属于1~11范围内,0x02位置的数值归属于0~4范围内。
[0149] 若存储设备41支持SQL Server数据库,则存储设备判断待存储数据块的0x00位置的数值是否为1,0x01位置的数值是否归属于1~11范围内,0x02位置的数值是否归属于0~4范围内。若上述条件中有任意一个不满足,则说明该待存储数据块不属于SQL Server数据库的结构化数据块。若上述条件均满足,则存储设备41可初步确定该待存储数据块可能属于SQL Server数据库的结构化数据块。在存储设备41初步确定该待存储数据块可能属于SQL Server数据库的结构化数据块的情况下,为了提升判断的准确性,对待存储数据块进行一致性校验。
[0150] 具体的,存储设备41将待存储数据块中除0x3c~0x3f位置以外的数据以4个字节为单位进行异或运算,计算结果与0x3c~0x3f位置的数值进行一致性校验。如果计算结果与0x3c~0x3f位置的数值一致,则说明待存储数据块为SQL Server数据库的结构化数据块。如果计算结果与0x3c~0x3f位置的数值不一致,则说明待存储数据块不是SQL Server数据库的结构化数据块。
[0151] 从上面描述可知,结构化数据块的结构区用于存储待存储数据块的元数据,数据区用于存储待存储数据块的用户数据。不同结构化数据块的结构区的设置不同。
[0152] 在存储设备41确定待存储数据块为结构化数据块后,存储设备41根据相应设置规则即可确定待存储数据块的结构区和数据区。
[0153] 在一个示例性中,结合上述图1中的(a),若待存储数据块为Oracle数据库的结构化数据块,则存储设备41确定待存储数据块的前68个字节为结构区1,待存储数据块的最后4个字节为结构区2,待存储数据块中除去结构区1和结构区2后剩余的部分为数据区。
[0154] 在另一个示例中,结合上述图1中的(b),若待存储数据块为SQL Server数据库的结构化数据块,则存储设备41确定待存储数据块的前96个字节为结构区,待存储数据块中除去结构区的部分为数据区。
[0155] 此外,从上述描述可知,结构数据存储区用于存储已存储的结构化数据块的元数据。存储设备41从S601的存储请求中获取到待存储数据块后,将其获取到的待存储数据块在结构数据存储区的存储位置初始化为零,便于实际应用中的程序实现。
[0156] S603、存储设备41将待存储数据块的元数据保存至结构数据存储区。
[0157] 从上面描述可知,本申请中结构数据存储区用于存储数据块的元数据。存储设备41在确定待存储数据块为结构化数据块,且确定出待存储数据块的结构区和数据区后,该存储设备41将待存储数据块的元数据保存至结构数据存储区。也就是说,存储设备41在结构数据存储区中为待转移数据块的结构区中存储的待转移数据块的元数据分配一定存储空间,并在分配的存储空间中存储待转移数据块的元数据。
[0158] 需要说明的是,若待存储数据块包括多个结构区,则存储设备41将待存储数据块的每个结构区所存储的待存储数据块的元数据合并存储至结构数据存储区。
[0159] 可以理解的是,由于非结构化数据块未包括其元数据,因此,对于非结构化数据块而言,本申请实施例中非结构化数据块在结构数据存储区的地址为0。
[0160] S604、存储设备41删除待存储数据块的元数据,并保存满足待存储数据块的结构区的空间大小的多个预设字符至待存储数据块的结构区中,得到第一数据块。
[0161] 具体的,存储设备41在将待存储数据块的元数据保存至转构数据存储区中后,删除待存储数据块的元数据,并在待存储数据块的结构区中填充满足该待存储数据块的结构区的空间大小的多个预设字符,即将多个预设字符填满待存储数据块的结构区,这样即可得到第一数据块。
[0162] 本申请实施例中的第一数据块的大小与待存储数据块的大小相同,这样能够保证本申请实施例提供的数据存储方法对原有的重删压缩流程不会造成冲击。
[0163] 可选的,本申请实施例中填充的预设字符可以全部为专用字符,也可以由专用字符以及用于表示专用字符数据量的信息字符组成。
[0164] 可选的,若待存储数据块包括结构区1和结构区2,则存储设备41可以在待存储数据块的结构区1的0x00~0x01位置填充结构区1的大小信息,在结构区1的0x02~0x03的位置填充结构区2的大小信息,在结构区1的其余位置以及结构区2中全部补0,也可以在待存储数据块的结构区1的0x00~0x01位置填充结构区1的大小信息,在结构区1的其余位置中全部补0,在待存储数据块的0x00~0x01位置填充结构区2的大小信息,在结构区2的其余位置中全部补0,还可以为采用其他填充规则进行填充,本申请实施例对此不作具体限定。
[0165] 需要说明的是,上述在结构区填充0并不是指填充0的位置为空,而是用于说明填充0的位置有一个字符。
[0166] 在一个示例中,若待存储数据块为Oracle数据库的结构化数据块,则结合上述图1中的(a)可知,该待存储数据块包括结构区1和结构区2,存储设备41在该待存储数据块的结构区1的0x00~0x01位置填充结构区1的大小信息0x0044,在结构区1的0x02~0x03的位置填充结构区2的大小信息0x0004,在结构区1的其余64个字节以及结构区2的4个字节中全部补0。
[0167] 在另一个示例中,若待存储数据块为SQL Server数据库的结构化数据块,则结合上述图1中的(b)可知,该待存储数据块包括一个结构区,存储设备41在该待存储数据块的结构区的0x00~0x01位置填充结构区的大小信息0x0060,在结构区的0x02~0x03的位置填充其余结构区的大小信息0x0000,在结构区的其余92个字节中全部补0。
[0168] 结合S603的描述可知,在待存储数据块为结构化数据块的场景中,本申请实施例中的存储设备41将待存储数据块的元数据存储于结构数据存储区中,删除待存储数据块的元数据,并保存满足待存储数据块的结构区的空间大小的多个预设字符至待存储数据块的结构区中。这一过程相当于存储设备41将待存储数据块更新为第一数据块。
[0169] 示例性的,若待存储数据块为Oracle数据库的结构化数据块,图7示出了存储设备执行S603和S604的过程。
[0170] 结合第一数据块的描述可知,本申请实施例中的第一数据块为非结构化数据块。
[0171] 需要说明的是,对于同一应用的结构化数据块而言,本申请实施例中的存储设备41所保存的多个预设字符的相同。
[0172] 容易理解的是,若同一应用的任意两个结构化数据块的用户数据相同,则存储设备41在分别删除这两个结构化数据块的元数据,并保存满足各自结构区的空间大小的多个预设字符至各自结构区后,这两个结构化数据块完全相同。
[0173] 示例性的,结合上述图1中的(b),若结构化数据块A与结构化数据块B均属于SQL Server数据库的结构化数据块,则结构化数据块A和结构化数据块B均包括一个结构区和一个数据区,且结构化数据块A的结构区的大小与结构化数据块B的结构区的大小均为96个字节。存储设备41删除结构化数据块A的元数据,并在结构化数据块A的结构区的0x00~0x01位置填充结构区的大小信息0x0060,0x02~0x03的位置填充其余结构区的大小信息0x0000,其余92个字节中全部补0,生成结构化数据块A'。存储设备41删除结构化数据块B的元数据,并在结构化数据块B的结构区的0x00~0x01位置填充结构区的大小信息0x0060,在
0x02~0x03的位置填充其余结构区的大小信息0x0000,在其余92个字节中全部补0,生成结构化数据块B'。若结构化数据块A的用户数据与结构化数据块B的用户数据相同,则结构化数据块A'与结构化数据块B'完全相同。
[0174] S605、存储设备41计算第一数据块的指纹值。
[0175] 可选的,存储设备41可以将第一数据块的MD5值作为第一数据块的指纹值,也可以将第一数据块的SHA-1散列值作为第一数据块的指纹值,本申请实施例对此不作具体限定。
[0176] S606、存储设备41在指纹桶中查看是否存在与第一数据块的指纹值相同的指纹值。
[0177] 若指纹桶中存在与第一数据块的指纹值相同的指纹值,则存储设备41从S607顺序执行;若指纹桶中不存在与第一数据块的指纹值相同的指纹值,则存储设备41从S613顺序执行。
[0178] 为了便于描述,本申请实施例中将指纹桶中与第一数据块的指纹值相同的指纹值所对应的数据块称为第二数据块。以下S607~S612中均以第二数据块为例进行说明。
[0179] S607、存储设备41判断第一数据块的压缩策略是否和第二数据块的压缩策略是否相同。
[0180] 若第一数据块的压缩策略与第二数据块的压缩策略相同,则存储设备41从S608顺序执行;若第一数据块的压缩策略与第二数据块的压缩策略不相同,则存储设备41从S613顺序执行。
[0181] S608、存储设备41对第一数据块与第二数据块进行逐字节对比,判断二者逐字节对比是否完全一致。
[0182] 可以理解的是,对于同一类型的结构化数据块,该数据块的结构区所填充的预设字符相同。
[0183] 若第一数据块与第二数据块逐字节对比完全一致,则存储设备41从S609顺序执行;若第一数据块与第二数据块逐字节对比不完全一致,则存储设备从S613顺序执行。
[0184] S609、存储设备41将第二数据块的指纹引用计数加一。
[0185] 第一数据块的指纹值与第二数据块的指纹值相同、第一数据块的压缩策略与第二数据块的压缩策略相同、且第一数据块与第二数据块逐字节对比完全一致,说明第一数据块为第二数据块的重复数据块。
[0186] 在这种场景中,存储设备41不再存储待存储数据块的用户数据,而是直接将第二数据块的指纹引用计数加一。
[0187] 上述S605~S609的具体过程可参考现有的重复数据删除和数据压缩技术,本申请实施例对此不再进行详细赘述。
[0188] S610、存储设备41在S601的存储请求中获取待存储数据块的逻辑存储地址,将该待存储数据块的逻辑存储地址存储于数据块地址映射表中。
[0189] S611、存储设备41在执行S603后获取待存储数据块的元数据在结构数据存储区中的存储地址,将待存储数据块的元数据在结构数据存储区中的存储地址存储于数据块地址映射表中。
[0190] S612、存储设备41从指纹桶中获取第二数据块的指纹索引,并将第二数据块的指纹索引存储于数据块地址映射表中。
[0191] 从上面描述可知,本申请实施例中的指纹桶包括已存储数据块的指纹值、所述已存储数据块的指纹引用计数、所述已存储数据块的物理存储地址以及所述已存储数据块的指纹索引,指纹桶且用于记录已存储数据块的指纹值、所述已存储数据块的指纹引用计数、所述已存储数据块的物理存储地址以及所述已存储数据块的指纹索引之间的对应关系。
[0192] S609的应用场景为第一数据块为和第二数据块重复的数据块,这样,第一数据块的指纹索引和第二数据块的指纹索引相同,因此,存储设备41从指纹桶中获取第二数据块的指纹索引,并将第二数据块的指纹索引作为第一数据块的指纹索引存储于数据块地址映射表中。
[0193] 可选的,存储设备41可以在执行S601后执行S610,执行S603后执行S611,也可以在执行S609后,同时执行S610~S612,本申请实施例对此不作具体限定。
[0194] 在第一数据块为第二数据块的重复数据块的应用场景中,本申请实施例中的数据块地址映射表用于记录待存储数据块的逻辑存储地址、待存储数据块的元数据在结构数据存储区中的存储地址以及已存储数据块的指纹索引之间的对应关系。这样,在客户端设备40后续访问该待存储数据块时,存储设备41根据该待存储数据块的逻辑存储地址和数据块地址映射表即可获取到该待存储数据块的元数据在结构数据存储区中的存储地址和该待存储数据块的指纹索引。
[0195] 进一步地,存储设备41能够根据该待存储数据块的元数据在结构数据存储区中的存储地址获取到该存储数据块的元数据,并根据待存储数据块的指纹索引从指纹桶中获取到待存储数据块的物理存储地址,以获取待存储数据块的用户数据。
[0196] 在执行完S610~S612后,存储设备41向客户端设备40发送存储响应,该存储响应可以为ACK执行,也可以为包括OK的消息,本申请实施例对此不作具体限定。
[0197] 结合上面描述可知,若指纹桶中不存在与第一数据块的指纹值相同的指纹值,或第一数据块的压缩策略与第二数据块的压缩策略不同,或第一数据块与第二数据块逐字节对比不完全一致,则说明存储设备41未存储与第一数据块重复的数据块。在存储设备41未存储与第一数据块重复的数据块的应用场景中,存储设备41需要为第一数据块分配目标物理存储空间,以存储第一数据块。
[0198] 也就是说,在S606中存储设备41确定指纹桶中不存在与第一数据块的指纹值相同的指纹值之后,存储设备从S613顺序执行。在S607中存储设备41确定第一数据块的压缩策略与第二数据块的压缩策略不同之后,存储设备从S613顺序执行。在S608中存储设备41确定第一数据块与第二数据块逐字节对比不完全一致之后,存储设备从S613顺序执行。
[0199] S613、存储设备41为第一数据块分配目标物理存储空间,以存储第一数据块。
[0200] 指纹桶中不存在与第一数据块的指纹值相同的指纹值,或第一数据块的压缩策略与第二数据块的压缩策略不相同,或第一数据块与第二数据块逐字节对比不完全一致,说明存储设备41尚未存储与第一数据块完全相同的数据块。
[0201] 在这种场景中,存储设备41需要存储第一数据块。相应的,存储设备41为第一数据块分配目标物理存储空间,以存储第一数据块。
[0202] S614、存储设备41获取第二数据块的指纹值、第二数据块的物理存储地址、第二数据块的指纹引用计数以及第二数据块的指纹索引,并将第二数据块的指纹值、第二数据块的物理存储地址、第二数据块的指纹引用计数以及第二数据块的指纹索引保存至指纹桶中。
[0203] 这里,第二数据块的物理存储地址用于指示上述S613中的目标物理存储空间。
[0204] 可选的,第二数据块的物理存储地址可以为所述目标物理存储空间的起始位置,也可以为所述目标物理存储空间的起始位置和偏移长度,本申请实施例对此不作具体限定。
[0205] S615、存储设备41在S601的存储请求中获取待存储数据块的逻辑存储地址,将该待存储数据块的逻辑存储地址存储于数据块地址映射表中。
[0206] S615与上述S610相同,此处不再进行详细赘述。
[0207] S616、存储设备41在执行S603后获取待存储数据块的元数据在结构数据存储区中的存储地址,将待存储数据块的元数据在结构数据存储区中的存储地址存储于数据块地址映射表中。
[0208] S616与上述S611相同,此处不再进行详细赘述。
[0209] S617、存储设备41获取第一数据块的指纹索引,并将第一数据块的指纹索引存储于数据块地址映射表中。
[0210] 可选的,存储设备41可以在执行S601后执行S615,执行S603后执行S616,也可以在执行S613后,同时执行S615~S617,本申请实施例对此不作具体限定。
[0211] 在存储设备41尚未存储与第一数据块完全相同的数据块的应用场景中,本申请实施例中的数据块地址映射表用于记录待存储数据块的逻辑存储地址、待存储数据块的元数据在结构数据存储区中的存储地址以及第一数据块的指纹索引之间的对应关系。这样,在客户端设备40后续访问该待存储数据块时,存储设备41根据该待存储数据块的逻辑存储地址和数据块地址映射表即可获取到该待存储数据块的元数据在结构数据存储区中的存储地址和第一数据块的指纹索引。
[0212] 进一步地,存储设备41能够根据该待存储数据块的元数据在结构数据存储区中的存储地址获取到该存储数据块的元数据,并根据第一数据块的指纹索引从指纹桶中获取到第一数据块的物理存储地址,这样,存储设备41能够获取到第一数据块的数据,进而获取到待存储数据的用户数据。
[0213] 在执行完S613~S617后,存储设备41向客户端设备40发送存储响应,该存储响应可以为ACK执行,也可以为包括OK的消息,本申请实施例对此不作具体限定。
[0214] 综上所述,存储设备41在确定待存储数据块的类型为结构化数据块后,将待存储数据块的结构区所存储的待存储数据块的元数据保存到结构数据存储区中,删除所述待存储数据块的元数据,并保存满足所述待存储数据块的结构区的空间大小的多个预设字符至所述待存储数据块的结构区中,得到更新后的待存储数据块。更新后的待存储数据块为非结构化数据块。存储设备41利用现有的重删压缩算法处理更新后的待存储数据块即可。
[0215] 由于本申请中的存储设备41是对更新后的待存储数据块进行重删压缩处理,并未考虑待存储数据块的元数据,避免了由于待存储数据块的元数据中的少数几个字节与已存储数据块的不同而导致待存储数据块无法重删的问题,有效的提高了结构化数据块的重删率,即有效的提高了数据块的重删率。
[0216] 在图6所示的数据存储方法的基础上,客户端设备40也能够请求访问存储设备已存储的每一数据块的数据。相应的,存储设备41可以根据客户端设备40的访问请求,获取待访问数据块的数据,并将获取到的数据发送到客户端设备40。
[0217] 本申请实施例以客户端设备40向存储设备41请求访问图6所示实施例中存储设备41存储的待存储数据块为例进行说明。
[0218] 具体的,如图8所示,本申请实施例提供的数据存储方法包括:
[0219] S800、客户端设备40向存储设备41发送数据访问请求,该数据访问请求用于请求访问所述待存储数据块。
[0220] 本申请实施例中的数据访问请求包括所述待存储数据块的逻辑存储地址。
[0221] S801、存储设备41响应数据访问请求,从数据块地址映射表中获取与所述待存储数据块的逻辑存储地址对应的指纹索引和所述待存储数据块的元数据在结构数据存储区中的存储地址。
[0222] 从上述图6所示实施例的描述可知,在待存储数据块为结构化数据块、且上述第一数据块为第二数据块的重复数据块的应用场景中,数据块地址映射表存储有待存储数据块的逻辑存储地址、待存储数据块的元数据在结构数据存储区中的存储地址以及第二数据块的指纹索引。因此,在这一应用场景中,存储设备在接收到数据访问请求后,根据数据块地址映射表能够获取到与待存储数据块的逻辑存储地址对应的第二数据块的指纹索引和待存储数据块的元数据在结构数据存储区中的存储地址。
[0223] 在待存储数据块为结构化数据块、且存储设备41尚未存储与第一数据块相同的数据块的应用场景中,数据块地址映射表存储有待存储数据块的逻辑存储地址、待存储数据块的元数据在结构数据存储区中的存储地址以及第一数据块的指纹索引。因此,在这一应用场景中,存储设备在接收到数据访问请求后,根据数据块地址映射表能够获取到与待存储数据块的逻辑存储地址对应的第一数据块的指纹索引和待存储数据块的元数据在结构数据存储区中的存储地址。
[0224] 当待存储数据块的类型为结构化数据块时,该待存储数据块的元数据在结构数据存储区中的存储地址不为0。当待存储数据块的类型为非结构化数据块时,该待存储数据块未包括元数据,因此,该待存储数据块的元数据在结构数据存储区中的存储地址为0。
[0225] 相应的,在待存储数据块为非结构化数据块的应用场景中,数据块地址映射表存储有待存储数据块的逻辑存储地址、待存储数据块的元数据在结构数据存储区中的存储地址(该存储地址为0)以及待存储数据块(或与该待存储数据块重复的数据块)的指纹索引。
[0226] S802(可选的)、存储设备41判断待存储数据块的元数据在结构数据存储区中的存储地址是否为0。
[0227] 结合图6所示的实施例的描述可知,结构化数据块的元数据在结构数据存储区中的存储地址不为0,非结构化数据块的元数据在结构数据存储区中的存储地址为0。因此,存储设备通过判断所述待存储数据块的元数据在结构数据存储区中的存储地址是否为0能够确定出待存储数据块是否为结构化数据块。
[0228] 具体的,若存储设备41确定出所述待存储数据块的元数据在结构数据存储区中的存储地址为0,则存储设备从S806顺序;若存储设备41确定出的所述待存储数据块的元数据在结构数据存储区中的存储地址不为0,则存储设备从S803顺序执行。
[0229] 由于S802为可选的,图8中用虚线表示S802。
[0230] S803、存储设备41根据所述待存储数据块的元数据在结构数据存储区中的存储地址,获取所述待存储数据块的元数据,并根据S801中获取到的指纹索引,获取所述待存储数据块的用户数据。
[0231] 具体的,在待存储数据块为结构化数据块、且上述第一数据块为第二数据块的重复数据块的应用场景中,存储设备41在S801中获取到第二数据块的指纹索引,并从指纹桶中获取与第二数据块的指纹索引对应的第二数据块的物理存储地址,这样,存储设备41即可根据第二数据块的物理存储地址获取第二数据块。由于第二数据块与第一数据块重复,且待存储数据块为结构化数据块,因此,存储设备可根据待存储数据块中结构区和数据区的配置原则,确定出待存储数据块的用户数据。
[0232] 在待存储数据块为结构化数据块、且存储设备41尚未存储与第一数据块相同的数据块的应用场景中,存储设备41在S801中获取到第一数据块的指纹索引,并从指纹桶中获取与第一数据块的指纹索引对应的第一数据块的物理存储地址,这样,存储设备41即可根据第一数据块的物理存储地址获取第一数据块。由于第一数据块为更新后的待存储数据块,因此,存储设备可根据待存储数据块中结构区和数据区的配置原则,确定出待存储数据块的用户数据。
[0233] 可选的,在S604中存储设备41填充的预设字符包括待存储数据块的结构区的大小的情况下,存储设备41可根据其确定出的待存储数据块的元数据在结构数据存储区中的存储地址以及预设字符所表示的待存储数据块的结构区的大小,获取待存储数据块的所有元数据。
[0234] S804、存储设备41根据预设规则,将待存储数据块的用户数据和待存储数据块的元数据重组,以生成待存储数据块。
[0235] 这里的预设规则是指待存储数据块所具备的结构特征。
[0236] 在一个示例性中,结合上述图1中的(a),若待存储数据块为Oracle数据库的结构化数据块,则存储设备41在获取到该待存储数据块的用户数据和元数据后,将待存储数据块的用户数据和待存储数据块的元数据按照图1中的(a)所示的结构重组。
[0237] 在另一个示例中,结合上述图1中的(b),若待存储数据块为SQL Server数据库的结构化数据块,则存储设备41在获取到该待存储数据块的用户数据和元数据后,将待存储数据块的用户数据和待存储数据块的元数据按照图1中的(b)所示的结构重组。
[0238] S805、存储设备41向客户端设备40发送待存储数据块。
[0239] 结合上述描述可知,若待存储数据块的元数据在结构数据区中的存储地址为0,则说明该待存储数据块为非结构化数据块。在待存储数据块为非结构化数据块的应用场景中,存储设备41直接存储该待存储数据块,相应的,存储设备41可直接获取到该待存储数据块。也就是说,在S802中存储设备41确定待存储数据块的元数据在结构数据存储区中的存储地址为0后,从S806顺序执行。
[0240] S806、存储设备41根据在S801获取到的指纹索引,读取待存储数据块,并向客户端设备40发送待存储数据块。
[0241] S806适用于待存储数据块为非结构化数据块的应用场景,在这一应用场景中,待存储数据块未包括元数据,因此,存储设备41可根据待存储数据块或与该待存储数据块重复的数据块的指纹索引,从指纹桶中获取到该待存储数据块的物理存储地址信息,这样,存储设备41即可获取到待存储数据块。
[0242] 具体的,存储设备41根据在S801获取到的指纹索引,从指纹桶中获取与该指纹索引对应的物理存储地址信息,以根据该物理存储地址信息获取待存储数据块。
[0243] 本申请实施例中的存储设备41在确定待存储数据块的类型为结构化数据块后,将待存储数据块的结构区所存储的待存储数据块的元数据保存到结构数据存储区中,删除所述待存储数据块的元数据,并保存满足所述待存储数据块的结构区的空间大小的多个预设字符至所述待存储数据块的结构区中,得到更新后的待存储数据块。更新后的待存储数据块为非结构化数据块。存储设备41利用现有的重删压缩算法处理更新后的待存储数据块即可。由于本申请中的存储设备41是对更新后的待存储数据块进行重删压缩处理,并未考虑待存储数据块的元数据,避免了由于待存储数据块的元数据中的少数几个字节与已存储数据块的不同而导致待存储数据块无法重删的问题,有效的提高了结构化数据块的重删率,即有效的提高了数据块的重删率。
[0244] 本申请实施例提供一种存储设备900,该存储设备900用于执行以上数据存储方法中的存储设备41所执行的步骤。本申请实施例提供的存储设备900可以包括相应步骤所对应的模块。
[0245] 本申请实施例可以根据上述方法示例对存储设备900进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
[0246] 在采用对应各个功能划分各个功能模块的情况下,图9示出上述实施例中所涉及的存储设备900的一种可能的结构示意图。
[0247] 如图9所示,存储设备900包括处理单元90、存储单元91、接收单元92和发送单元93。
[0248] 处理单元90用于支持该存储设备900执行上述图6所示实施例中的S602、S604中的“删除待存储数据块的元数据”、S605、S606、S607、S608、S609、S613,上述图8中的S801、S802、S803、S804、S806,和/或用于本文所描述的技术的其它过程。
[0249] 存储单元91用于支持该存储设备900执行上述图6所示实施例中的S603、S604中的“保存满足待存储数据块的结构区的空间大小的多个预设字符至待存储数据块的结构区中”、S610、S611、S612、S614、S615、S616、S617,和/或用于本文所描述的技术的其它过程。
[0250] 接收单元92用于支持该存储设备900执行上述图6所示实施例中的S601,上述图8中的S800,和/或用于本文所描述的技术的其它过程。
[0251] 发送单元93用于支持该存储设备900执行“向客户端设备发送存储响应”,上述图8中的S805,和/或用于本文所描述的技术的其它过程。
[0252] 其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
[0253] 在采用集成的单元的情况下,本申请实施例中的处理单元90可以是图5中的处理器521,接收单元92和发送单元93可以是图5中的通信接口51,存储单元91可以是图5中的存储器522。
[0254] 当存储设备900运行时,该存储设备900执行如图6或图8所示的实施例的数据存储方法。数据存储方法可参见上述如图6所示的实施例中的步骤S601、S602、S603、S604、S605、S606、S607、S608、S609、S610、S611、S612、S613、S614、S615、S616和S617的相关描述,或参见上述图8所示的实施例中的步骤S801、S802、S803、S804、S805和S806的相关描述,此处不再赘述。
[0255] 本申请另一实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当指令在存储设备900上运行时,该存储设备900执行如图6所示的数据存储方法中的步骤S601、S602、S603、S604、S605、S606、S607、S608、S609、S610、S611、S612、S613、S614、S615、S616和S617的相关描述,或参见上述图8所示的实施例中的步骤S801、S802、S803、S804、S805和S806的相关描述。
[0256] 在本申请的另一实施例中,还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中;存储设备900的至少一个处理器可以从计算机可读存储介质读取该计算机执行指令,至少一个处理器执行该计算机执行指令使得存储设备900实施执行图6所示的数据存储方法中的存储设备的步骤步骤S601、S602、S603、S604、S605、S606、S607、S608、S609、S610、S611、S612、S613、S614、S615、S616和S617的相关描述,或参见上述图8所示的实施例中的步骤S801、S802、S803、S804、S805和S806的相关描述。
[0257] 本申请实施例提供一种数据存储方法及存储设备,存储设备在确定待存储数据块的类型为结构化数据块后,将待存储数据块的结构区所存储的待存储数据块的元数据保存到结构数据存储区中,删除所述待存储数据块的元数据,并保存满足所述待存储数据块的结构区的空间大小的多个预设字符至所述待存储数据块的结构区中,得到更新后的待存储数据块。更新后的待存储数据块为非结构化数据块。存储设备利用现有的重删压缩算法处理更新后的待存储数据块即可。
[0258] 由于本申请中的存储设备是对更新后的待存储数据块进行重删压缩处理,并未考虑待存储数据块的元数据,避免了由于待存储数据块的元数据中的少数几个字节与已存储数据块的不同而导致待存储数据块无法重删的问题,有效的提高了结构化数据块的重删率,即有效的提高了数据块的重删率。
[0259] 在上述实施例中,可以全部或部分的通过软件,硬件,固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式出现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。
[0260] 计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质,(例如,软盘,硬盘、磁带)、光介质(例如,DVD)或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
[0261] 通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
[0262] 在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0263] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0264] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0265] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0266] 以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。