一种基于纠删码的随机写方法及系统与流程

文档序号:12905978阅读:303来源:国知局
一种基于纠删码的随机写方法及系统与流程

本发明涉及数据存储技术领域,尤其是涉及一种基于纠删码的随机写方法及系统。



背景技术:

在常规的云存储项目中,用户数据往往只保存一个副本,若发生机器故障,很容易造成用户数据的丢失,而目前网络raid可以做到在节约用户成本的基础上,对用户的数据进行跨节点保护,目前常见的网络raid的实现方式主要是基于纠删码技术(erasurecode技术,简称ec)。而ec技术主要是将用户的数据进行条带化,之后为该条带计算相应的校验数据,若此时需要更新已经写入的条带数据时,需要将整个条带的数据读取出来,在重新计算校验数据,这对后端存储的网络压力会造成巨大影响。

如用户数据对应的安全级别为4+2,若用户需要更新条带中的一个字节的数据,后端存储需要读取6mb的数据,然后找出本次需要更新数据的位置,并进行更新,之后重新计算条带的校验数据,并将这6mb的数据写入存储设备中,此过程将用户的写数据放大了6291456倍。正是由于该原因,很多厂家提供出去的网络raid接口根本不支持随机写,那么基于ec,如何实现随机写,成为了一个难题。



技术实现要素:

本发明的目的在于克服上述技术不足,提出一种基于纠删码的随机写方法及系统,解决现有技术中的上述技术问题。

为达到上述技术目的,本发明的技术方案提供一种基于纠删码的随机写方法,包括:

s1、生成随机写文件并唯一标示随机写文件,设置随机写文件的文件数据安全级别;s2、输入随机写文件中的部分随机写数据,根据纠删码和文件数据安全级别将输入的随机写数据条带化,条带由数据存储单元组成,计算随机写数据大小、随机写偏移;

s3、根据随机写数据大小、随机写偏移获取本次随机写所跨越的条带列表;

s4、计算本次随机写所跨越的条带列表中各条带的需要更新的数据存储单元的范围,更新范围内的各数据存储单元,将更新的数据存储单元的数据进行分布式云存储并将存储的位置更新到数据库;

s5、用户再次输入随机写文件中的部分随机写数据,则重复执行步骤s2-s4,直到随机写文件的所有随机写数据输入完毕;

s6、随机写文件的所有随机写数据输入完毕后,异步重新计算并写入随机写文件更新的所有条带的校验数据。

本发明还提供一种基于纠删码的随机写系统,包括:

随机写文件设置模块:生成随机写文件并唯一标示随机写文件,设置随机写文件的文件数据安全级别;

随机写数据输入模块:输入随机写文件中的部分随机写数据,根据纠删码和文件数据安全级别将输入的随机写数据条带化,条带由数据存储单元组成,计算随机写数据大小、随机写偏移;

条带列表获取模块:根据随机写数据大小、随机写偏移获取本次随机写所跨越的条带列表;

数据存储单元写入模块:计算本次随机写所跨越的条带列表中各条带的需要更新的数据存储单元的范围,更新范围内的各数据存储单元,将更新的数据存储单元的数据进行分布式云存储并将存储的位置更新到数据库;

循环模块:用户再次输入随机写文件中的部分随机写数据,则重复执行随机写数据输入模块、条带列表获取模块、数据存储单元写入模块的操作,直到随机写文件的所有随机写数据输入完毕;

校验数据重新计算模块:随机写文件的所有随机写数据输入完毕后,异步重新计算并写入随机写文件更新的所有条带的校验数据。

与现有技术相比,本发明的有益效果包括:基于纠删码进行随机写操作,在对条带的数据存储单元进行数据写入时,只需要更新部分数据存储单元,不需要将整个条带的数据读取出来进行更新,减少了计算负担,提高了计算效率;同时,通过异步重新计算校验数据解决了随机写放大问题。

附图说明

图1是本发明提供的一种基于纠删码的随机写方法流程图;

图2是本发明提供的一种基于纠删码的随机写系统结构框图。

附图中:1、基于纠删码的随机写系统,11、随机写文件设置模块,12、随机写数据输入模块,13、条带列表获取模块,14、数据存储单元写入模块,15、循环模块,16、校验数据重新计算模块。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明的实施例中,基于纠删码技术建立条带(stripe)和条带管理者(stripemanager),条带管理者负责管理用户数据对应的条带,并将计算任务、编码任务下发给编码器;建立编码器(encoder),负责执行编码任务或计算任务;建立数据存储服务(storagerservice),负责将接收到的数据进行分布式云存储;条带(stripe)由数据存储单元(unit)组成,一个unit默认为大小为32kb。

本发明的实施例中,提供一种基于纠删码的随机写方法,包括:

s1、客户端向encoder请求随机写操作,生成随机写文件并唯一标示随机写文件,设置随机写文件的文件数据安全级别,唯一标示随机写文件后,生成随机写文件的唯一标示信息;唯一标示随机写文件的方法可以为:利用文件名或文件key值或文件唯一hash值标示随机写文件,以便于随机写文件的查找和使用,对应的,标示随机写文件后生成随机写文件的唯一标示信息为:文件名信息或文件key值信息或文件唯一hash值信息。

s2、encoder将随机写文件的唯一标示信息、文件数据安全级别等参数发送至stripemanager;

s3、stripemanager将随机写文件的唯一标示信息、文件数据安全级别等参数存储到数据库中,并返回encoder成功;

s4、encoder返回客户端随机写打开成功;

s5、用户在客户端输入随机写文件中的部分随机写数据,计算随机写数据大小、随机写偏移,并将随机写数据、随机写数据大小、随机写偏移发送给encoder;

s6、encoder根据随机写数据大小、随机写偏移向stripemanager获取本次随机写所跨越的条带列表;

s7、encoder根据stripemanager返回的条带列表,判断stripemanager是否返回了本次需要更新所跨越的所有条带,若只返回部分,则由encoder将条带信息补全;

s8、encoder计算本次随机写所跨越的条带列表中各条带的需要更新的数据存储单元(unit)的范围,用s5中用户输入的随机写数据更新范围内的各数据存储单元(unit),将更新的数据存储单元(unit)数据发送至storageservice中进行存储;

s9、encoder等所有的storageservice返回存储结果之后,将更新后的unit所在的storageservice的位置信息通知给stripemanager,stripemanager将这些信息更新到数据库,并返回encoder成功;

s10、encoder返回客户端本次随机写成功;

s11、用户再次在客户端输入随机写文件中的部分随机写数据,则重复执行步骤s5-s10,直到随机写文件的所有随机写数据输入完毕;

s12、随机写文件的所有随机写数据输入完毕后,客户端通知encoder随机写完成,encoder通知stripemanager随机写完成,stripemanager为该随机写文件更新的所有条带生成重新计算校验数据的任务,异步重新计算并写入随机写文件更新的所有条带的校验数据,并返回encoder成功,encoder返回客户端成功;

s13、整个随机写操作完成。

本发明所述的基于纠删码的随机写方法,步骤s1中:

文件数据安全级别设置为n+m级别,n表示组成一个条带的数据存储单元个数,m表示不发生数据丢失的前提下一个条带允许同时发生故障的数据存储单元个数。

本发明所述的基于纠删码的随机写方法,步骤s12中异步重新计算并写入随机写文件更新的所有条带的校验数据的步骤为:

将重新计算并写入随机写文件更新的所有条带的校验数据的任务均匀分发给不同编码器(encoder),编码器(encoder)接受任务后获取条带数据并根据获取的条带数据重新计算条带的校验数据,重新计算条带的校验数据完成后,将重新计算出的校验数据写到storageservice中,写入完成之后通知stripemanager任务执行成功,stripemanager更新本地数据库中条带信息。

本发明还提供一种基于纠删码的随机写系统1,包括:

随机写文件设置模块11:生成随机写文件并唯一标示随机写文件,设置随机写文件的文件数据安全级别;

随机写数据输入模块12:输入随机写文件中的部分随机写数据,根据纠删码和文件数据安全级别将输入的随机写数据条带化,条带由数据存储单元组成,计算随机写数据大小、随机写偏移;

条带列表获取模块13:根据随机写数据大小、随机写偏移获取本次随机写所跨越的条带列表;

数据存储单元写入模块14:计算本次随机写所跨越的条带列表中各条带的需要更新的数据存储单元的范围,更新范围内的各数据存储单元,将更新的数据存储单元的数据进行分布式云存储并将存储的位置更新到数据库;

循环模块15:用户再次输入随机写文件中的部分随机写数据,则重复执行随机写数据输入模块、条带列表获取模块、数据存储单元写入模块的操作,直到随机写文件的所有随机写数据输入完毕;

校验数据重新计算模块16:随机写文件的所有随机写数据输入完毕后,异步重新计算并写入随机写文件更新的所有条带的校验数据。

本发明所述的基于纠删码的随机写系统1,随机写文件设置模块11中:

唯一标示随机写文件后,生成随机写文件的唯一标示信息,将随机写文件的唯一标示信息、文件数据安全级别存储入数据库。

本发明所述的基于纠删码的随机写系统1,随机写文件设置模块11中:

文件数据安全级别设置为n+m级别,n表示组成一个条带的数据存储单元个数,m表示不发生数据丢失的前提下一个条带允许同时发生故障的数据存储单元个数。

本发明所述的基于纠删码的随机写系统1,条带列表获取模块13中:

获取本次随机写所跨越的条带列表后,判断获取的条带列表是否完整,如果不完整则将条带列表补充完整。

本发明所述的基于纠删码的随机写系统1,校验数据重新计算模块16中:

将重新计算并写入随机写文件更新的所有条带的校验数据的任务均匀分发给不同编码器,编码器接受任务后获取条带数据并根据获取的条带数据重新计算条带的校验数据,重新计算条带的校验数据完成后,写入重新计算出的条带的校验数据。

与现有技术相比,本发明的有益效果包括:基于纠删码进行随机写操作,在对条带的数据存储单元进行数据写入时,只需要更新部分数据存储单元,不需要将整个条带的数据读取出来进行更新,减少了计算负担,提高了计算效率;同时,通过异步重新计算校验数据解决了随机写放大问题。

以上所述本发明的具体实施方式,并不构成对本发明保护范围的限定。任何根据本发明的技术构思所做出的各种其他相应的改变与变形,均应包含在本发明权利要求的保护范围内。

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