分布式存储系统数据修改写方法及系统与流程

文档序号:12946566阅读:436来源:国知局
分布式存储系统数据修改写方法及系统与流程

本发明涉及存储技术领域,特别是涉及一种分布式存储系统数据修改写方法及系统。



背景技术:

请参考图1(a)至图1(e)所示,现有技术中,分布式存储系统进行数据修改写采用的处理逻辑是,首先创建临时对象,临时对象与原对象大小一样;然后在临时对象中,将从需要修改的老数据对应的偏移量开始到对应长度的那段数据,先备份再用zero进行覆盖;最后将原对象中修改数据写入到临时对象中zero区段,将新数据写入原对象。存储系统中的修改写操作是指只修改对象中的一部分内容。

然而,现有这种修改写方法,需要申请与原对象空间大小一样的临时对象,其实用到的空间大小只是偏移量开始到对应长度,浪费了一部分空间;对临时对象中被写入数据的那部分进行备份,是没有必要的,因为即使修改写失败也不必恢复临时对象中原有的内容,这样增加了不必要的读写操作,降低了写带宽。



技术实现要素:

本发明的目的是提供一种分布式存储系统数据修改写方法及系统,与现有技术相比,减少了不必要的读写操作,可提高写带宽,并节省了不必要的存储开销。

为实现上述目的,本发明提供如下技术方案:

一种分布式存储系统数据修改写方法,包括:

主存储模块在接收到客户端发送的修改数据后,通过预制定的纠删算法对修改数据运算;

所述主存储模块将运算得到的数据存储,并向各从存储模块发送运算得到的数据,发送的数据包含对象编码、集合编码、偏移量、数据长度和修改数据本身;

所述从存储模块在接收到数据后,创建长度与数据长度相同的临时对象,并将所述临时对象初始化为全零;

所述从存储模块在所述对象编码指定的对象中,将从所述偏移量开始、长度为所述数据长度的数据复制到所述临时对象中,并将所述修改数据写入所述对象中。

可选地,在所述从存储模块将所述修改数据写入所述对象中之后,还包括:

所述从存储模块向所述主存储模块发送应答信息,以告知所述主存储模块接收到的修改数据已经落盘,同时记录本对象新的版本号。

可选地,还包括:

当所述主存储模块接收到所有从存储模块发送的应答信息后,向所述客户端发送用于告知数据已经写完的应答信息,并向各所述从存储模块发送删除操作指令,所述删除操作指令用于指示所述从存储模块删除所述临时对象。

可选地,若所述分布式存储系统出现宕机并在重启后,所述主存储模块检查各所述从存储模块的对象版本号,取其中最低的版本号作为基准版本号;

若所述从存储模块的对象版本号高于所述基准版本号,则将所述临时对象的内容复制到所述从存储模块原对象中所述偏移量和所述数据长度指定的区域,复制完成后删除所述临时对象,并将所述对象版本号降级为所述基准版本号;

若所述从存储模块的对象版本号为所述基准版本号,并且临时对象的内容不是全零,则将所述临时对象的内容复制到所述从存储模块原对象中所述偏移量和所述数据长度指定的区域,复制完成后删除所述临时对象;

若所述从存储模块的对象版本号为所述基准版本号,并且临时对象的内容是全零,则删除所述临时对象。

可选地,所述主存储模块在接收到客户端发送的修改数据后,将修改数据的偏移量和长度大小与对象属性进行对比,若修改数据的偏移量小于对象长度,则确定进行修改写操作。

一种分布式存储系统数据修改写系统,包括主存储模块和从存储模块;

所述主存储模块包括:

运算单元,用于在接收到客户端发送的修改数据后,通过预制定的纠删算法对修改数据运算;

发送单元,用于将运算得到的数据存储,并向各从存储模块发送运算得到的数据,发送的数据包含对象编码、集合编码、偏移量、数据长度和修改数据本身;

所述从存储模块包括:

创建单元,用于在接收到数据后,创建长度与数据长度相同的临时对象,并将所述临时对象初始化为全零;

写入单元,用于在所述对象编码指定的对象中,将从所述偏移量开始、长度为所述数据长度的数据复制到所述临时对象中,并将所述修改数据写入所述对象中。

可选地,所述从存储模块还包括:

第一应答单元,用于在所述从存储模块将所述修改数据写入所述对象中之后,向所述主存储模块发送应答信息,以告知接收到的修改数据已经落盘,同时记录本对象新的版本号。

可选地,所述主存储模块还包括:

第二应答单元,用于在接收到所有从存储模块发送的应答信息后,向所述客户端发送用于告知数据已经写完的应答信息,并向各所述从存储模块发送删除操作指令,所述删除操作指令用于指示所述从存储模块删除所述临时对象。

可选地,所述主存储模块还包括检查和恢复单元,用于:

若所述分布式存储系统出现宕机并在重启后,检查各所述从存储模块的对象版本号,取其中最低的版本号作为基准版本号;

若所述从存储模块的对象版本号高于所述基准版本号,则将所述临时对象的内容复制到所述从存储模块原对象中所述偏移量和所述数据长度指定的区域,复制完成后删除所述临时对象,并将所述对象版本号降级为所述基准版本号;

若所述从存储模块的对象版本号为所述基准版本号,并且临时对象的内容不是全零,则将所述临时对象的内容复制到所述从存储模块原对象中所述偏移量和所述数据长度指定的区域,复制完成后删除所述临时对象;

若所述从存储模块的对象版本号为所述基准版本号,并且临时对象的内容是全零,则删除所述临时对象。

可选地,所述主存储模块还包括:

对比单元,用于在接收到客户端发送的修改数据后,将修改数据的偏移量和长度大小与对象属性进行对比,若修改数据的偏移量小于对象长度,则确定进行修改写操作。

由上述技术方案可知,本发明所提供的分布式存储系统数据修改写方法及系统,从存储模块在接收到主存储模块发送的数据后,首先根据数据长度创建与修改数据长度相同的临时对象,将临时对象初始化为全零;然后在指定的对象中,将从偏移量开始、长度为数据长度的数据复制到所述临时对象中,并将修改数据写入对象中,从而实现了存储模块中数据的修改写操作。

与现有方法相比,本发明分布式存储系统数据修改写方法根据修改数据,创建与修改数据相同长度的临时对象,可节省存储空间,节省存储开销;并且不进行临时对象数据的备份,减少了不必要的读写操作,可提高写带宽。

附图说明

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

图1(a)为现有技术中分布式存储系统进行数据修改写步骤(1)的示意图;

图1(b)为现有技术中分布式存储系统进行数据修改写步骤(2)的示意图;

图1(c)为现有技术中分布式存储系统进行数据修改写步骤(3)的示意图;

图1(d)为现有技术中分布式存储系统进行数据修改写步骤(4)的示意图;

图1(e)为现有技术中分布式存储系统进行数据修改写步骤(5)的示意图;

图2为本发明实施例提供的一种分布式存储系统数据修改写方法的流程图;

图3为本发明实施例中分布式存储系统的示意图;

图4(a)为本发明实施例中分布式存储系统进行数据修改写第一步骤的示意图;

图4(b)为本发明实施例中分布式存储系统进行数据修改写第二步骤的示意图;

图4(c)为本发明实施例中分布式存储系统进行数据修改写第三步骤的示意图;

图4(d)为本发明实施例中分布式存储系统进行数据修改写第四步骤的示意图;

图4(e)为本发明实施例中分布式存储系统进行数据修改写第五步骤的示意图;

图5为本发明又一实施例提供的一种分布式存储系统数据修改写方法的流程图;

图6为本发明实施例提供的一种分布式存储系统数据修改写系统的示意图。

具体实施方式

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

请参考图2,本发明实施例提供的一种分布式存储系统数据修改写方法,包括以下步骤:

s10:主存储模块在接收到客户端发送的修改数据后,通过预制定的纠删算法对修改数据运算。

可参考图3,在分布式存储系统中包括主存储模块20和从存储模块21。由主存储模块20与客户端进行通信交互和传输数据。

在具体实施时,客户端将修改数据发送给主存储模块20,主存储模块20在接收到修改数据后,将修改数据的偏移量和长度大小与对象属性进行对比,若修改数据的偏移量大于对象长度,则不进行修改写操作;若修改数据的偏移量小于对象长度,则确定进行修改写操作,则按照本实施例方法各步骤在存储模块对象中进行修改写操作。

需要说明的是,本方法应用于分布式存储系统中纠删池修改写,纠删池是以纠删码为数据冗余方式的存储池。因此相应的,主存储模块20接收到修改数据,判断要进行修改写操作后,通过预制定的纠删算法对修改数据运算,运算得到数据。

s11:所述主存储模块将运算得到的数据存储,并向各从存储模块发送运算得到的数据,发送的数据包含对象编码、集合编码、偏移量、数据长度和修改数据本身。

主存储模块20将运算得到的数据自身存储一份,并分别向各从存储模块21发送数据,发送的数据包含对象编码、集合编码、偏移量、数据长度和修改数据本身。

其中,对象编码(oid)用于指定从存储模块中进行修改写操作的对象。集合编码(cid)用于指定主存储模块20要向发送数据的从存储模块所在的集合。主存储模块20根据对象编码及集合编码将数据发送给指定的从存储模块21。

偏移量(offset)表示修改数据的偏移量,数据长度(len)表示修改数据的长度。

s12:所述从存储模块在接收到数据后,创建长度与数据长度相同的临时对象,并将所述临时对象初始化为全零。

各个从存储模块21在接收到数据后,根据数据长度(len),创建长度与数据长度(len)相同的临时对象,并将临时对象的内容初始化为全零。请参考图4(a)和图4(b),图4(a)为本实施例中分布式存储系统进行数据修改写第一步骤的示意图,表示创建临时对象,所创建的临时对象与原对象中要修改数据偏移量一致,长度一致。图4(b)为本实施例中分布式存储系统进行数据修改写第二步骤的示意图,表示将临时对象初始化为零。

s13:所述从存储模块在所述对象编码指定的对象中,将从所述偏移量开始、长度为所述数据长度的数据复制到所述临时对象中,并将所述修改数据写入所述对象中。

从存储模块21根据对象编码(oid),在对象编码指定的对象中,将对象存储区域中从偏移量(offset)开始、长度为数据长度(len)的数据复制到临时对象中。然后将修改数据写入对象中。这样完成将修改数据写入到对象中。请参考图4(c)和图4(d),图4(c)为本实施例中分布式存储系统进行数据修改写第三步骤的示意图,表示将对象存储区域中从偏移量(offset)开始、长度为数据长度(len)的数据复制到临时对象中。图4(d)为本实施例中分布式存储系统进行数据修改写第四步骤的示意图,表示将修改数据写入对象对应区域中。

本实施例分布式存储系统数据修改写方法,根据获得的修改数据创建与修改数据长度大小相同的临时对象,可节省存储空间,节省存储开销;并且不进行临时对象数据的备份,与现有方法相比减少了不必要的读写操作,提高了写效率。

本方法中根据获得的修改数据创建与修改数据长度大小相同的临时对象,避免了不必要的内存空间浪费。并且,本方法中,对临时对象本身不必进行内容备份,而是直接将原对象的内容复制到临时对象中即可。进而可提高写效率,减少不必要的读写操作。

进一步的,请参考图5,在本分布式存储系统数据修改写方法的又一实施例中,在以上实施例描述内容的基础上,在步骤s13:从存储模块将所述修改数据写入所述对象中之后,还包括:

步骤s14:所述从存储模块向所述主存储模块发送应答信息,以告知所述主存储模块接收到的修改数据已经落盘,同时记录本对象新的版本号。

从存储模块21将修改数据写入对象中完成后,向主存储模块20发送应答信息,告知主存储模块20修改数据已经落盘,并记录本对象更新后的新版本号。

进一步的,本方法还包括:

步骤s15:当所述主存储模块接收到所有从存储模块发送的应答信息后,向所述客户端发送用于告知数据已经写完的应答信息,并向各所述从存储模块发送删除操作指令,所述删除操作指令用于指示所述从存储模块删除所述临时对象。

主存储模块20接收到了所有从存储模块21返回的应答信息后,得知所有从存储模块21都将修改数据落盘,此时主存储模块20向客户端发送应答信息,告知客户端数据已经写完。

同时,主存储模块20向各从存储模块21发送删除操作指令,各从存储模块21在接收到主存储模块20发送的删除操作指令后,将临时对象删除。可参考图4(e)所示,图4(e)为本实施例中分布式存储系统进行数据修改写第五步骤的示意图,表示删除临时对象。

可见,本实施例方法中将原对象中与修改数据对应的数据复制到临时对象中,一直保留到所有对象中写完修改数据后,再统一删除临时对象,这样保证了修改写操作的原子性和数据的一致性。

优选的,在具体实施时,可设置从存储模块21删除临时对象这一操作处于较低的优先级,这样在存储系统处理业务繁忙的情况下,将执行该操作排列在后,当系统业务清闲时再执行该操作,有助于提高存储系统运行效率。

当存储系统中存储模块正在写操作过程中,存储系统由于一些突发问题发生宕机,这种情况下,由于在宕机时刻各存储模块可能处于不同的写阶段,可能出现:存储模块a已将修改数据写入到对象中,对象版本号已经更新;存储模块b只将修改数据复制到临时对象中;存储模块c只是创建了临时对象。在存储系统重启后,会出现各存储模块数据不一致。

针对此,在以上各实施例描述的分布式存储系统数据修改写方法的基础上,方法还包括:若所述分布式存储系统出现宕机并在重启后,所述主存储模块检查各所述从存储模块的对象版本号,取其中最低的版本号作为基准版本号;

若所述从存储模块的对象版本号高于所述基准版本号,则将所述临时对象的内容复制到所述从存储模块原对象中所述偏移量和所述数据长度指定的区域,复制完成后删除所述临时对象,并将所述对象版本号降级为所述基准版本号;

若所述从存储模块的对象版本号为所述基准版本号,并且临时对象的内容不是全零,则将所述临时对象的内容复制到所述从存储模块中原对象中所述偏移量和所述数据长度指定的区域,复制完成后删除所述临时对象;

若所述从存储模块的对象版本号为所述基准版本号,并且临时对象的内容是全零,则删除所述临时对象。

比如,对于对象版本号已经更新的存储模块a,则将临时对象的内容复制到从存储模块原对象中偏移量和数据长度指定的区域,恢复数据,并将对象版本号降级。

对于只将修改数据复制到临时对象的存储模块b,其临时对象的内容不是全零,对象版本号未更新,则将临时对象的内容复制到从存储模块原对象中偏移量和数据长度指定的区域,复制完成后删除临时对象。

对于只是创建了临时对象的存储模块c,还未将对象中的数据复制到临时对象中,其临时对象的内容为全零,则直接删除临时对象即可。

通过上述方法保证了当存储系统中存储模块正在写操作过程中发生宕机时,在系统重新启动后各存储模块中数据保持一致。

相应的,请参考图6,本发明实施例还提供一种分布式存储系统数据修改写系统,包括主存储模块30和从存储模块31;

所述主存储模块30包括:

运算单元300,用于在接收到客户端发送的修改数据后,通过预制定的纠删算法对修改数据运算;

发送单元301,用于将运算得到的数据存储,并向各从存储模块发送运算得到的数据,发送的数据包含对象编码、集合编码、偏移量、数据长度和修改数据本身;

所述从存储模块31包括:

创建单元310,用于在接收到数据后,创建长度与数据长度相同的临时对象,并将所述临时对象初始化为全零;

写入单元311,用于在所述对象编码指定的对象中,将从所述偏移量开始、长度为所述数据长度的数据复制到所述临时对象中,并将所述修改数据写入所述对象中。

可以看出,本实施例分布式存储系统数据修改写系统,从存储模块在接收到主存储模块发送的数据后,首先根据数据长度创建与修改数据长度相同的临时对象,将临时对象初始化为全零;然后在指定的对象中,将从偏移量开始、长度为数据长度的数据复制到临时对象中,并将修改数据写入对象中,从而实现了存储模块中数据的修改写操作。

与现有方法相比,本实施例分布式存储系统数据修改写系统根据修改数据,创建与修改数据相同长度的临时对象,可节省存储空间,节省存储开销;并且不进行临时对象数据的备份,减少了不必要的读写操作,可提高写带宽。

本实施例系统中,所述主存储模块30还包括:

对比单元,用于在接收到客户端发送的修改数据后,将修改数据的偏移量和长度大小与对象属性进行对比,若修改数据的偏移量小于对象长度,则确定进行修改写操作。

客户端将修改数据发送给主存储模块30,主存储模块30在接收到修改数据后,将修改数据的偏移量和长度大小与对象属性进行对比,若修改数据的偏移量大于对象长度,则不进行修改写操作;若修改数据的偏移量小于对象长度,则确定进行修改写操作,则通过本实施例系统在存储模块对象中进行修改写操作。

本实施例分布式存储系统数据修改写系统,所述从存储模块31还包括:

第一应答单元,用于在所述从存储模块将所述修改数据写入所述对象中之后,向所述主存储模块发送应答信息,以告知接收到的修改数据已经落盘,同时记录本对象新的版本号。

进一步的,所述主存储模块30还包括:

第二应答单元,用于在接收到所有从存储模块发送的应答信息后,向所述客户端发送用于告知数据已经写完的应答信息,并向各所述从存储模块发送删除操作指令,所述删除操作指令用于指示所述从存储模块删除所述临时对象。

可见,本实施例系统将原对象中与修改数据对应的数据复制到临时对象中,一直保留到所有对象中写完修改数据后,再统一删除临时对象,这样保证了修改写操作的原子性和数据的一致性。

当存储系统中存储模块正在写操作过程中,存储系统由于一些突发问题发生宕机,这种情况下,由于在宕机时刻各存储模块可能处于不同的写阶段,可能出现:存储模块a已将修改数据写入到对象中,对象版本号已经更新;存储模块b只将修改数据复制到临时对象中;存储模块c只是创建了临时对象。在存储系统重启后,会出现各存储模块数据不一致。

针对此,在以上各实施例描述的分布式存储系统数据修改写系统的基础上,进一步的,其中主存储模块30还包括检查和恢复单元,用于:

若所述分布式存储系统出现宕机并在重启后,检查各所述从存储模块的对象版本号,取其中最低的版本号作为基准版本号;

若所述从存储模块的对象版本号高于所述基准版本号,则将所述临时对象的内容复制到所述从存储模块原对象中所述偏移量和所述数据长度指定的区域,复制完成后删除所述临时对象,并将所述对象版本号降级为所述基准版本号;

若所述从存储模块的对象版本号为所述基准版本号,并且临时对象的内容不是全零,则将所述临时对象的内容复制到所述从存储模块原对象中所述偏移量和所述数据长度指定的区域,复制完成后删除所述临时对象;

若所述从存储模块的对象版本号为所述基准版本号,并且临时对象的内容是全零,则删除所述临时对象。

通过上述方法保证了当存储系统中存储模块正在写操作过程中发生宕机时,在系统重新启动后各存储模块中数据保持一致。

以上对本发明所提供的分布式存储系统数据修改写方法及系统进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

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