当前位置: 首页>編程日記>正文

基于范德蒙矩阵的Erasure code技术详解

基于范德蒙矩阵的Erasure code技术详解

在传统存储领域,随着磁盘容量的不断增大,RAID数据重构时间将会是一个非常严重的问题。大家知道,过长的数据重构时间意味着数据可靠性下降。所以,在RAID设计的过程中,一定要考虑数据重构的时间,并且尽可能的将“无数据保护状态”的时间降到最小。在不改变传统RAID架构前提下,只能通过增加数据冗余度来缓解大容量磁盘引入的超长数据重构时间的问题。这种思路就好比几年前,当RAID5无法满足过长数据重构时间时,只能被迫采用RAID6算法,通过RAID6能够提供两块盘的冗余度来缓解长时间数据重构的问题。随着时间的推移,目前,在很多应用中,RAID6也无法满足应用需求了。为了达到更高的数据冗余度,一个比较不错的选择是采用冗余度更大的编解码方式:Erasure Code。很多公司将基于这种编码方式的RAID称之为RAID7。

在互联网领域,通常采用Server SAN的存储架构方式。也就是将廉价的Server通过集群软件的方式组建一套分布式的存储系统。Google首先倡导了这种方式,架构了GFS系统,将很多非格式化的数据(例如网页)存储到这种分布式系统中。通常,这种廉价的Server是不具备RAID功能的,那么数据可靠性如何保证呢?在这种Server SAN中,通常会将数据复制多份存储到不同的节点上,一旦一个节点失效,数据可以从其它节点上获取。数据多节点复制的方式可以很好的提高数据可靠性,并且可以将读写数据流很好的分离。但是,带来的问题是存储利用率大为降低。对于一般的数据,通常会存储三份,对于非常重要的数据,会存储六份。如何平衡存储空间和数据可靠性成了分布式存储需要考虑的重要问题。Erasure Code可以平衡这两者关系,在提高存储空间利用率的前提下,不会影响数据可靠性。采用Erasure Code对数据进行编码冗余的方式和“网络RAID(RAIN)”的概念是很相像的。当互联网领域引入Erasure Code之后,需要考虑的问题是如何降低编解码的运算复杂度问题。

事实已经证明,Erasure Code作为一种数据编解码技术在大数据环境下有了十分迫切的需求。不仅传统的RAID需要这种技术,而且分布式存储也需要这种技术去提升存储资源利用率。

常用的Erasure code是基于范德蒙(Vandermonde)矩阵的RS算法。其基本思想很简单,采用范德蒙矩阵作为生成矩阵,得到校验数据。现假设输入数据为D1~Dn,生成的校验数据为C1~Cm,那么输入数据和校验数据之间的关系可以描述为:

 

wKiom1NmOYCAthUnAACRcYLRdKQ999.jpg

 

其中,

 

wKioL1NmOXWzeF4aAAAklV9KIf8826.jpg

 

 

为范德蒙矩阵,该矩阵为编码矩阵。所以,为了得到校验数据,主要的任务是将输入数据和编码矩阵相乘,得到的输出结果就是编码值。为了能够更好的表示磁盘上存储的数据,通常将编码矩阵方程表示如下:

 

wKioL1NmOY-TUV5hAABUp52VC98710.jpg

 

 

可以发现这个生成矩阵(A)就是单元矩阵和范德蒙矩阵的组合。输入数据(D)和生成矩阵(A)的乘积就是编码之后的存储数据(E)。采用传统RAID的思路去理解,编码之后的结果就是一个条带需要存储的所有数据。

编码过程我们已经很清楚了,生成矩阵的格式很规整。那么,问题是如何进行解码操作呢?当存储的数据d1~dn,c1~cm中有些数据无法读取时,如何进行数据恢复呢?从数学的原理来看,只要将读取的有效数据和生成矩阵的逆矩阵相乘就可以恢复丢失的数据。假设m个数据块丢失,则可以将m个数据块对应的矩阵A和E中的行删掉,得到新的n*n阶生成矩阵A2和1*n阶结果矩阵E2。由于生成矩阵是有范德蒙矩阵和单元矩阵的组合,所以,矩阵A的任意n行子集都可以保证线性无关。因此,需要恢复的数据可以通过A2和E2 的逆矩阵乘积得到,即D=逆(A2)*逆(E2)。

从数学的角度来看,我们现在常用的RAID5和RAID6算法只是范德蒙矩阵算法的一个子集而已。当冗余数据只有一个的时候,就退化成了RAID5算法,在实数域只需要将输入数据累加就可以得到校验码了。为了简化计算复杂度,编解码运算放到了迦罗话域,加法运算变成了XOR逻辑运算。当冗余数据有两个的时候,范德蒙矩阵退化成了RAID6算法,也可以在迦罗华域通过查表、XOR的方法完成运算。具体可以参考文章《一个IO的传奇一生(12)-- 磁盘阵列1》。

从这个角度来看,基于范德蒙矩阵的Erasure Code方法是传统RAID5/RAID6算法的扩展。在实现过程中,同样可以在迦罗华域中完成乘、除和加减法运算。为了实现快速算法,需要构建两张对数表和反对数表,然后通过查表和XOR运算快速实现编解码。

基于范德蒙矩阵的Erasure Code编解码原理比较简单,可以说是在RAID5/RAID6算法基础上的一种延伸。采用这种方法的算法复杂度还是比较高的,编码复杂度为O(mn),其中m为校验数据个数,n为输入数据个数。解码复杂度为O(n^3),解码具有较高的计算复杂度。

 

 


https://www.fengoutiyan.com/post/14586.html

相关文章:

  • 用matlab生成范德蒙矩阵
  • 范德蒙德行列式计算
  • 范德蒙矩阵
  • 范德蒙行列式的转置
  • matlab范德蒙德矩阵
  • 范德蒙行列式怎么计算
  • matlab生成范德蒙矩阵
  • matlab范德蒙德矩阵编写
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機