一种基于水平编码的双盘循环校验方法与流程

文档序号:22544898发布日期:2020-10-17 02:12阅读:113来源:国知局
一种基于水平编码的双盘循环校验方法与流程

本发明属于数据存储领域,具体是一种基于水平编码的双盘循环校验方法。



背景技术:

随着互联网的快速发展和大数据时代的到来,网络数据信息呈现出爆炸性的增长趋势,对数据进行高效益的存储、管理和使用已经成为internet和其相关行业亟待解决的问题,对网络存储系统的性能提出了巨大的挑战。现如今,网络存储系统在存储容量、数据可用性以及i/o性能等方面都得到了很大的提高,网络存储在各行业得到越来越广泛的应用。目前,主流的网络存储技术主要为三种:直连存储(directedattachedstorage)、附网存储(networkattachedstorage)、存储区域网(storageareanetwork),每一种网络都有各自的适用领域。

存储需求的迅猛发展使得工业界对磁盘容量、节能等方面提出了更高的要求,为此chenpm,leeek,gibsonga等人提出了raid技术《raid:high-performance,reliablesecondarystorage[j].acmcomputingsurveys,1994,26(2):145-185》。然而随着大数据的发展,传统raid技术只有一块校验盘,在磁盘频繁读写方面存在先天不足,对于特定数据频繁存取的存储环境并不适应。数据在频繁读写数据盘的时候需要时刻进行校验盘校验,而校验盘的读写速率会成为数据存储的瓶颈,尤其是在交互性强的应用程序,网络游戏等读写频繁的系统中,此问题尤为严重。



技术实现要素:

针对现有技术的不足,本发明拟解决的技术问题是,提供一种基于水平编码的双盘循环校验方法。

本发明解决所述技术问题的技术方案是,提供一种基于水平编码的双盘循环校验方法,其特征在于该方法包括以下步骤:

(1)水平编码的布局由n个磁盘组成,其中包括n-2个数据盘和2个校验盘;n>2;将每个数据盘划分成m个大小相等的数据块;每个校验盘划分成m个与数据块相同大小的校验块;对所有磁盘进行条带化,位于同一行的数据块和校验块构成一个条带,共形成m个条带;数据盘之间并行工作,条带之间顺序工作;m≥1;

(2)在基于该布局的存储系统中构建一个映射表,映射表中相应的值表示相同偏移的条带中校验值所在位置;对映射表中的所有标记设置相同的初始值,该初始值代表当前校验值存放在第二个校验盘中;

在写请求到来时,按照数据块的大小将写请求数据分割为若干份,以条带为单位进行数据写操作,生成校验值并存入相应的校验盘;每存入一次新校验值后,都要对映射表中当前条带对应的标记取反,更新标记;直到写满所有条带;

(3)所有条带写满后,对所有最终校验值进行归并。

与现有技术相比,本发明有益效果在于:

1.提高数据的读写速率。由于传统的raid架构中只包含单个校验盘,在写入新数据时,需要读旧校验值和旧数据,再将生成的新数据写入校验盘中,这样会大大增加因读写校验盘而产生的延时。本方法在传统raid的基础上增加了一个校验盘,采用双校验盘操作,一个校验盘用于读校验数据,另一个校验盘用于写校验数据,分工作业,有效解决了校验盘的读写瓶颈。

2.采用具有分工读写的双校验盘操作,大大提高了存储系统的性能。

3.映射表占磁盘的空间较小,有效缩小了因校验磁盘归并产生的影响。

4.当某一个磁盘发生故障时,根据整个raid磁盘组中相同条带的其他数据块和校验块进行异或,保证存储系统的可靠性。

附图说明

图1是本发明实施例1的双盘循环校验流程示意图。

图2是本发明实施例1的映射表标记的初始值示意图。

图3是本发明实施例1的校验块p0中的局部校验值生成示意图。

图4是本发明实施例1的校验块p0'中的局部校验值生成示意图。

图5是本发明实施例1的校验块p0中的最终校验值生成示意图。

图6是本发明实施例1的校验块p1中的最终校验值和p2中的局部校验值生成示意图。

图7是本发明实施例1的经过四次写请求后生成的映射表标记示意图。

具体实施方式

下面给出本发明的具体实施例。具体实施例仅用于进一步详细说明本发明,不限制本申请权利要求的保护范围。

本发明提供了一种基于水平编码的双盘循环校验方法(简称方法),其特征在于该方法包括以下步骤:

(1)水平编码的布局由n个磁盘组成,其中包括n-2个数据盘和2个校验盘;将每个数据盘划分成m个大小相等的数据块,用于存储用户数据;每个校验盘划分成m个与数据块相同大小的校验块,用于存储校验数据;对所有磁盘进行条带化,位于同一行的数据块和校验块构成一个条带,共形成m个条带;数据盘之间并行工作,条带之间顺序工作;n>2;m≥1;

(2)在基于该布局的存储系统中构建一个映射表,映射表中相应的值表示相同偏移的条带中校验值所在位置;对映射表中的所有标记设置相同的初始值,初始值设置为0或1,该初始值代表当前校验值存放在第二个校验盘中;

在写请求到来时,按照数据块的大小将写请求数据分割为若干份,以条带为单位进行数据写操作,生成校验值并存入相应的校验盘;每存入一次新校验值后,都要对映射表中当前条带对应的标记取反,更新标记;直到写满所有条带;

(3)所有条带写满后,对所有最终校验值进行归并。

优选地,步骤2)具体是:在基于该布局的存储系统中构建一个映射表,映射表中相应的值表示相同偏移的条带中校验值所在位置;对映射表中的所有标记设置相同的初始值,初始值设置为0或1,该初始值代表当前校验值存放在第二个校验盘中;

第一次写请求到来,按照数据块的大小将写请求数据分割为若干份,将分割后的写请求数据从第一个条带的第一个数据块开始并行写入,新写入的数据与存储系统的初始值进行异或生成校验值,并存到第一个校验盘中,并对映射表中当前条带对应的标记取反;

第二次写请求到来,判断当前条带是否写满;若未写满,按照数据块的大小将写请求数据分割为若干份,将分割后的写请求数据写入与上一个写请求数据相邻的空闲数据块中,新写入的数据和第一个校验盘中已经存入的校验值相互异或生成新的校验值,并存到第二个校验盘中,并对映射表中当前条带对应的标记取反;若已写满,则从下一个条带的第一个数据块开始写入,新写入的数据与存储系统的初始值进行异或生成该条带的校验值,并存到第一个校验盘中,并对映射表中当前条带对应的标记取反;

第三次写请求到来,判断当前条带是否写满;若未写满,按照数据块的大小将写请求数据分割为若干份,将分割后的写请求数据写入与上一个写请求数据相邻的空闲数据块中,新写入的数据和第二个校验盘中已经存入的校验值相互异或生成新的校验值,并将第一次写请求时第一个校验盘中的校验值替换成新的校验值,同时对映射表中当前条带对应的标记取反;若已写满,则从下一个条带的第一个数据块开始写入,新写入的数据与存储系统的初始值进行异或生成该条带的校验值,并存到第一个校验盘中,同时对映射表中当前条带对应的标记取反;

重复上述步骤,直到写满所有条带。

优选地,步骤3)具体是:根据映射表更新的标记,确定每个条带的最终校验值的存储位置;最后,将所有条带的全部最终校验值归并到同一个校验盘中,再移除另一个校验盘。

优选地,步骤3)中,对所有的映射表标记进行求和,若求和结果大于标记个数m的1/2,则将最终校验值归并到第二个校验盘中,否则归并到第一个校验盘中。

优选地,当出现磁盘损坏时,损坏磁盘中原有的数据丢失,此时需要用新磁盘替换损坏磁盘并进行数据恢复,数据恢复的具体方法是:读取未损坏数据盘的数据中和未损坏校验盘的校验值,相同条带中的数据和校验值相互异或得到的结果为恢复数据,并将恢复数据存储到替换的新磁盘中。

实施例1

(1)如图1所示,水平编码有6个磁盘,其中4个数据盘(d0~d3)和2个校验盘(p和p'),每个数据盘分成m个大小相等的数据块,每个校验盘分成m个与数据块同样大小的校验块,为了便于理解,块大小设置为64kb。同一行的数据块和校验块构成一个条带,共m个条带(stripe0~stripem-1);

本实施例中的存储系统的初始值为0,映射表中所有标记的初始值设置为0(如图2),0代表当前的校验值在p',1代表当前校验值在p中;

(2)第一次写请求到来,如图3所示,数据大小为128kb,数据大小大于块大小,因此,将数据分割成2份,写到数据块b0,0和b1,0中,将b0,0和b1,0中的数据与存储系统的初始值相互异或生成的校验值写入校验盘p的校验块p0此时,将映射表中条带stripe0对应的标记取反,更新为1;

第二次写请求到来,如图4所示,数据大小为54kb,数据大小小于块大小,数据写到数据块b2,0中,将b2,0中的数据与p0相互异或生成的校验值写入校验盘p'的校验块p0'此时,将映射表中条带stripe0对应的标记取反,更新为0;

第三次写请求到来,如图5所示,数据块大小为24kb,数据大小小于块大小,数据写到数据块b3,0中,将b3,0中的数据与p0'相互异或生成的校验值写入校验盘p的校验块p0原校验值删除,替换成新校验值;此时,将映射表中条带stripe0对应的标记取反,更新为1;

第四次写请求到来,如图6所示,数据块大小为380kb,数据大小大于块大小,因此,将数据分割成6份,分别写到数据块b0,1、b1,1、b2,1、b3,1、b0,2和b1,2中,将b0,1、b1,1、b2,1、b3,1与存储系统的初始值相互异或生成的校验值写入校验盘p的校验块p1再把b0,2、b1,2与存储系统的初始值相互异或生成的校验值写入校验盘p的校验块p2此时,将映射表中条带stripe1对应的标记取反,更新为1;将映射表中条带stripe2对应的标记取反,更新为1;

其它条带重复上述步骤;

(3)所有条带写满后,对最终校验值进行归并;根据映射表更新的标记,确定每个条带的最终校验值的存储位置,其中根据图7,条带stripe0、stripe1和stripe2对应的标记都为1,因此,p0、p1和p2中存储的是最终校验值;最后,将所有条带的全部最终校验值归并到同一个校验盘中,再移除另一个校验盘。

假设在存储过程中数据盘d2发生故障或损坏,d2中原有的数据丢失,此时,用新磁盘d2'替换损坏磁盘d2并进行数据恢复,数据恢复的具体方法是:读取b0,0、b1,0、b3,0中的数据和校验块p0'中的局部校验值,b2,0数据由b0,0中的数据、b1,0中的数据、b3,0中的数据和校验块p0'中的局部校验值进行异或得出并将计算得到的b2,0数据写入数据盘d2'的数据块b2,0中。数据块b2,1~b2,n-1的数据恢复方法相同。

本发明未述及之处适用于现有技术。

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