[转]Reed Solomon纠删码 
 
 
 
纠删码是存储领域常用的数据冗余技术, 相比多副本复制而言, 纠删码能够以更小的数据冗余度获得更高数据可靠性。 Reed Solomon Coding是存储领域常用的一种纠删码,它的基本原理如下:  给定n个数据块d1, d2,..., dn,n和一个正整数m, RS根据n个数据块生成m个校验块, c1, c2,..., cm。  对于任意的n和m,  从n个原始数据块和m 个校验块中任取n块就能解码出原始数据, 即RS最多容忍m个数据块或者校验块同时丢失(纠删码只能容忍数据丢失,无法容忍数据篡改,纠删码正是得名与此)。 
 
编码原理
RS编码以word为编码和解码单位,  大的数据块拆分到字长为w的word(字长w取值一般为8或者16位),然后对word进行编解码。 所以数据块的编码原理与word编码原理没什么差别, 为论述方便, 后文中变量Di, Ci将代表一个word。
首
先, 把输入数据视为向量D=(D1,D2,..., Dn), 编码后数据视为向量(D1, D2,..., Dn, C1, C2,..,
Cm),RS编码可视为如图1所示矩阵运算。 下图最左边是编码矩阵,
矩阵上部是单位阵(n行n列),下边是vandermonde矩阵B(m行n列), vandermode矩阵如图2所示,
第i行,第j列的原数值为j^(i-1)。之所以采用vandermonde矩阵的原因是, RS数据恢复算法要求编码矩阵任意n*n子矩阵可逆。
图1: 编码运算
图2:vandermode矩阵
数据恢复原理
RS最多能容忍m个删除错误。 数据恢复原理的过程如下:
(1)从编码矩阵中删去丢失数据块和丢失编码块对应行。  假设D1、C2丢失,     根据图1所示RS编码运算等式,我们得到如下B'以及等式。  
(2)由于B‘是可逆的, 两边乘上B’逆矩阵。 
(3)得到如下原始数据D的计算公式 
(4)对D重新编码,得到丢失的校验码
 
矩阵求逆采用高斯消元法,   需要进行实数加减乘除四则运算,无法作用于字长为w的二进制数据。 为了解决这个问题, RS采用伽
罗华群GF(2^w)中定义的四则运算法则。 GF(2^w)域有2^w个值, 每个值都对应一个低于w次的多项式,
这样域上的四则运算就转换为多项式空间的运算[2]。  GF(2^w)域中的加法就是XOR, 乘法比较特殊,需要维护两个大小为2^w -1的表格:
log表gflog,反log表gfilog。 
乘法公式:  a * b = gfilog(gflog(a) + fglog(b)) % (2^w -1)
 
 
小结
RS的特点:
(1) 低冗余度,高可靠性。
(2) 数据恢复代价高。 丢失数据块或者编码块时, RS需要读取n个数据块和校验块才能恢复数据, 数据恢复效率也在一定程度上制约了RS的可靠性。
(3) 数据更新代价高。 数据更新相当于重新编码, 代价很高, 因此常常针对只读数据,或者冷数据。
(4) RS编码依赖于两张2^w-1大小的log表, 通常只能采用16位或者8位字长,不能充分利用64位服务器的计算能力, 具体实现上可能要做一些优化。
 
 
参考文献:
[1]James S. Plank. Erasure Codes For Storage Application. 

[2]James S. Plank. A Tutorial on Reed-Solomon Coding for Fault-Tolerance in RAID-like Systems

[转]Reed Solomon纠删码的更多相关文章

  1. ceph之纠删码

    转自:http://m.blog.csdn.net/blog/skdkjxy/45695355 一.概述 按照误码控制的不同功能,可分为检错码.纠错码和纠删码等. 检错码仅具备识别错码功能 而无纠正错 ...

  2. 应用AI芯片加速 Hadoop 3.0 纠删码的计算性能

    本文由云+社区发表 做为大数据生态系统中最重要的底层存储文件系统HDFS,为了保证系统的可靠性,HDFS通过多副本的冗余来防止数据的丢失.通常,HDFS中每一份数据都设置两个副本,这也使得存储利用率仅 ...

  3. RS(纠删码)技术浅析及Python实现

    前言 在Ceph和RAID存储领域,RS纠删码扮演着重要的角色,纠删码是经典的时间换空间的案例,通过更多的CPU计算,降低低频存储数据的存储空间占用. 纠删码原理 纠删码基于范德蒙德矩阵实现,核心公式 ...

  4. Erasure Coding(纠删码)深入分析

    http://blog.sina.com.cn/s/blog_57f61b490102viq9.html 1.前言 Swift升级到2.0大版本后宣称开始支持纠删码,这其实是一个很有意义的特性,主要是 ...

  5. MICS:副本和纠删码混合存储系统

    摘要 云存储系统的三个指标: 高可靠性,低存储开销,高读写性能. 这三个指标是没有办法同一时候满足的,许多时候须要进行tradeoff. 副本系统和纠删码是两种在存储系统中广泛使用的策略,它们在保证高 ...

  6. Erasure Coding(纠删码)深入分析 转

    1.前言 Swift升级到2.0大版本后宣称开始支持纠删码,这其实是一个很有意义的特性,主要是能够在一定程度上解决3副本空间浪费太多的问题.因为3副本这一点是swift推广的最大障碍之一,成本的增加吓 ...

  7. Ceph纠删码编码机制

    1 Ceph简述 Ceph是一种性能优越,可靠性和可扩展性良好的统一的分布式云存储系统,提供对象存储.块存储.文件存储三种存储服务.Ceph文件系统中不区分节点中心,在理论上可以实现系统规模的无限扩展 ...

  8. Swift对象创建过程(PUT Object)——纠删码策略(二)

    相应Object使用纠删码(EC)作为存储策略时,BaseObjectController类中PUT和GET需要调用的一些方法会被ECObjectController中相应函数覆盖. 在GET Obj ...

  9. 浅谈Ceph纠删码

    目  录第1章 引言 1.1 文档说明 1.2 参考文档 第2章 纠删码概念和原理 2.1 概念 2.2 原理 第3章 CEPH纠删码介绍 3.1 CEPH纠删码用途 3.2 CEPH纠删码库 3.3 ...

随机推荐

  1. 关于BitmapFactory解析流的问题a

    今天碰到了一个超级恶心的问题,BitmapFactory.decodeStream(bis,null,options)一直是返回NULL 问题是这样子的: InputStream is= respon ...

  2. SVN与TortoiseSVN实战:补丁详解

    硬广:<SVN与TortoiseSVN实战>系列已经写了五篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:Tor ...

  3. OpenJudge 2809 计算2的N次方

    1.链接地址: http://bailian.openjudge.cn/practice/2809/ 2.题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 任意给定一个正整数N(N ...

  4. (图 BFS)走迷宫

    题目: 给一个迷宫,求出从起点到终点的路径.迷宫 src.txt 文件内容如下,第一行是迷宫的行列数,后面行是迷宫,1表示可行走,0表示不可以通过,起点是最左上角,终点是最右下角: 解析: 其实就是图 ...

  5. c#中$.ajax的使用

      <script type="text/javascript">  var telphone = { type: "getphone", &quo ...

  6. POJ C程序设计进阶 编程题#4:Tomorrow never knows?

    来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 甲壳虫的<A day ...

  7. 软件工程 speedsnail 冲刺4

    2015-5-8 完成任务:学习了黑马android教学视频7.8.9集,对布局和计划做了调整: 遇到问题: 问题1 异常 Warning: Activity not started, its cur ...

  8. Git一张图学习

  9. "/Date(1405056837780)/" 时间转换

    //往往json传过来的时间都是"/Date(1405056837780)/" //转换需要的方法 String.prototype.ToString = function (fo ...

  10. 网页打包安卓APP流程

    搭建环境过程: 1. 安装JDK. 参见http://www.cnblogs.com/Li-Cheng/p/4334985.html. 注:实质上到该网址上下载好JDK安装包,安装后添加一个环境变量: ...