解码方法和装置及云存储方法和系统的制作方法
【技术领域】
[0001]本发明涉及云存储技术领域,具体涉及一种解码方法和装置及云存储方法和系统。
【背景技术】
[0002]云存储是指通过集群应用、网络技术或分布式文件系统等功能,将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能的一个系统。在云存储系统中,文件一般被分片保存在多个云存储服务器中。此外,在数据通讯时,需要通讯的数据也会被分为多个分片,逐片传送给对方。
[0003]在数据存储和通讯时,为了解决可靠性的问题,可采用纠删码(Erasure Codes,简称为EC)技术,将文件进行编码,分为若干个原始数据分片和校验分片,分别进行存储或通讯。里德-所罗门(Reed-Solomon,简称为RS)纠删码是一种常用的EC技术,它将原始文件编码后,分为大小相同的m个原始数据分片和η个校验分片,分别进行存储或通讯。对于文件存储或者通讯接收方,只要获得其中任意m个分片,即可通过解码方式恢复原文件或者数据,因此可以抗η个分片损坏或者丢失,大大提高了系统的可靠性。对于计算机文件存储,纠删码系统的存储空间利用率为m/(m+n),远远高于副本存储方式,因此,RS纠删码通过使用计算能力换取存储能力,显著降低了存储成本和运维成本。
[0004]1960年,里德(1.S.Reed)和所罗门(G.Solomon)提出了一种构造纠删码的方法,使用该方法的纠删码被称作Reed-Solomon码,简称RS码。基于RS编码技术构造的纠删码则称作RS纠删码。一个(n,k)纠删码是把k个源数据编码为n (n>k)个数据,使得用这η个数据中任意k个数据均可重构原来的k个源数据。采用m个分片和η个校验分片的纠删码体制就是(m+n,m)纠删码。
[0005]RS纠删码的实现技术关键是寻找一个生成矩阵G,该矩阵中任意k列均线性无关。RS编码技术中,生成矩阵可以是范德蒙矩阵和柯西矩阵。使用范德蒙矩阵生成的编码叫范德蒙码(Vandermond Code),使用柯西矩阵生成的编码叫柯西码(Cauchy Code)。其编码原理是:原始数据D[D1,D2,..Dm]乘以生成矩阵G,产生m个原始数据D [Dl,D2,..Dm]和η个校验数据Ρ[Ρ1,Ρ2,..., Pn] ο解码原理是:在m+n个原始数据和校验数据中任意获得m个数据,组成待解码数据D’,例如[Dl,一Di,Pl..Pj]。在生成矩阵中去掉η个未出现数据对应的那一列,组成一个新的生成矩阵G,然后计算G的逆矩阵G’,最后D’*G’ =D0为了使矩阵运算的结果保持在实数域,运算改为限定在伽罗瓦(Galois)域G(2~8)或者G(2~16)进行。具体运算流程和特性,早已被研究透彻,在相关数学书籍和刊物上可以查到,因此在此不再赘述。
[0006]但是,无论范德蒙矩阵和柯西矩阵的RS纠删码体制的系统,在解码上都有一个共同的缺点,即通过D’ *G’ = D才能计算出D,因此只有收齐任意的m个分片后,如果其中含有校验分片,对应的解码生成矩阵G’和待解码数据D’才能确定,系统才能开始解码。在系统收到第m个分片前,即使知道该分片的编号,能够获得对应解码生成矩阵G’,但由于待解码数据D’ = [Dl, -Di,Pl..Pj],其中至少丢掉了一个分片数据,因此不能确定D’。只有获得第m个分片后,D’才能最终确定,系统才能开始解码,因此系统解码性能受制于任意m个分片中最慢的那个。在现有系统中,网络传输模块和解码计算模块是串行的,在收齐第m个分片前,网络传输模块在工作,而解码计算模块空闲;开始解码后,解码计算模块工作而网络传输模块空闲,降低了系统性能。
[0007]另一个缺点是,根据RS解码算法,解码计算量为O (η),即和校验分片数量η成正t匕。因此,待解码数据中含有的原始分片越多,校验分片越少,解码的性能就越好。考虑基于公网的P2P存储模型,对于m+n分片配置,客户端已经收到m_k个原始分片和k个校验分片,开始进行解码。在解码完成前,又收到t个原始分片。显然,t = k时表示客户端收到了全部原始分片,可以中止解码。但t〈k时,还是需要解码的,按照m-k+t个原始分片和k-t个校验分片解码,比以前m-k原始分片+k校验分片的配置更好。但如果终止编码重新开始,则以前的计算量和时间都浪费掉了。由于RS解码是一种相对耗时的计算,在解码时使用较少的校验分片能减少计算量,很好的提高性能。
[0008]因此,现有技术基于RS纠删码的解码方法中,存在受制于获得的m个任意节点中最大延迟节点的问题,以及一旦解码开始后,又获得新的数据分片后,系统无法利用从而降低性能的问题。此外,现有的解码方式,对输入数据的顺序有特定要求,一般分为两部分,前一部分是原数据集合,后一部分是校验数据的集合,解码方法不灵活。
【发明内容】
[0009]本发明提供一种解码方法和装置及云存储方法和系统,其可以解决现有技术中解码操作和数据获取工作串行进行,从而降低解码效率的问题。
[0010]为实现上述目的,一方面,本发明的实施例中提供了一种解码方法,包括步骤:
[0011]读取输入缓冲区的待解码数据,将读取到的包括原数据分片和校验数据分片的待解码数据移送至输出模块,并在输出模块中对待解码数据进行处理;
[0012]根据处理后输出模块中原数据区和待解码区域中数据分片的数量,选取相应的数据分片进行解码操作,将解码操作结果组合成全部原数据。
[0013]优选地,所述方法中,所述在输出模块中对待解码数据进行处理具体包括:
[0014]若读取到校验数据分片,则将所述校验数据分片与输出模块的待解码区域的相应位置处的已有数据进行异或操作,并将异或结果作为该位置处新的已有数据;
[0015]若读取到原数据分片,则将所述原数据分片移动到输出模块的原数据区的相应位置处,同时将所述原数据分片分别乘以生成矩阵对应行的全部元素,将各结果分别与输出模块的待解码区域的相应位置处的已有数据进行异或操作,并将异或结果作为该位置处新的已有数据。
[0016]优选地,所述方法中,所述根据处理后输出模块中原数据区和待解码区域中数据分片的数量,选取相应的数据分片进行解码操作具体包括:
[0017]若输出模块中原数据区和待解码区域中数据分片的数量之和不小于编码时的原数据分片的总数量m,则将原数据区中可获得的全部m-k个原数据分片和从待解码区域中选用的k个校验数据分片进行解码。
[0018]优选地,所述进行解码具体包括:
[0019]根据丢失的k个原数据分片的位置、和选用待解码区域的k个数据分片的位置,从生成矩阵中选取对应的元素构成选定矩阵,求出选定矩阵的逆矩阵作为解码矩阵;
[0020]同时将从待解码区域中选用的k个数据分片组成待解码矩阵;
[0021]将所述待解码矩阵与所述解码矩阵相乘,得到所述丢失的k个原数据分片。
[0022]另一方面,本发明的实施例中还同时提供一种云存储方法,包括步骤:
[0023]将原数据进行编码,分为至少一个原数据分片和至少一个校验数据分片,分别进行存储和/或通讯;
[0024]在用户要获取所述原数据时,执行如上所述的解码方法。
[0025]再一方面,本发明的实施例中还提供了一种解码装置,包括:
[0026]数据获取模块,用于读取输入缓冲区的待解码数据,将读取到的包括原数据分片和校验数据分片的待解码数据移送至输出模块,并在输出模块中对待解码数据进行处理;
[0027]数据解码模块,用于根据处理后输出模块中原数据区和待解码区域中数据分片的数量,选取相应的数据分片进行解码操作,将解码操作结果组合成全部原数据。
[0028]优选地,所述数据获取模块具体包括:
[0029]输入缓冲区模块,用于接收并存放包括原数据分片和校验数据分片的待解码数据;
[0030]判断和读取模块,用于读取输入缓冲区模块内的待解码数据,若读取到校验数据分片,则将所述校验数据分片与输出模块的待解码区域的相应位置处的已有数据进行异或操作,并将异或结果作为该位置处新的已有数据;若读取到原数