一种基于磁盘阵列的数据存储及读取方法

文档序号:6639799阅读:550来源:国知局
一种基于磁盘阵列的数据存储及读取方法
【专利摘要】本发明提供一种基于磁盘阵列的数据存储方法,其中每个条带包括空子条带和纠删码子条带;存储方法包括下列步骤:1)确定需要写入数据的条带并将其作为当前条带;2)当需要写入的数据是全条带数据时,将所述全条带数据写入当前条带的空子条带,写入完毕后将该空子条带转换为纠删码子条带;3)在新的纠删码子条带生效后,将当前条带的原有纠删码子条带转换为空子条带。所述条带还可以进一步包括镜像子条带。另外,本发明还提供了相应的基于磁盘阵列的数据读取方法。本发明能够解决纠删码技术中的WriteHole问题;能够提高基于纠删码的存储系统的I/O性能;无论在写入数据块较多还是较少时均能达到较高的性能。
【专利说明】一种基于磁盘阵列的数据存储及读取方法

【技术领域】
[0001]本发明涉及存储【技术领域】,具体地说,本发明涉及一种基于磁盘冗余阵列的数据存储及读取方法。

【背景技术】
[0002]副本和纠删码技术是目前常用的两种高可靠技术。其中,副本技术就是将一份数据完整的拷贝多份存储,以η份副本为例,使用副本技术后,磁盘阵列能够存储数据的量只占原始储存容量的1/η,这会导致硬件采购成本、降温成本、空间占用成本大幅提高。而纠删码(erasure code)技术能够以更小的数据冗余度获得更高数据可靠性。它的基本原理如下:给定η个数据块屯,d2,..., dn,RS技术中根据这η个数据块生成m个校验块Cl,c2,..., cm。对于任意的η和m,从原始数据块及其校验块中任取不少于η块就能解码出原始数据,即纠删码技术中最多容忍m个数据块或者校验块同时丢失。
[0003]纠删码在存储中的应用典型代表就是RAID(Redundant Array of IndependentDisks,独立磁盘冗余阵列)。RAID技术将多块磁盘形成一个有机整体,能够提供整体更高的可靠性、容量、性能。使用RAID技术,高性能计算(HPC)使用的文件系统能够以很小的存储开销(〈25% )保证数据高可用性。然而,目前的纠删码技术也存在自身的一些缺陷。
[0004]一方面,现存的RAID类型存储技术存在WriteHole问题(又称非一致性更新问题),其中包括广为应用的RAID5,RAID6等。RAID技术中,n+m个分布在不同磁盘上的数据块构成一个具有一致性的条带,RAID条带的一致性是指条带中的数据块和校验块符合预设的不变式,这样,条带中任一数据块丢失时,只要从η个原始数据块和m个校验块中任取不少于η块,就能根据预设的不变式解码出原始数据。当条带中的某个或某些数据块需要修改时,系统通常需要读出相应的一个或多个校验块,然后根据新的数据块重新计算校验块,最后再同时写入新的数据块和校验块。如果在同时写入的过程中突然发生RAID驱动故障(如系统崩溃或断电),就可能会出现部分数据块或校验块已修改,而另一部分数据块或检验块尚未修改完成的现象,以及同一块数据块或校验块只修改了一部分而另一部分未修改完成的现象,上述现象将导致条带上的数据块和校验块不一致的问题,又称为非一致性更新问题(Inconsistent Update Problem)。而当需要同时更新的数据块和校验块的数目和超过m时,上述非一致性更新问题会导致相应条带中的数据,无论是故障前的老数据还是要写入的新数据,都无法利用纠删码技术恢复出来,此时就产生了 WriteHole。
[0005]另一方面,相对于副本技术,基于纠删码技术的存储系统I/O性能较弱。首先,纠删码技术中,写入操作依赖对旧数据和旧校验的同步读取操作,当写入数据块较少时,其性能相对较低。其次,纠删码比副本需要更多的缓存来优化写性能,难以适用于需要大量并发写操作的应用场合。再者,冗余副本可用来提供更多的读数据带宽和进行负载平衡的空间,而现有的纠删码技术不具备上述优点。


【发明内容】

[0006]因此,本发明的任务是提供一种能够克服上述缺陷的基于磁盘阵列的数据存储及读取解决方案。
[0007]本发明提供了一种基于磁盘阵列的数据存储方法,所述磁盘阵列包括至少一个逻辑卷,所述逻辑卷包括多个条带,其中每个所述条带能够存储满足纠删码不变式的一组数据块及其校验块;其特征在于,每个所述条带包括空子条带和纠删码子条带;所述基于磁盘阵列的数据存储方法包括下列步骤:
[0008]I)确定需要写入数据的条带并将其作为当前条带;
[0009]2)当需要写入的数据是全条带数据时,将所述全条带数据写入当前条带的空子条带,写入完毕后将该空子条带转换为纠删码子条带;所述全条带数据是所述的满足纠删码不变式的一组数据块及其校验块;
[0010]3)在新的纠删码子条带生效后,将当前条带的原有纠删码子条带转换为空子条带。
[0011]其中,所述每个所述条带还包括镜像子条带,所述逻辑卷还包括副本存储区;
[0012]所述基于磁盘阵列的数据存储方法还包括步骤:
[0013]4)当需要写入的数据是非全条带数据时,将所述非全条带数据写入当前条带的镜像子条带,写入所述镜像子条带的数据块被镜像至对应的副本存储区。
[0014]其中,所述步骤3)还包括:在新的纠删码子条带生效后,将当前条带的原有镜像子条带转换为空子条带;
[0015]所述步骤4)还包括:如果当前条带中没有镜像子条带,则选择任意一个空子条带作为镜像子条带,将所述非全条带数据写入该镜像子条带,写入所述镜像子条带的数据块被镜像至对应的副本存储区。
[0016]其中,每个所述条带包括η个数据块存储单元和m个校验块存储单元,对于空子条带,纠删码子条带和镜像子条带中的任意一种子条带,每个子条带均包括η个数据块子存储单元和m个校验块子存储单元;
[0017]所述步骤4)中,所述镜像子条带中的每个数据块子存储单元均对应于所述副本存储区的m个用于存储副本的子存储单元。
[0018]其中,所述步骤4)中,每个所述镜像子条带对应于m列竖条带,这m列竖条带作为该镜像子条带所对应的副本存储区,这m列竖条带分别与该镜像子条带中的m个校验块子存储单元处于同一列(即在同一磁盘上);每列竖条带包括η个副本子存储单元,这η个副本子存储单元分别对应于所述镜像子条带中的η个数据块子存储单元。
[0019]其中,所述逻辑卷中,相邻条带的校验块存储单元的位置顺序轮转,这样,相邻条带的镜像子条带所对应的副本存储区的位置也顺序轮转。
[0020]本发明还提供了一种基于磁盘阵列的数据存储方法,所述磁盘阵列包括至少一个逻辑卷,所述逻辑卷包括多个条带,其中每个所述条带能够存储满足纠删码不变式的一组数据块及其校验块;每个所述条带包括纠删码子条带和镜像子条带,所述逻辑卷还包括副本存储区;所述基于磁盘阵列的数据存储方法包括下列步骤:
[0021]10)确定需要写入数据的条带并将其作为当前条带;
[0022]20)当需要写入的数据是全条带数据时,将所述全条带数据写入当前条带的纠删码子条带;所述全条带数据是所述的满足纠删码不变式的一组数据块及其校验块;
[0023]30)当需要写入的数据是非全条带数据时,将所述非全条带数据写入当前条带的镜像子条带,写入所述镜像子条带的数据块被镜像至对应的副本存储区。
[0024]其中,每个所述条带包括η个数据块存储单元和m个校验块存储单元,对于纠删码子条带和镜像子条带中的任意一种子条带,每个子条带均包括η个数据块子存储单元和m个校验块子存储单元;
[0025]其中,所述基于磁盘阵列的数据存储方法还包括步骤:
[0026]40)当需要写入的数据是非全条带数据时,将所述非全条带数据写入当前条带的镜像子条带,写入所述镜像子条带的数据块被镜像至对应的副本存储区。
[0027]其中,所述步骤40)中,所述镜像子条带中的每个数据块子存储单元均对应于所述副本存储区的m个用于存储副本的子存储单元。
[0028]其中,所述步骤40)中,每个所述镜像子条带对应于m列竖条带,这m列竖条带作为该镜像子条带所对应的副本存储区,这m列竖条带分别与该镜像子条带中的m个校验块子存储单元处于同一列;每列竖条带包括η个副本子存储单元,这η个副本子存储单元分别对应于所述镜像子条带中的η个数据块子存储单元;
[0029]所述逻辑卷中,相邻条带的校验块存储单元的位置顺序轮转,这样,相邻条带的镜像子条带所对应的副本存储区的位置也顺序轮转。
[0030]本发明还提供了一种基于磁盘阵列的数据读取方法,所述磁盘阵列包括至少一个逻辑卷,所述逻辑卷包括多个条带,其中每个所述条带能够存储满足纠删码不变式的一组数据块及其校验块;每个所述条带包括空子条带,纠删码子条带和镜像子条带,所述逻辑卷还包括用于存储写入所述镜像子条带的数据块的镜像的副本存储区;其特征在于,包括下列步骤:
[0031]a)对于要读取的任意一个条带的任意存储位置,优先从该条带的镜像子条带的相应存储位置读取数据;
[0032]b)如果所述镜像子条带中的相应存储位置为空,则从同一条带的纠删码子条带的相应存储位置读取数据。
[0033]本发明还提供了一种基于磁盘阵列的数据读取方法,所述磁盘阵列包括至少一个逻辑卷,所述逻辑卷包括多个条带,其中每个所述条带能够存储满足纠删码不变式的一组数据块及其校验块;每个所述条带包括纠删码子条带和镜像子条带,所述逻辑卷还包括用于存储写入所述镜像子条带的数据块的镜像的副本存储区;其特征在于,包括下列步骤:
[0034]a)对于要读取的任意一个条带的任意存储位置,优先从该条带的镜像子条带的相应存储位置读取数据;
[0035]b)如果所述镜像子条带中的相应存储位置为空,则从同一条带的纠删码子条带的相应存储位置读取数据。
[0036]相对于现有技术,本发明具有下列技术效果:
[0037]1、本发明能够解决纠删码技术中的WriteHole问题。
[0038]2、本发明能够提尚基于纠删码的存储系统的I/O性能。
[0039]3、本发明无论在写入数据块较多还是较少时均能达到较高的性能。
[0040]4、本发明允许纠删码存储过程有较高延迟,并且减少纠删码同一数据块上并发的重复I/o。
[0041]5、本发明能够减少纠删码的缓存开销。
[0042]6、本发明能够提供更多的读数据带宽和进行负载平衡的空间。

【专利附图】

【附图说明】
[0043]以下,结合附图来详细说明本发明的实施例,其中:
[0044]图1示出了 RAID逻辑卷下的一个条带;
[0045]图2示出了根据本发明的一个实施例的条带中的三个子条带;
[0046]图3示出了本发明一个实施例中具有副本存储功能的一个条带的存储结构;
[0047]图4示出了本发明一个实施例中一组条带的一个轮转周期的示意图;
[0048]图5示出了本发明一个实施例中增加了副本存储区的由四个条带组成的条带组;
[0049]图6示出了本发明一个实施例中一次不满条带写中镜像操作的示意图;
[0050]图7示出了本发明一个实施例中基于图5所示的存储结构的写流程;
[0051]图8示出了本发明一个实施例中基于图5所示的存储结构的读流程。

【具体实施方式】
[0052]本发明提出了一种纠删码与镜像结合的存储方法,它兼具纠删码和副本技术的优点,下面结合实施例对本发明做进一步的描述。其中,为便于理解,首先由浅入深地介绍本发明的存储结构,然后再叙述基于此存储结构的读写流程及其相应技术效果。
[0053]根据本发明的一个实施例,提供了一种基于RAID的数据存储方法,其中,磁盘阵列的每一块磁盘(例如硬盘)作为一个故障单元,直接被整体系统感知。假设磁盘阵列中η块磁盘为普通的数据盘,而m块磁盘为校验盘(parity盘),那么在逻辑卷层可确定系统可靠性级别n+m,即支持最多m块磁盘故障而数据不丢失。下面以n = 12,m = 4(即12+4的可靠性)为例来叙述。
[0054]如前文所述,RAID中,逻辑卷下的条带是贯穿磁盘阵列中所有磁盘上的存储单元的一种数据结构,该数据结构用于在n+m个磁盘上分布式地存储η个数据块和m个校验块(各个数据块和校验块大小均相同),且这η个数据块和m个校验块具有一致性,即条带中的数据块和校验块符合预设的不变式。本实施例中采用里所码(Reed Solomon,缩写为RS)作为纠删码,此时,前述的预设的不变式就是基于RS技术的不变式。
[0055]图1示出了 RAID逻辑卷下的一个条带,其中每个方格表示一个存储单元,该存储单元用于存储一个数据块或者校验块,并且,图1所示的条带中的存储单元与磁盘阵列中的磁盘一一对应,这样,该条带就贯穿了磁盘阵列中所有磁盘。该条带中,标注了字母P的存储单元表示用于存储校验块的存储单元。
[0056]本实施例的数据存储方法中,系统的逻辑卷下的每个条带均包括三个逻辑子条带。图2示出了根据本发明的一个实施例的条带中的三个子条带,其中每个方格表示一个子存储单元(下文中有时将子存储单元称为chunk,它是本发明中进行数据存储和读取操作的基本单元),图2每一列共三个方格对应于图1中的一个方格,即三个子存储单元对应于图1中的一个存储单元。
[0057]本实施例中,每个子条带均可以在三个状态间转换,这三个状态分别是空(N),镜像(M)和纠删码(RS)状态,M状态也可以称为副本状态,N状态也可以称为备用状态。在一个条带中,其三个子条带中最多具有一个RS状态的子条带,最多具有一个Μ状态的子条带,最少具有一个Ν状态的子条带。
[0058]其中,子条带进入RS状态的含义是:该子条带受到RS校验的保护。本文中将进入RS状态的子条带称为RS子条带。如前文所述,在同一条带内,三个子条带中最多只允许有一个有效的RS子条带。当某个时刻RS子条带成功生效后,同一条带中的原有的RS子条带的数据都已经没有价值,空间可以回收。因此,当某个时刻RS子条带成功生效后,同一条带中的原有RS子条带转换至Ν状态。同理,当下一个RS子条带生效时,当前这个RS子条带也会失效。通过这种方式,即可保持每个条带中最多只有一个RS子条带。另外,在一个实施例中,当某个时刻RS子条带成功生效后,该条带的最新数据均全部存储至新的RS子条带中,所以同一条带中的Μ子条带的数据也都失去价值,其空间也可以回收,即此时同一条带中的原有Μ子条带也转换至Ν状态。也就是说,在本实施例中,当某个时刻RS子条带成功生效后,同一条带中的其它原有子条带均转换至Ν状态。
[0059]子条带进入Μ状态的含义是:用户向一个条带写入镜像数据时,该数据会被写入至该条带的Μ子条带中,从而获得镜像保护,本文中将进入Μ状态的子条带可称为Μ子条带。当前如果没有Μ条带,则将一个Ν条带作为新的Μ条带并写入镜像数据。在同一条带中,最多只允许有1个Μ子条带。
[0060]子条带进入Ν状态的含义是:该子条带中没有数据,可随时存入新的数据块,校验块或者镜像块。本文中将进入Ν状态的子条带称为Ν子条带。在同一条带内,三个子条带中至少有一个Ν子条带。当RS子条带和Μ子条带都最多只允许一条时,显然其中至少有一条Ν子条带。在某一时刻,某个Ν子条带上可能存放正在写入但未写入完成的数据,这个正在写入的数据可能是镜像数据,也可能是一条新的RS全条带数据(RS全条带数据是指具有一致性的η个数据块和m个检验块);当写入成功之后,N子条带根据成功写入的是镜像数据还是RS数据相应地转化为Μ子条带或者RS子条带。
[0061]本实施例中,对于每个条带,还为其分配用于存储副本(即用于实现镜像保护)的mXn个子存储单元(用于存储副本的子存储单元大小与条带中子存储单元一致),Μ子条带中的每个数据块子存储单元均对应于m个用于存储副本的子存储单元。图3示出了具有副本存储功能的一个条带的存储结构,其中包括三个子条带和四列副本存储空间。每列副本存储空间具有η个子存储单元,且该列副本存储空间位于用于存储校验块的子存储单元正下方,为便于描述,下文中有时将用于存储校验块的子存储单元称为校验子单元,将前述副本存储空间称为竖条带,四列副本存储空间就是四个竖条带。图3中,标记Ρ的方格代表用于存储检验块的子存储单元,标记Μ的方格代表三个子条带下方用于存储副本的子存储单元(为便于描述,下文称为副本子单元或者镜像子单元)。参考图3,当有数据块存入该条带的Μ子条带时,该数据块会被同时存储到与其对应的m个副本子单元中,具体的对应方式将在下文中进一步地说明。
[0062]进一步地,本实施例中,四个条带组成一组,条带组中将纠删码子条带的校验子单元顺序轮转,使得数据,校验信息和镜像均匀的分布在所有的磁盘上。图4示出了一组条带的一个轮转周期的示意图。图5示出了增加了副本存储区的由四个条带组成的条带组,其中用不同的灰度来区分不同的条带及其所属副本存储区,即相邻条带的镜像子条带所对应的副本存储区也随着纠删码子条带的校验子单元顺序轮转。这样,每个条带所对应的副本存储区正好错开。在优选实施例中,存储系统以条带组尺寸的整倍数来划分存储容量。
[0063]以上结合实施例介绍了本发明的条带和条带组的存储单元布局,下面再进一步地描述基于上述布局的数据读写方法及其技术效果。
[0064]在一个实施例中,写数据的形式包括满条带写和不满条带写。当磁盘阵列接收到以大小为全条带数据量(即前文所述的η个数据块大小)的写请求时,系统直接计算η个数据块的m个校验块,并将数据块和校验块写为纠删码子条带,以节省系统容量和带宽方面的开销。这种写入方式可称为满条带写。当写入数据较小时,例如需要写入的数据量未达到全条带数据量时,系统采用副本方式放置数据,即将数据存储至M子条带及其对应的副本存储区。本发明中将这种写入方式可称为不满条带写。如前文所述,每个子条带以一定的粒度分为n+m个chunk(即子单元)。图6示出了一次不满条带写中镜像操作的示意图,其中假设第一个子条带为M子条带,当要写第4个chunk时,同时下发m个镜像写。如图6所示,M子条带上每个chunk对应的镜像数据必定在对应于该条带的校验所在磁盘上,即M子条带上每个chunk对应的镜像数据均存储于校验磁盘上。这是因为:如果镜像数据存放在非校验磁盘上,那么一个M子条带上的某chunk必定存在两份副本在同一个磁盘上。这样当M-1个磁盘失效时,该chunk的数据全部丢失,这样就无法确保系统的可靠性为N+M。
[0065]图7示出了本发明一个实施例的基于图5所示的存储结构的写流程,具体包括下列步骤:
[0066]步骤101:接收写请求。本实施例中,写请求既可以是写入新数据的请求,也可以是对原有数据的修改请求。当写请求是对原有数据的修改请求时,需要先找到原有数据的存储位置,即存储原有数据的条带和相应的存储单元,所找到的条带被作为当前条带。当写请求是写入新数据的请求时,则任取一个尚未存储数据的条带作为当前条带。
[0067]步骤102:判断所述写请求是否为满条带写,如果是,进入步骤103,否则,进入步骤 108。
[0068]步骤103:基于需要写入的η个原始数据块,计算出额外的m个冗余校验块,从而得到具有n+m可靠性的全条带数据。
[0069]步骤104:对于当前选定的将要写入数据的条带,根据该条带的三个子条带的当前状态,确定该条带的N子条带位置。上述步骤103和104的顺序可以互换。
[0070]步骤105:下发对N子条带的N个原始数据块以及M个冗余校验数据块的写请求。
[0071]步骤106:修改步骤104所选条带中三个子条带的状态。被写入新数据的N子条带转为RS子条带,其余子条带标为N子条带。例如,当写入数据前三个子条带状态分别为N,M,RS时,写成功后三个子条带状态分别变更为RS,N,N状态。
[0072]步骤107:写成功后,通过unmap操作清空步骤104所选条带中的原M子条带和RS子条带上的数据。步骤106和107执行完之后,执行步骤112。另外,本步骤实际上是通过unmap操作将除了新RS子条带外的其余子条带都清空,如果原先只有N条带,可以跳过本步骤,直接执行步骤112。
[0073]上述步骤105至107可看作满条带写的过程,该过程中,由于新的全条带数据不覆盖原RS子条带上的数据,因此能够避免类RAID5系统中典型的WriteHole问题。
[0074]步骤108:判断所选条带中是否存在M子条带,如果是,进入步骤110,否则,进入步骤 109。
[0075]步骤109:选择一个N子条带作为新的Μ子条带,然后继续执行步骤110。
[0076]步骤110:下发对镜像子条带及对应竖条带上m个镜像位置的写请求。
[0077]步骤111:写成功后,修改镜像子条带对应的位图(即bitmap),位图表明Μ子条带上哪些位置有数据。
[0078]上述步骤108至111可看作不满条带写的过程,一方面,该过程中新的数据不覆盖原RS子条带上的数据,因此能够避免类RAID5系统中典型的WriteHole问题,另一方面,此时的写操作不需要读取数据和计算校验块等过程,因此能够提高系统的写性能。
[0079]步骤112:向上返回成功,本次写操作完毕。
[0080]图8示出了本发明一个实施例中基于图5所示的存储结构的读流程,具体包括下列步骤:
[0081]步骤201:接收读请求。本实施例中,假定要读取数据的位置(地址)已知,即要读取的条带已知。
[0082]步骤202:对于要读取的条带,获得该条带的三个子条带状态。
[0083]步骤203:判断要读取的当前条带中是否存在Μ子条带,如果判断为是,进入步骤204,否则,进入步骤207。
[0084]步骤204:获得Μ子条带的位图信息。
[0085]步骤205:判断位图中对应的子单元位(chunk位)是否为1 (本实施例中,1表示有效,即相应的子单元中有数据),如果是,进入步骤206,否则,进入步骤207。
[0086]步骤206:读取Μ子条带中对应的子单元,然后执行步骤208。本步骤中,可以从Μ子条带中对应的子单元的m个位于竖条带的副本位置同步读取数据,从而提高读速率。
[0087]步骤207:读取RS子条带中对应的子单元,然后执行步骤208。
[0088]步骤208:向上层返回数据,本次读操作完毕。
[0089]可以看出,图6所示的存储结构中,无论新写入的数据是需要镜像的小写(不满条带写)数据,还是无需镜像的满条带写数据,均有其存放的位置。对于一个条带,在任一时亥IJ,其各个子条带分别承担着明确的角色,因此在任一时刻,3个子条带的状态是确定的。并且,基于三子条带加竖条带的设计,对于每个条带,除了三个连续的的子条带(每个子条带由n+m个子单元构成)空间外,还为Μ子条带预留了逻辑空间大小为mXn的副本空间(即竖条带)。竖条带正好分布在子条带的P (即校验块)所在的盘上。这种副本数据块分布允许任意4个盘损坏后副本数据仍然是完整的,从而保障了不满条带写数据的高可靠性。
[0090]另外,在系统运行期间,当条带长时间未写入新数据时,将该条带的Μ子条带上的数据和RS子条带上的数据进行合并,合并后的数据作为一个满条带写操作写入空子条带中,并将该空子条带作为新的RS子条带,原Μ子条带和RS子条带转换为空子条带。
[0091]对于(n+m)的纠删码设计,本发明的一个轮转所需的条带个数为:最小公倍数(11+111,111)/111,对于每个纠删码条带,需要3(11+111)的纠删码逻辑空间(即三个子条带的逻辑空间)和nm的镜像数据空间。这样的存储空间占用量远远小于副本技术的占用量。并且,随着时间的推移,冷却下来的条带的Μ子条带和RS子条带的数据会自动合并,使得存储空间占用量进一步降低。当系统采用64位的地址空间时,假设系统最多支持的校验块数目m =5,那么需要的逻辑空间最多为原来的8倍,需要多占用3位地址空间,这对64位空间而言可以接受的。也就是说,本发明能够利用较小的存储空间开销,实现较高的可靠性,同时显著提升I/O性能。
[0092]另外,需要说明的是,本发明并不限于三个子条带的存储结构,在其它一些实施例中,每个条带也可以仅包含两个子条带。例如,在一个实施例中,每个条带由纠删码子条带和空子条带组成,在存储数据时,当需要写入的数据是全条带数据时,将所述全条带数据写入当前条带的空子条带,写入完毕后将该空子条带转换为纠删码子条带;在新的纠删码子条带生效后,将当前条带的原有纠删码子条带转换为空子条带。该方案可以解决现有技术中所存在的WriteHole问题。又例如,在另一个实施例中,每个条带由纠删码子条带和镜像子条带(逻辑卷中具有与镜像子条带对应的副本存储区)组成,在存储数据时,当需要写入的数据是全条带数据时,将所述全条带数据写入当前条带的纠删码子条带;所述全条带数据是所述的满足纠删码不变式的一组数据块及其校验块;当需要写入的数据是非全条带数据时,将所述非全条带数据写入当前条带的镜像子条带,写入所述镜像子条带的数据块被镜像至对应的副本存储区。该方案可以解决现有纠删码存储技术中对原有纠删码条带数据进行部分修改时所存在的延迟较高的问题,同时还能帮助提高基于纠删码的存储系统的I/O性能。
[0093]最后应说明的是,以上实施例仅用以描述本发明的技术方案而不是对本技术方法进行限制,本发明在应用上可以延伸为其它的修改、变化、应用和实施例,并且因此认为所有这样的修改、变化、应用、实施例都在本发明的精神和教导范围内。
【权利要求】
1.一种基于磁盘阵列的数据存储方法,所述磁盘阵列包括至少一个逻辑卷,所述逻辑卷包括多个条带,其中每个所述条带能够存储满足纠删码不变式的一组数据块及其校验块;其特征在于,每个所述条带包括空子条带和纠删码子条带;所述基于磁盘阵列的数据存储方法包括下列步骤: 1)确定需要写入数据的条带并将其作为当前条带; 2)当需要写入的数据是全条带数据时,将所述全条带数据写入当前条带的空子条带,写入完毕后将该空子条带转换为纠删码子条带;所述全条带数据是所述的满足纠删码不变式的一组数据块及其校验块; 3)在新的纠删码子条带生效后,将当前条带的原有纠删码子条带转换为空子条带。
2.根据权利要求1所述的基于磁盘阵列的数据存储方法,其特征在于,所述每个所述条带还包括镜像子条带,所述逻辑卷还包括副本存储区; 所述基于磁盘阵列的数据存储方法还包括步骤: 4)当需要写入的数据是非全条带数据时,将所述非全条带数据写入当前条带的镜像子条带,写入所述镜像子条带的数据块被镜像至对应的副本存储区。
3.根据权利要求2所述的基于磁盘阵列的数据存储方法,其特征在于,所述步骤3)还包括:在新的纠删码子条带生效后,将当前条带的原有镜像子条带转换为空子条带; 所述步骤4)还包括:如果当前条带中没有镜像子条带,则选择任意一个空子条带作为镜像子条带,将所述非全条带数据写入该镜像子条带,写入所述镜像子条带的数据块被镜像至对应的副本存储区。
4.根据权利要求3所述的基于磁盘阵列的数据存储方法,其特征在于,每个所述条带包括η个数据块存储单元和m个校验块存储单元,对于空子条带,纠删码子条带和镜像子条带中的任意一种子条带,每个子条带均包括η个数据块子存储单元和m个校验块子存储单元; 所述步骤4)中,所述镜像子条带中的每个数据块子存储单元均对应于所述副本存储区的m个用于存储副本的子存储单元。
5.根据权利要求4所述的基于磁盘阵列的数据存储方法,其特征在于,所述步骤4)中,每个所述镜像子条带对应于m列竖条带,这m列竖条带作为该镜像子条带所对应的副本存储区,这m列竖条带分别与该镜像子条带中的m个校验块子存储单元处于同一列;每列竖条带包括η个副本子存储单元,这η个副本子存储单元分别对应于所述镜像子条带中的η个数据块子存储单元。
6.根据权利要求5所述的基于磁盘阵列的数据存储方法,其特征在于,所述逻辑卷中,相邻条带的校验块存储单元的位置顺序轮转,这样,相邻条带的镜像子条带所对应的副本存储区的位置也顺序轮转。
7.一种基于磁盘阵列的数据存储方法,所述磁盘阵列包括至少一个逻辑卷,所述逻辑卷包括多个条带,其中每个所述条带能够存储满足纠删码不变式的一组数据块及其校验块;其特征在于,每个所述条带包括纠删码子条带和镜像子条带,所述逻辑卷还包括副本存储区;所述基于磁盘阵列的数据存储方法包括下列步骤: 10)确定需要写入数据的条带并将其作为当前条带; 20)当需要写入的数据是全条带数据时,将所述全条带数据写入当前条带的纠删码子条带;所述全条带数据是所述的满足纠删码不变式的一组数据块及其校验块; 30)当需要写入的数据是非全条带数据时,将所述非全条带数据写入当前条带的镜像子条带,写入所述镜像子条带的数据块被镜像至对应的副本存储区。
8.根据权利要求7所述的基于磁盘阵列的数据存储方法,其特征在于,每个所述条带包括η个数据块存储单元和m个校验块存储单元,对于空子条带,纠删码子条带和镜像子条带中的任意一种子条带,每个子条带均包括η个数据块子存储单元和m个校验块子存储单元; 所述步骤4)中,所述镜像子条带中的每个数据块子存储单元均对应于所述副本存储区的m个用于存储副本的子存储单元。
9.根据权利要求8所述的基于磁盘阵列的数据存储方法,其特征在于,所述步骤4)中,每个所述镜像子条带对应于m列竖条带,这m列竖条带作为该镜像子条带所对应的副本存储区,这m列竖条带分别与该镜像子条带中的m个校验块子存储单元处于同一列;每列竖条带包括η个副本子存储单元,这η个副本子存储单元分别对应于所述镜像子条带中的η个数据块子存储单元; 所述逻辑卷中,相邻条带的校验块存储单元的位置顺序轮转,这样,相邻条带的镜像子条带所对应的副本存储区的位置也顺序轮转。
10.—种基于磁盘阵列的数据读取方法,所述磁盘阵列包括至少一个逻辑卷,所述逻辑卷包括多个条带,其中每个所述条带能够存储满足纠删码不变式的一组数据块及其校验块;其特征在于,每个所述条带包括空子条带,纠删码子条带和镜像子条带,所述逻辑卷还包括用于存储写入所述镜像子条带的数据块的镜像的副本存储区;其特征在于,包括下列步骤: a)对于要读取的任意一个条带的任意存储位置,优先从该条带的镜像子条带的相应存储位置读取数据; b)如果所述镜像子条带中的相应存储位置为空,则从同一条带的纠删码子条带的相应存储位置读取数据。
11.一种基于磁盘阵列的数据读取方法,所述磁盘阵列包括至少一个逻辑卷,所述逻辑卷包括多个条带,其中每个所述条带能够存储满足纠删码不变式的一组数据块及其校验块;其特征在于,每个所述条带包括纠删码子条带和镜像子条带,所述逻辑卷还包括用于存储写入所述镜像子条带的数据块的镜像的副本存储区;其特征在于,包括下列步骤: a)对于要读取的任意一个条带的任意存储位置,优先从该条带的镜像子条带的相应存储位置读取数据; b)如果所述镜像子条带中的相应存储位置为空,则从同一条带的纠删码子条带的相应存储位置读取数据。
【文档编号】G06F3/06GK104503706SQ201410810681
【公开日】2015年4月8日 申请日期:2014年12月23日 优先权日:2014年12月23日
【发明者】何文婷, 刘振军, 刘浏, 董欢庆, 张军伟, 蔡杰明, 杨琳 申请人:中国科学院计算技术研究所, 天津中科蓝鲸信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1