一种基于纠删码的文件存储方法和系统的制作方法

文档序号:10534638阅读:191来源:国知局
一种基于纠删码的文件存储方法和系统的制作方法
【专利摘要】本发明公开了一种基于纠删码的文件存储方法和系统,其中,方法包括:接收写入文件请求;获取待写入文件的大小值K;根据预先设置的分解值Q,将待写入文件分解成至少S个子块,S=[K/Q];对至少S个子块中的每个子块进行纠删编码,使得每个子块生成L个纠删块;将所述至少S个子块中,每个子块所生成的L个纠删块分别写入不同的磁盘。本发明能够在节约存储空间、节约成本的基础之上,提升计算设备存储数据和读取数据的性能,尤其在提升读取目录、验证用户权限等操作的速度、节约文件系统的inode、提升数据迁移过程方面具有良好的效果。
【专利说明】
一种基于纠删码的文件存储方法和系统
技术领域
[0001]本发明涉及数据存储技术领域,特别涉及一种基于纠删码的文件存储方法和系统。
【背景技术】
[0002]近年来,随着视频码率越来越高,视频文件也变得越来越大,对文件的存储要求也越来越高。通常用户都会对数据冗余及安全性提出要求:必须对数据进行备份,防止由于单块硬盘损坏造成数据丢失。为了满足这一要求,现有技术通常采用多副本或者纠删码的冗余存储方案。
[0003]其中,多副本的方案的问题是成本过高。以最常用的三副本为例,为了存储一份数据,需要备份两个副本,这种冗余存储方案造成需要存储3倍于数据本身的量,占用大量的磁盘。
[0004]纠删码的原理就是将一份数据纠删编码后形成L个纠删块,其中,L个纠删块包括D块数据块和P块校验块,L = D+P,通过任意的D块数据都可以将缺失的P块数据恢复出来。例如,在D = 4,P = 2的纠删码方案中,数据安全性相当于三副本(即可丢失两个副本),但是该冗余存储方案只需要存储1.5倍于数据本身的量,相比于三副本模式,节省了 50%的成本。
[0005]纠删码方案相比多副本方案,虽然能够节省磁盘空间,但是也存在以下问题:
[0006]1.相比于多副本的冗余存储方案,纠删码会将一个完整的文件切分成非常多的较小的子块。比如,I个文件大小为4兆字节的文件,采用三副本方案,底层文件系统会存为3个4M的文件。但是采用纠删码方案(以D = 4,P = 2为例),底层文件系统会存为D = 4,P = 2的6个IM的文件。底层文件系统中的大量小文件会让文件系统的负载加重,使得读取目录、验证用户权限等操作都会比较慢,另外,过大的文件数量可能会耗光文件系统的inode。
[0007]2.当对存储集群内的磁盘进行扩容时,会将大部分写入导入到新磁盘中。这种情况下,当老磁盘数据量逐渐增多时,慢慢就会变为基本只能够响应读请求,这样会造成集群磁盘的负载严重不均衡。为使得每块磁盘的数据尽量均匀,从而充分发挥每块磁盘的带宽,数据映射机制会在扩容磁盘时,迫使数据进行一次迀移,将部分数据从老磁盘中迀入到新的磁盘。数据迀移过程中,势必需要从老磁盘中读取数据,如果大部分数据都是比较小的文件,则存在大量的随机10,从而使得迀移过程进行的非常缓慢,影响服务的可用性。
[0008]3.三副本方案中,每个副本的数据都是完全相同的,当存放一个副本的磁盘损坏时,另外两副本中的任一个写入到一个新磁盘即可。然而,在纠删码方案中,每个子块形成的纠删码都是不同的,比如前面例子提到的0 = 4少=2的情况,纠删码分为(0,1,2,3,4,5)六块,(0,I,2,3)是数据块,(4,5)是校验块,每个纠删码分别存储于一个磁盘上。当存放数据块O的磁盘损坏时,管是否在坏磁盘的位置上是否有新盘插入,必须有一种数据映射机制必须保证,原有的数据不会迀移,否则数据迀移会带来大量磁盘和网络带宽的浪费。
[0009]4.三副本方案中,由于每个副本的内容都是一致的,所以响应读请求时,只需任意挑选一个读取即可,但是采用纠删编码的情况下,在响应读请求时,现有技术中的读取方案需要进行优化。

【发明内容】

[0010]本发明的目的是:对现有技术中的纠删码方案进行改进,提供一种节约存储空间、减轻文件系统的负载、当对存储集群内的磁盘进行扩容时提高数据的迀移效率的文件存储方法和系统。
[0011]根据本发明的一个方面,提供了一种基于纠删码的文件存储方法,包括以下步骤:
[0012]接收写入文件请求;
[0013]获取待写入文件的大小值K;
[0014]根据预先设置的分解值Q,将待写入文件分解成至少S个子块,S=[Κ/Q];其中,所述S个子块中,每个子块的大小为所述分解值Q;
[0015]对至少S个子块中的每个子块进行纠删编码,使得每个子块生成L个纠删块;
[0016]将所述至少S个子块中,每个子块所生成的L个纠删块分别写入不同的磁盘。
[0017]进一步,所述基于纠删码的文件存储方法,其中:所述分解值Q的取值范围为32兆字节到96兆字节。
[0018]进一步,所述基于纠删码的文件存储方法,其中:所述分解值Q的取值范围为48兆字节到80兆字节。
[0019]进一步,所述基于纠删码的文件存储方法,其中:所述分解值Q的取值为64兆字节。
[0020]进一步,所述基于纠删码的文件存储方法,其中:在所述获取待写入文件的大小值K之后,还包括:当所述待写入文件的大小值K大于等于预设阈值I时,执行所述根据预先设置的分解值Q,将待写入文件分解成至少S个子块。
[0021]进一步,所述基于纠删码的文件存储方法,其中:所述预设阈值I的取值范围为大于或等于512兆字节。
[0022]进一步,所述基于纠删码的文件存储方法,其中:
[0023]在所述将每个子块所生成的L个纠删块分别写入不同的磁盘之后,当其中某一个磁盘损坏时,则采用以下方法对所述损害磁盘中所存储的纠删块进行迀移;
[0024]根据剩余的L-1个磁盘中所存储的纠删码进行纠删解码,恢复所述损害磁盘中所存储的纠删块;
[0025]根据预设的磁盘与纠删码的映射关系表,得到所述损害磁盘的位置,并将所述恢复的纠删块写入在所述损害磁盘的位置上所插入的新磁盘,或将所述恢复的纠删块写入另外的磁盘。
[0026]根据本发明的另一个方面,提供了一种基于纠删码的文件存储系统,包括以下模块:
[0027 ]请求接收模块,用于接收写入文件请求;
[0028]文件大小获取模块,获取待写入文件的大小值K;
[0029]文件分解模块,根据预先设置的分解值Q,将待写入文件分解成至少S个子块,S=[K/Q];其中,所述S个子块中,每个子块的大小为所述分解值Q;
[0030]纠删编码模块,对至少S个子块中的每个子块进行纠删编码,使得每个子块生成L个纠删块;和
[0031]磁盘写入模块,将所述至少S个子块中,每个子块所生成的L个纠删块分别写入不同的磁盘。
[0032]进一步,所述基于纠删码的文件存储系统,其中:
[0033]所述分解值Q的取值范围为32兆字节到96兆字节。
[0034]进一步,所述基于纠删码的文件存储系统,其中:
[0035]所述分解值Q的取值范围为48兆字节到80兆字节。
[0036]进一步,所述基于纠删码的文件存储系统,其中:所述分解值Q的取值为64兆字节。
[0037]进一步,所述基于纠删码的文件存储系统,还包括:比较模块,用于判断待写入文件的大小值K是否大于等于预设阈值I,若是,则向所述文件分解模块发送分解指令。
[0038]进一步,所述基于纠删码的文件存储系统,其中:所述预设阈值I的取值范围为大于或等于512兆字节。
[0039]进一步,所述基于纠删码的文件存储系统,还包括:数据迀移模块,用于当存储有L个纠删块的不同的磁盘的中,某一个磁盘损坏时,根据剩余的L-1个磁盘中所存储的纠删码进行纠删解码,恢复所述损害磁盘中所存储的纠删块;根据预设的磁盘与纠删码的映射关系表,得到所述损害磁盘的位置,并将所述恢复的纠删块写入在所述损害磁盘的位置上所插入的新磁盘,或将所述恢复的纠删块写入另外的磁盘。
[0040]本发明在提升读取目录、验证用户权限等操作的速度、节约文件系统的inode、提升数据迀移过程方面具有良好的效果。
【附图说明】
[0041 ]图1是本发明基于纠删码的文件存储方法流程图;
[0042]图2是本发明基于纠删码的文件存储系统的模块关系示意图。
【具体实施方式】
[0043]为使本发明的目的、技术方案和优点更加清楚明了,下面结合【具体实施方式】并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
[0044]图1是本发明基于纠删码的文件存储方法流程图。
[0045]如图1所示,基于纠删码的文件存储方法包括以下步骤:
[0046]步骤SI,接收写入文件请求。
[0047]当客户端有存储文件的需求时,向服务器发送写入文件请求,服务器接收写入文件请求。文件包括文字、图片、视频以及音频等形式的数据。需要说明的是,本发明针对大文件的存储时效果更显著,因此,优选的,可以在当写入文件请求为写入视频文件时,采用本发明。
[0048]步骤S2,获取待写入文件的大小值K。文件的大小值K可以为大于零的任意值。
[0049]步骤S3,根据预先设置的分解值Q,将待写入文件分解成至少S个子块,S=[K/Q]。
[0050]其中,所述S个子块中,每个子块的大小为所述分解值QJK/Q]表示对Κ/Q取整数,至少S个子块表示的含义为,若Κ/Q能够整除,则待写入文件分解成S个子块;若Κ/Q不能够整除,则待写入文件分解成S+1个子块。
[0051]步骤S4,对至少S个子块中的每个子块进行纠删编码,使得每个子块生成L个纠删块。L = D+P,其中,D为数据块的个数,P为校验块的个数。
[0052]步骤S5,将所述至少S个子块中,每个子块所生成的L个纠删块分别写入不同的磁盘。
[0053]需要说明的是,本发明针对大文件的存储时效果更显著,因此,优选的,可以在当写入文件请求为写入视频文件时,采用本发明。经多次试验验证,分解值Q的取值范围为32兆字节到96兆字节时,本发明在提升读取目录、验证用户权限等操作的速度、节约文件系统的inode、提升数据迀移过程方面具有良好的效果。进一步,分解值Q的取值范围为48兆字节到80兆字节时,本发明在提升读取目录、验证用户权限等操作的速度、节约文件系统的inode、提升数据迀移过程方面具有更好的效果。进一步,分解值Q的取值为64兆字节,本发明在提升读取目录、验证用户权限等操作的速度、节约文件系统的inode、提升数据迀移过程方面的效果最优。
[0054]以下,以待写入文件的大小值K分别为1024兆字节,分解值Q的取值为64兆字节,纠删码采用D = 4,P = 2,对上述步骤S3-S5进行进一步说明。
[0055]待写入文件的大小值K为1024兆字节,分解值Q的取值为64兆字节时,根据分解值64兆字节,将待写入文件分解成S= [K/Q] = 1024兆字节/64兆字节=16个子块。每个子块的大小为64兆字节。对16个子块中的每个子块进行纠删编码,使得每个子块生成L = D+P = 4+2=6个纠删块。即每个字块纠删编码后生成4个数据块,2个校验块。且每个数据块的大小为:64兆字节/4 = 16兆字节,每个校验块的大小也为16兆字节。这样,每个64兆字节的子块在纠删编码之后,生成了 6个每个大小为16兆字节的纠删块。将每个子块所生成的6个纠删块分别写入不同的磁盘。
[0056]通过以上方案,可知,本发明的存储方案中,1024兆字节的待写入文件在纠删编码之后,生成了 16*6 = 96个每个大小为16兆字节的纠删块。即在底层文件系统中,所存储的每个文件的大小为16兆字节,相比现有技术中在底层文件系统存储的每个文件的大小为I兆字节,减轻了文件系统的负载,提升了读取目录、验证用户权限等操作速度,另外,减少了文件数量,节约了文件系统的inode。当对存储集群内的磁盘进行扩容时,大部分数据都是16兆字节的文件,减少了随机10,从而使得数据迀移过程进行较快,提高了服务的可用性。
[0057]在上文中提到过,由于本发明在针对大文件的存储时效果更显著,因此,本发明提供了两种实施方式.
[0058]实施方式一:采用上述的步骤SI—S5。
[0059]实施方式二:在上述的步骤S2,获取待写入文件的大小值K之后,还包括:步骤S21,判断待写入文件的大小值K是否大于等于预设阈值I,若是,则执行上述步骤S3,根据预先设置的分解值Q,将待写入文件分解成至少S个子块。所述预设阈值I的取值范围为大于或等于512兆字节。根据本发明的经验数据证明,在实际情况中,存储于云服务器中的视频文件一般都在512兆字节以上,且多数在1024兆字节以上。
[0060]在本发明中,读取通过上述的方法存储于磁盘上的文件流程如下几个步骤:
[0061 ]步骤SlOl,接收读取文件请求;
[0062]步骤S102,获取待读取文件的在先子块,所述子块包括L个纠删块;
[0063]步骤S103,根据文件映射机制将所述L个纠删块发送到对应的L块磁盘上以读取数据;
[0064]步骤S104,若接收到纠删编码所要求的最低块数的磁盘的回应,则执行步骤S105,否则等待磁盘回应,直到等待到最低块数的磁盘的回应执行步骤S105。以D = 4,P = 2为例,纠删编码所要求的最低块数为4,则需要接收到最少4个磁盘的回应才能读取文件,若接收不到4个磁盘的回应,则等待磁盘回应,直到等待到4块磁盘的回应执行步骤S105。
[0065]步骤S105,通知客户端读取成功,并将读取内容返回给客户端。
[0066]在所述将每个子块所生成的L个纠删块分别写入不同的磁盘的步骤之后,若存储有L个纠删块的不同的磁盘的中,有一个磁盘被损坏,则采用以下步骤对的磁盘中所存储的纠删块进行数据迀移:
[0067]根据剩余的L-1个磁盘中所存储的纠删码进行纠删解码,恢复被损害的磁盘中所存储的纠删块;
[0068]根据磁盘与纠删码的映射关系,得到被损害的磁盘的位置,并将所述恢复的纠删块写入在被损害的磁盘的位置上所插入的新磁盘,或将所述恢复的纠删块写入另外的磁盘。
[0069]图2是本发明基于纠删码的文件存储系统的模块关系示意图。
[0070]如图2所示,基于纠删码的文件存储系统,包括请求接收模块、文件大小获取模块、文件分解模块、纠删编码模块和磁盘写入模块。
[0071]请求接收模块,用于接收写入文件请求。文件大小获取模块,获取待写入文件的大小值K。文件分解模块,根据预先设置的分解值Q,将待写入文件分解成至少S个子块,S=[K/Q];其中,所述S个子块中,每个子块的大小为所述分解值Q。纠删编码模块,对至少S个子块中的每个子块进行纠删编码,使得每个子块生成L个纠删块。磁盘写入模块,将所述至少S个子块中,每个子块所生成的L个纠删块分别写入不同的磁盘。
[0072]需要说明的是,本发明针对大文件的存储时效果更显著,因此,优选的,可以在当写入文件请求为写入视频文件时,采用本发明。经多次试验验证,分解值Q的取值范围为32兆字节到96兆字节时,本发明在提升读取目录、验证用户权限等操作的速度、节约文件系统的inode、提升数据迀移过程方面具有良好的效果。进一步,分解值Q的取值范围为48兆字节到80兆字节时,本发明在提升读取目录、验证用户权限等操作的速度、节约文件系统的inode、提升数据迀移过程方面具有更好的效果。进一步,分解值Q的取值为64兆字节,本发明在提升读取目录、验证用户权限等操作的速度、节约文件系统的inode、提升数据迀移过程方面的效果最优。
[0073]进一步,在本发明的一个优选实施例中,基于纠删码的文件存储系统还包括比较模块,用于判断待写入文件的大小值K是否大于等于预设阈值I,若是,则向所述文件分解模块发送分解指令。其中,所述预设阈值I的取值范围为大于或等于512兆字节。
[0074]在本发明的另一个实施例中,基于纠删码的文件存储系统还包括数据迀移模块,用于当存储有L个纠删块的不同的磁盘的中,有一个磁盘被损坏时,根据剩余的L-1个磁盘中所存储的纠删码进行纠删解码,恢复被损害的磁盘中所存储的纠删块;并根据磁盘与纠删码的映射关系,得到被损害的磁盘的位置,并将所述恢复的纠删块写入在被损害的磁盘的位置上所插入的新磁盘,或将所述恢复的纠删块写入另外的磁盘。
[0075]应当理解的是,本发明的上述【具体实施方式】仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。
【主权项】
1.一种基于纠删码的文件存储方法,包括: 接收写入文件请求; 获取待写入文件的大小值K; 根据预先设置的分解值Q,将待写入文件分解成至少S个子块,S=[K/Q];其中,所述S个子块中,每个子块的大小为所述分解值Q; 对至少S个子块中的每个子块进行纠删编码,使得每个子块生成L个纠删块; 将所述至少S个子块中,每个子块所生成的L个纠删块分别写入不同的磁盘。2.根据权利要求1所述的方法,其中: 所述分解值Q的取值范围为32兆字节到96兆字节。3.根据权利要求2所述的方法,其中: 所述分解值Q的取值范围为48兆字节到80兆字节。4.根据权利要求3所述的方法,其中: 所述分解值Q的取值为64兆字节。5.根据权利要求1-4任一项所述的方法,其中:在所述获取待写入文件的大小值K之后,还包括: 当所述待写入文件的大小值K大于等于预设阈值I时,执行所述根据预先设置的分解值Q,将待写入文件分解成至少S个子块。6.根据权利要求5所述的方法,其中: 所述预设阈值I的取值范围为大于或等于512兆字节。7.根据权利要求1-6任一项所述的方法,其中:在所述将每个子块所生成的L个纠删块分别写入不同的磁盘之后,当其中某一个磁盘损坏时,则采用以下方法对所述损害磁盘中所存储的纠删块进行迀移; 根据剩余的L-1个磁盘中所存储的纠删码进行纠删解码,恢复所述损害磁盘中所存储的纠删块; 根据预设的磁盘与纠删码的映射关系表,得到所述损害磁盘的位置,并将所述恢复的纠删块写入在所述损害磁盘的位置上所插入的新磁盘,或将所述恢复的纠删块写入另外的磁盘。8.—种基于纠删码的文件存储系统,包括以下模块: 请求接收模块,用于接收写入文件请求; 文件大小获取模块,获取待写入文件的大小值K; 文件分解模块,根据预先设置的分解值Q,将待写入文件分解成至少S个子块,S= [K/Q];其中,所述S个子块中,每个子块的大小为所述分解值Q; 纠删编码模块,对至少S个子块中的每个子块进行纠删编码,使得每个子块生成L个纠删块;和 磁盘写入模块,将所述至少S个子块中,每个子块所生成的L个纠删块分别写入不同的磁盘。9.根据权利要求8所述的系统,其中: 所述分解值Q的取值范围为32兆字节到96兆字节。10.根据权利要求9所述的系统,其中: 所述分解值Q的取值范围为48兆字节到80兆字节。11.根据权利要求10所述的系统,其中: 所述分解值Q的取值为64兆字节。12.根据权利要求8-10任一项所述的系统,还包括: 比较模块,用于判断待写入文件的大小值K是否大于等于预设阈值I,若是,则向所述文件分解模块发送分解指令。13.根据权利要求12所述的系统,其中: 所述预设阈值I的取值范围为大于或等于512兆字节。14.根据权利要求8-13任一项所述的系统,还包括: 数据迀移模块,用于当存储有L个纠删块的不同的磁盘的中,某一个磁盘损坏时,根据剩余的L-1个磁盘中所存储的纠删码进行纠删解码,恢复所述损害磁盘中所存储的纠删块;根据预设的磁盘与纠删码的映射关系表,得到所述损害磁盘的位置,并将所述恢复的纠删块写入在所述损害磁盘的位置上所插入的新磁盘,或将所述恢复的纠删块写入另外的磁盘。
【文档编号】G06F11/10GK105893169SQ201610201684
【公开日】2016年8月24日
【申请日】2016年3月31日
【发明人】吴兴义
【申请人】乐视控股(北京)有限公司, 乐视云计算有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1