数据存储方法、读取方法、删除方法和数据操作系统与流程

文档序号:11176737阅读:753来源:国知局
数据存储方法、读取方法、删除方法和数据操作系统与流程

本申请涉及计算机技术领域,尤其涉及一种数据存储方法、读取方法、删除方法和数据操作系统。



背景技术:

ceph指的是一个开源的分布式统一存储系统,ceph的设计目标是在廉价的存储介质上构建一套高性能、高扩展性和高可用性的存储系统,对外提供文件存储、块存储和对象存储的一套统一存储系统。

然而基于ceph的存储介质在存储数据时,由于用户可能会对相同的数据存储多次,那么相应的在存储介质上便会存储多份相同的数据,这无疑浪费了存储介质的存储空间。



技术实现要素:

有鉴于此,本申请提供一种数据存储方法、读取方法、删除方法和数据操作系统,以节省存储介质的存储空间。技术方案如下:

基于本申请的一方面,本申请提供一种数据存储方法,包括:

确定欲存储的第一数据块,以及所述第一数据块的第一标识;

判断存储的哈希值与对象标识的对应关系中,是否包括所述第一标识;其中所述哈希值与对象标识的对应关系中的对象标识为已存储数据块的标识;

如果包括,则依据所述第一数据块的数据块长度以及所述第一标识对应的已存在的第二数据块的数据块长度,确定对所述第一数据块执行的写操作类型,并对所述第一数据块采用所述写操作类型对应的写操作方法进行处理,得到目标数据块;

如果不包括,则确定所述第一数据块为目标数据块;

计算所述目标数据块的目标哈希值;

若在所述哈希值与对象标识的对应关系中,查找到所述目标哈希值,则不存储所述目标数据块,并依据所述目标哈希值查找到所述目标哈希值对应的原始数据块,将所述原始数据块中的引用计数值加一;

若在所述哈希值与对象标识的对应关系中,未查找到所述目标哈希值,则在所述哈希值与对象标识的对应关系中,增加所述目标哈希值与所述第一标识的对应关系,并对所述目标数据块进行压缩处理,存储压缩处理后的目标数据块,以及将所述目标数据块中的引用计数值加一。

优选地,所述依据所述第一数据块的数据块长度以及所述第一标识对应的已存在的第二数据块的数据块长度,确定对所述第一数据块执行的写操作类型包括:

所述第一数据块的数据块长度等于所述第一标识对应的已存在的第二数据块的数据块长度时,确定对所述第一数据块执行的写操作类型为重写;

所述第一数据块的数据块长度小于所述第一标识对应的已存在的第二数据块的数据块长度时,确定对所述第一数据块执行的写操作类型为修改写。

优选地,当确定对所述第一数据块执行的写操作类型为重写时,所述对所述第一数据块采用所述写操作类型对应的写操作方法进行处理,得到目标数据块包括:

从所述哈希值与对象标识的对应关系中,删除所述第一标识与所述第二数据块的哈希值的对应关系,并将所述第二数据块中的引用计数值减一;

确定所述第一数据块为目标数据块。

优选地,当确定对所述第一数据块执行的写操作类型为修改写时,所述对所述第一数据块采用所述写操作类型对应的写操作方法进行处理,得到目标数据块包括:

从所述哈希值与对象标识的对应关系中,删除所述第一标识与所述第二数据块的哈希值的对应关系,并将所述第二数据块中的引用计数值减一;

解压缩所述第二数据块,得到所述第二数据块的第二数据内容;

合并所述第二数据内容与所述第一数据块的第一数据内容,并将合并后得到的数据块确定为目标数据块。

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

当所述第二数据块中的引用计数值为0时,删除所述第二数据块。

基于本申请的另一方面,本申请还提供一种数据读取方法,包括:

确定欲读取的目标数据块的目标标识;

从存储的哈希值与对象标识的对应关系中,获取与所述目标标识对应的目标哈希值;

基于所述目标哈希值获取所述目标数据块;

解压缩所述目标数据块,读取所述目标数据块的数据。

优选地,所述确定欲读取的目标数据块的目标标识之后,所述方法还包括:

判断所述哈希值与对象标识的对应关系中,是否包括所述目标标识;其中所述哈希值与对象标识的对应关系中的对象标识为已存储数据块的标识;

如果包括,执行所述从存储的哈希值与对象标识的对应关系中,获取与所述目标标识对应的目标哈希值的步骤;

如果不包括,反馈错误提示信息,其中,所述错误提示信息用于表示存储设备中不存在所述目标标识。

基于本申请的再一方面,本申请还提供一种数据删除方法,包括:

确定欲删除的目标数据块的目标标识;

从存储的哈希值与对象标识的对应关系中,获取与所述目标标识对应的目标哈希值;

从存储的哈希值与对象标识的对应关系中,删除所述目标标识与所述目标哈希值的对应记录;

基于所述目标哈希值获取所述目标数据块,将所述目标数据块中的引用计数值减一。

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

当所述目标数据块中的引用计数值为0时,删除所述目标数据块。

优选地,所述确定欲删除的目标数据块的目标标识之后,所述方法还包括:

判断所述哈希值与对象标识的对应关系中,是否包括所述目标标识;其中所述哈希值与对象标识的对应关系中的对象标识为已存储数据块的标识;

如果包括,执行所述从存储的哈希值与对象标识的对应关系中,获取与所述目标标识对应的目标哈希值的步骤;

如果不包括,反馈错误提示信息,其中,所述错误提示信息用于表示存储设备中不存在所述目标标识。

基于本申请的再一方面,本申请还提供一种数据操作系统,包括:

终端,用于发送文件到分布式设备;

分布式设备,用于对文件执行池化操作获得多个数据块,其中每个数据块的首部包括元数据信息,所述元数据信息包含数据块的引用计数信息,以及设置哈希值与对象标识的对应关系,利用所述哈希值与对象标识的对应关系,执行数据存储操作、数据读取操作以及数据删除操作。

本申请在存储数据时,如果哈希值与对象标识的对应关系中已包括目标数据块的目标哈希值,则不再存储目标数据块,而是将目标哈希值对应的原始数据块中的引用计数值加一,而如果哈希值与对象标识的对应关系中不包括目标数据块的目标哈希值,则存储所述目标哈希值与第一标识的对应关系,并对目标数据块进行压缩处理,存储压缩处理后的目标数据块。本申请在数据存储过程中针对多份相同的数据不会重复存储,保证存储空间仅存储一份相同的数据,节省了存储介质的存储空间。且本申请在存储数据时,存储的是压缩处理后的数据块,这相比于现有技术直接存储数据的手段,本申请减少了数据块所需的存储空间,节省了存储介质的存储空间。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例提供的一种数据操作系统的结构示意图;

图2为本申请中osd端存储的数据块的格式示意图;

图3为本申请实施例提供的一种数据存储方法的流程图;

图4为本申请实施例提供的一种数据读取方法的流程图;

图5为本申请实施例提供的一种数据删除方法的流程图。

具体实施方式

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

术语解释:

分布式存储:将数据分散存储到多个数据存储服务器上。

pg:placementgroups,放置组。分布式设备中的虚拟概念。

osd:object-basedstoragedevice,对象存储设备。

哈希值:在本实施例中对对象执行哈希操作后得到的数据值,称为哈希值。

为了方便本领域技术人员了解本申请的应用场景,提供了一种数据操作系统。参见图1,具体包括终端100和分布式设备200。

终端100用于发送文件至分布式设备200。

分布式设备200用于对文件执行池化操作获得多个数据块(oid),其每个数据块具有一个对象标识(oid_id)。其中每个数据块的首部包括元数据信息,所述元数据信息包含数据块的引用计数信息,以及分布式设备200设置有哈希值与对象标识的对应关系,利用哈希值与对象标识的对应关系,执行数据存储操作、数据删除操作以及数据读取操作。

本申请中,数据块会在执行重删后,再进行压缩处理,由于压缩后的数据块的长度并不一致,因此在osd端存储的数据块的长度不是固定的。其中,数据块存储在osd端的格式如图2所示,每一个数据块的大小都不是固定长度。特别地,本申请在数据块的首部增加了元数据信息,该元数据信息包含该数据块的引用计数、所用哈希算法和压缩算法等信息,后端存储了压缩处理后的数据块的真实数据。

引用计数表示相同数据的存储次数,亦表示数据块被重复存储的次数。

分布式设备200中存储有哈希值与对象标识的对应关系。哈希值为对数据块执行哈希操作后得到的数据值,用于唯一表示一个数据块。对象标识为分布式设备中表示一个数据块的标识。在分布式设备中,当一个数据块被存储至osd后,在哈希值与对象标识的对应关系中建立该数据块的对象标识和哈希值的对应关系。

具体地,分布式设备200可以利用指纹库存储哈希值与对象标识的对应关系。指纹库是通过一个分布式kv(key-value,键值)数据库实现,存储了数据块hash数值与数据块标识oid间的对应关系。在分布式实现方案中,为了避免单点故障导致指纹数据丢失的问题,在各个客户端以及各个存储节点上基于redis建立一个分布式数据库,用来存储kv数据库。redis作为一个可靠的分布式数据库,能够使数据指纹在各个客户端保持数据一致性,同步效率比较高,且能够保证单个存储节点指纹数据出现故障时,在环境重启时恢复指纹数据。

本申请针对ceph构建一套分布式重删压缩存储方法,对原始数据流下发过程中的数据块的对象标识(oid_id)进行劫持并进行重定向,继而执行后续重删压缩存储操作。本申请中操作的输入对象是ceph中的数据分块(以下简称数据块),数据重删将以数据块为对象执行重删,数据压缩则对需要存储的数据块进行压缩,进而下发到后端存储(硬盘)中存储。

本申请提供的数据存储方法、数据读取方法和数据删除方法在rados层中实现,对上层rbd、rgw和文件系统透明,无需要修改上层代码。

具体参阅图1,其示出了本申请提供的一种数据存储方法的流程图,包括:

步骤101,确定欲存储的第一数据块,以及所述第一数据块的第一标识。

步骤102,判断存储的哈希值与对象标识的对应关系中,是否包括所述第一标识。如果包括,执行步骤103,如果不包括,执行步骤104。其中所述哈希值与对象标识的对应关系中的对象标识为已存储数据块的标识。

分布式设备200中存储有哈希值与对象标识的对应关系,该哈希值与对象标识的对应关系可以具体为一表格。基于该表格可以查找其上是否存在第一标识。如果存在,则说明当前底层已存储有具有第一标识的数据块。

步骤103,依据所述第一数据块的数据块长度以及所述第一标识对应的已存在的第二数据块的数据块长度,确定对所述第一数据块执行的写操作类型,并对所述第一数据块采用所述写操作类型对应的写操作方法进行处理,得到目标数据块。

本申请中的写操作类型可以包括重写和修改写。

重写指的是待写入的数据块(即第一数据块)在存储系统中存在,但是该待写入的数据块的数据块长度等于存储系统中已存在的数据块的数据块长度,要将该待写入的数据块整块覆盖掉存储系统中已存在的数据块。

修改写指的是待写入的数据块(即第一数据块)在存储系统中存在,且该待写入的数据块的数据块长度只是存储系统中已存在的数据块的数据块长度中的一部分。

由此,当第一数据块的数据块长度等于第一标识对应的已存在的第二数据块的数据块长度时,确定对所述第一数据块执行的写操作类型为重写;当第一数据块的数据块长度小于第一标识对应的已存在的第二数据块的数据块长度时,确定对所述第一数据块执行的写操作类型为修改写。

具体地,当确定对所述第一数据块执行的写操作类型为重写时,本申请从哈希值与对象标识的对应关系中,删除所述第一标识与所述第二数据块的哈希值的对应关系,并将所述第二数据块中的引用计数值减一。且确定该重写入的第一数据块为目标数据块。

当确定对所述第一数据块执行的写操作类型为修改写时,本申请从哈希值与对象标识的对应关系中,删除所述第一标识与所述第二数据块的哈希值的对应关系,并将所述第二数据块中的引用计数值减一。同时从底层获取第二数据块,解压缩所述第二数据块,得到所述第二数据块的第二数据内容。进而合并所述第二数据内容与所述第一数据块的第一数据内容,并将合并后得到的数据块确定为目标数据块。

本申请中涉及的合并处理过程会根据第二数据内容与第一数据内容的不同而不同。例如,若第一数据内容是对第二数据内容中的部分数据进行替换,则将第一数据内容替换掉第二数据内容中相应部分的部分数据内容。若第一数据内容是对第二数据内容增加部分内容,则在第二数据内容中增加第一数据内容。本申请中对于数据合并的处理方法为现有成熟技术,申请人在此不再赘述。

特别地在本申请中,当第二数据块中的引用计数值为0时,本申请直接删除所述第二数据块。

步骤104,确定所述第一数据块为目标数据块。

如果哈希值与对象标识的对应关系中不包括所述第一标识,直接确定该第一数据块为目标数据块。

步骤105,计算所述目标数据块的目标哈希值。

本申请采用预置的哈希算法计算所述目标数据块的目标哈希值,针对该目标数据块采用的哈希算法信息会存储在目标数据块的首部元数据信息中。

步骤106,若在所述哈希值与对象标识的对应关系中,查找到所述目标哈希值,则不存储所述目标数据块,并依据所述目标哈希值查找到所述目标哈希值对应的原始数据块,将所述原始数据块中的引用计数值加一。

优选地,本申请还可以存储所述目标哈希值与所述第一标识的对应关系。

步骤107,若在所述哈希值与对象标识的对应关系中,未查找到所述目标哈希值,则在所述哈希值与对象标识的对应关系中,增加所述目标哈希值与所述第一标识的对应关系,并对所述目标数据块进行压缩处理,存储压缩处理后的目标数据块,以及将所述目标数据块中的引用计数值加一。

本申请在存储所述目标哈希值与所述第一标识的对应关系时,会将该目标哈希值与第一标识的对应关系同步更新到kv数据库中。

为了避免存储重复,本申请在计算得到所述目标数据块的目标哈希值后,对目标数据块进行存储之前,首先在哈希值与对象标识的对应关系中,查找是否包括所述目标哈希值。若包括,则表示目标数据块已经存储至osd中;若不包括,则表示目标数据块未存储至osd中。

本申请中,若在哈希值与对象标识的对应关系中,查找到所述目标哈希值,则表示目标数据块已经存储过,因此为了避免重复存储,不再存储所述目标数据块,并依据目标哈希值查找到所述目标哈希值对应的原始数据块,将所述原始数据块中的引用计数值加一,以表示所述目标数据块又被存储一次。

作为本申请优选地,如果在哈希值与对象标识的对应关系中,不存在所述目标哈希值与所述第一标识的对应关系,则在哈希值与对象标识的对应关系中增加所述目标哈希值与所述第一标识的对应关系,即实现对该目标哈希值与第一标识的对应关系的存储。

若在哈希值与对象标识的对应关系中,未查找到所述目标哈希值,则表示目标数据块未存储在osd中。因此,存储所述目标哈希值与所述第一标识的对应关系,即在哈希值与对象标识的对应关系中增加所述目标哈希值与所述第一标识的对应关系,并对所述目标数据块进行压缩处理,进而基于目标哈希值确定目标数据块的存储区域(目标osd),将压缩处理后的目标数据块存储至确定的存储区域。同时,本申请将所述目标数据块中的引用计数值加一。对于首次存储的数据块而言,其引用计数值加一后的具体数值为1。

需要说明的是,对于本申请步骤107中涉及的对所述目标数据块进行压缩处理的步骤,也可在步骤105之后执行,即计算所述目标数据块的目标哈希值后,便对目标数据块进行压缩处理,本申请对此执行顺序不作限定。

本申请上述实施例提供了数据的重删压缩存储实现方法,重删系统采用在线、定长、块级、源端重删的方法,在写入数据块时,重删执行完毕后,再对数据块进行压缩处理,进而发送到osd端存储。

因此应用本申请提供的数据存储方法,在存储数据时,如果哈希值与对象标识的对应关系中已包括目标数据块的目标哈希值,则不再存储目标数据块,而是将目标哈希值对应的原始数据块中的引用计数值加一,而如果哈希值与对象标识的对应关系中不包括目标数据块的目标哈希值,则存储所述目标哈希值与第一标识的对应关系,并对目标数据块进行压缩处理,存储压缩处理后的目标数据块。本申请在数据存储过程中针对多份相同的数据不会重复存储,保证存储空间仅存储一份相同的数据,节省了存储介质的存储空间。且本申请在存储数据时,存储的是压缩处理后的数据块,这相比于现有技术直接存储数据的手段,减少了数据块所需的存储空间,节省了存储介质的存储空间。

基于本申请上述实施例,在图3所示的数据存储方法的基础上,本申请还提供了数据读取方法,如图4所示,包括:

步骤201,确定欲读取的目标数据块的目标标识。

步骤202,判断所述哈希值与对象标识的对应关系中,是否包括所述目标标识。如果包括,执行步骤203,如果不包括,执行步骤206。其中所述哈希值与对象标识的对应关系中的对象标识为已存储数据块的标识。

步骤203,从存储的哈希值与对象标识的对应关系中,获取与所述目标标识对应的目标哈希值。

步骤204,基于所述目标哈希值获取所述目标数据块。

本申请中,通过所述目标哈希值计算得到pg标识,通过pg标识计算得到osd标识,利用osd标识在osd中获取目标数据块。对于本申请步骤204的具体实现方法现有技术已非常成熟,申请人在此不再赘述。

步骤205,解压缩所述目标数据块,读取所述目标数据块的数据。

步骤206,反馈错误提示信息,其中,所述错误提示信息用于表示存储设备中不存在所述目标标识。

若所述哈希值与对象标识的对应关系中不包括所述目标标识,则表示未存储过所述目标标识对应的目标数据块,因此向终端反馈错误提示信息,以提示用户目标标识有误。

基于本申请上述实施例,在图3所示的数据存储方法的基础上,本申请还提供了数据删除方法,如图5所示,包括:

步骤301,确定欲删除的目标数据块的目标标识。

步骤302,判断哈希值与对象标识的对应关系中,是否包括所述目标标识。如果包括,执行步骤303,如果不包括,执行步骤306。其中所述哈希值与对象标识的对应关系中的对象标识为已存储数据块的标识。

步骤303,从哈希值与对象标识的对应关系中,获取与所述目标标识对应的目标哈希值。

步骤304,从存储的哈希值与对象标识的对应关系中,删除所述目标标识与所述目标哈希值的对应记录。

步骤305,基于所述目标哈希值获取所述目标数据块,将所述目标数据块中的引用计数值减一。

特别地,当所述目标数据块中的引用计数值为0时,说明所有用户均已经删除目标哈希值对应的目标对象,由此可以删除所述目标数据块,以释放存储介质的存储空间。

步骤306,反馈错误提示信息。其中,所述错误提示信息用于表示存储设备中不存在所述目标标识。

若所述哈希值与对象标识的对应关系中不包括所述目标标识,则表示未存储过所述目标标识对应的目标数据块,因此向终端反馈错误提示信息,以提示用户目标标识有误。

本实施例方法所述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算设备可读取存储介质中。基于这样的理解,本申请实施例对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机,服务器,移动计算设备或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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