图解RS纠删码原理

※基本模型

假如有n个存储设备(这里可以理解为磁盘或节点)D1、D2…..,Dn,其中每个存储设备的容量为k个字节,这n个设备称为数据设备。m个存储设备,C1、C2、…..,Cm,每个设备的容量也为k个字节,这m个设备称为校验设备。其中每个校验设备的数据是通过数据设备的内容计算而来。


图解RS纠删码原理_第1张图片


※下图给出纠删码在物理逻辑层次应用的一个场景: D 是Data Device ,用于保存数据,C 是校验位,用于重建恢复数据,C 是D 通过纠删码编码得到的,如最常见的纠删码Reed-Solomen 码。

图解RS纠删码原理_第2张图片

※每个条带上的数据块生成对应条带上的校验块,数据块大小和校验块大小相同,一般把数据块的个数用k 表示,n 表示数据块和校验块总数,这样的编码称为[k,n] 编码,最多可以容n-k 个Data Devices 失效。


※如下图,假设一个条带上的数据块用矩阵D 表示,生成数据块D 的校验矩阵需要矩阵B 的帮助,如下图所示,B 由两部分组成上面是一个k×k 大小的单位矩阵I ,下面是生成校验位的n-k×k 大小的矩阵B*。


※这两部分分别与数据矩阵D 相乘生成两部分分别为数据部分D 和校验部分C(如下所示)。



※这两部分分别是由 I×D 和 B-×D 所生成的。


※如果数据中的数据块或者校验块发生了丢失,需要出原始的数据块。


※去掉丢失的数据块校验块对应在矩阵B 的行(row),得到矩阵B’ ,那么满足下面的等式:


对B’ 求逆矩阵得到B’-1 ,且我们知道矩阵B’ 和原始数据矩阵D 之积为去掉损坏数据的矩阵Survivours,满足下面的等式。



※为了求得原始数据,在上面等式两边左侧乘以B’ 的逆


※矩阵B’-1 和B’ 之积为k×k 的单位矩阵


※那么等式左侧即为原始数据。这样通过剩余数据矩阵Survivors 乘以对应矩阵B 的系数组成的矩阵的逆,就得到了数据矩阵,最终得到了原始数据。有了原始数据,校验数据也就不难求了。



注:上面图解还存在一个问题就是B’ 是否存在逆矩阵:如果rank(B’)

参考:http://www.dullgull.com/2012/07/%E5%9B%BE%E8%A7%A3%E7%BA%A0%E5%88%A0%E7%A0%81%E5%8E%9F%E7%90%86/


你可能感兴趣的:(C)