一、概述

Erasure Code可以应用于分布式存储系统中,替代多份数据拷贝的数据冗余方式,从而可以提高存储空间利用率。此外,Erasure code还可以应用于传统RAID系统中,增加数据冗余度,支持多块盘同时发生故障,从而可以提高数据可靠性。

采用范德蒙矩阵可以构建Erasure code(关于范德蒙矩阵的编解码方法,可以参考文章《基于范德蒙矩阵的Erasure code技术详解》),其生成矩阵表示如下:

采用范德蒙矩阵作为编码矩阵的问题在于算法复杂度太高,其解码算法复杂度为O(n^3)。采用目前的处理器技术,还是会影响IO的性能,增加IO延迟。因此,找到一种更加合理的编码矩阵,降低算法复杂度是Erasure code得以广泛应用的一个前提条件。

二、基于柯西矩阵的编解码过程

基于柯西矩阵的李德-所罗门(RS)码是在范德蒙矩阵的RS码基础上作了两点重要改进:

1,用柯西矩阵来代替范德蒙矩阵。由于范德蒙矩阵求逆运算的复杂度为O(n^3),而柯西矩阵求逆运算的复杂度仅为O(n^2)。因此,采用柯西矩阵可以降低解码的运算复杂度。

2,采用有限域二进制矩阵的方式来提高运算效率,直接将乘法转换成XOR逻辑运算,大大降低了运算复杂度。

大家知道,柯西矩阵可以描述如下:

X(i)和Y(i)都是迦罗华域GF(2^w)中的元素。柯西矩阵有两个特点:第一,任意一个子方阵都是奇异矩阵,存在逆矩阵;第二,柯西矩阵在迦罗华域上的求逆运算,可以在O(n^2)的运算复杂度内完成。

采用柯西矩阵进行Erasure code编码过程描述如下:

其运算过程和范德蒙矩阵编码过程是一样的,只不过采用柯西矩阵替换了范德蒙矩阵。从运算过程来看,编码过程是迦罗华域的系列乘法、加法运算。

柯西解码方程描述如下:

当任何一个数据元d(i)遭到损坏时,需要通过解码过程进行数据恢复。数据解码过程可以分成如下几大步骤:

1,选取剩余有效的数据块,构成一个解码列向量。例如,d1、d3数据块损坏了,那么可以选取剩余数据d0、d2、c0、c2作为解码列向量。

2,摘取生成矩阵(柯西矩阵)中解码列向量所对应的行,构成方阵A,该矩阵的逆矩阵就是解码生成矩阵inv(A)。

3,解码生成矩阵inv(A)和解码列向量的乘积就可以得到丢失的数据d1和d3。

从整个过程来看,矩阵求逆过程是最大的运算开销。解码过程和范德蒙矩阵编码是一样的,但是柯西矩阵的求逆运算复杂度要低于范德蒙矩阵,因此,具有更好的性能。

三、柯西编解码过程优化

从编解码过程来看,柯西编解码最大的运算量是乘法和加法运算。在范德蒙编码的时候,我们可以采用对数/反对数表的方法将乘法运算转换成了加法运算,并且在迦罗华域中,加法运算转换成了XOR运算。

柯西编解码为了降低乘法复杂度,采用了有限域上的元素都可以使用二进制矩阵表示的原理,将乘法运算转换成了迦罗华域“与运算”和“XOR逻辑运算”,提高了编解码效率。

从数学的角度来看,在迦罗华有限域中,任何一个GF(2^w)域上的元素都可以映射到GF(2)二进制域,并且采用一个二进制矩阵的方式表示GF(2^w)中的元素。例如,GF(2^3)域中的元素可以表示成GF(2)域中的二进制矩阵:

图中,黑色方块表示逻辑1,白色方块表示逻辑0。通过这种转换,GF(2^w)域中的阵列就可以转换成GF(2)域中的二进制阵列。生成矩阵的阵列转换表示如下:

在GF(2^w)域中的生成矩阵为K*(K+m),转换到GF(2)域中,变成了(w*k) * (w*(k+m))二进制矩阵。采用域转换的目的是简化GF(2^w)域中的乘法运算。在GF(2)域中,乘法运算变成了逻辑与运算,加法运算变成了XOR运算,可以大大降低运算复杂度。和范德蒙编解码中提到的对数/反对数方法相比,这种方法不需要构建对数/反对数表,可以支持w为很大的GF域空间。采用这种有限域转换的方法之后,柯西编码运算可以表示如下:

四、总结

可以说柯西编码是在范德蒙编码基础之上的一种优化。其主要有两点:第一降低了矩阵求逆的运算复杂度;第二通过有限域转换,将GF(2^w)域中的元素转换成二进制矩阵,简化了乘法运算。所以,柯西编解码要优于范德蒙矩阵的方法,柯西编码的运算复杂度为O(n(n- m)),解码复杂度为O(n^2)。

基于柯西矩阵的Erasure Code技术详解相关推荐

  1. 技术详解:基于人脸识别的 AI 弹幕

    --------点击屏幕右侧或者屏幕底部"+订阅",关注我,随时分享机器智能最新行业动态及技术干货---------- 有时候,弹幕比剧情还精彩,那些脑洞大开.观点鲜明的弹幕,可以 ...

  2. 关于《J2ME手机游戏开发技术详解》的问题!

    这里只是对我书中的bug和没有说明白的技术处说明,对于具体的编程问题,我只是点到为止! 对于3D部分的问题,由于我现在工作重点不在这上面,有些问题的回答我感到吃力,也不太想回答,详情请看我的文章. 我 ...

  3. 【H.264/AVC视频编解码技术详解】七、 熵编码算法(1):基础知识

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  4. python数据科学课后答案_Python数据科学-技术详解与商业实践-第五讲作业

    作者:Ben,著有<Python数据科学:技术详解与商业实践>.<用商业案例学R语言数据挖掘>.<胸有成竹-数据分析的SAS EG进阶>作者.2005年进入数据科学 ...

  5. 作为SLAM中最常用的闭环检测方法,视觉词袋模型技术详解来了

    摘自:https://mp.weixin.qq.com/s/OZnnuA31tEaVt0vnDOy5hQ 作为SLAM中最常用的闭环检测方法,视觉词袋模型技术详解来了 原创 小翼 飞思实验室 今天 基 ...

  6. 基于C语言的JPEG编码代码详解

    一.基于C语言的JPEG编码代码详解 #include <stdio.h> #include <stdlib.h> #include <string.h>#prag ...

  7. 大数据发展规划及技术详解

    大数据发展规划及技术详解 1.BI的流程:主要是阐述一下BI的流程:第一,需求分析阶段,要搞清楚用户需求,就本例用户想要的是volte业务使用情况的月报表,必须要搞清楚月报表中包括哪些指标(包括维度指 ...

  8. 《策略驱动型数据中心——ACI技术详解》一1.3 数据中心设计

    本节书摘来自异步社区<策略驱动型数据中心--ACI技术详解>一书中的第1章,第1.3节,作者[美]Lucien Avramov [意]Maurizio Portolani,更多章节内容可以 ...

  9. 《策略驱动型数据中心——ACI技术详解》——1.3 数据中心设计

    本节书摘来自异步社区<策略驱动型数据中心--ACI技术详解>一书中的第1章,第1.3节,作者: [美]Lucien Avramov [意]Maurizio Portolani 更多章节内容 ...

最新文章

  1. 行意天下正文 Android Day02-Android中单元测试(junit测试)monkey测试
  2. 北京建委breaa.cn宕了
  3. python【数据结构与算法】最大上升子序列(简单dp)
  4. cnn stride and padding_卷积神经网络(CNN) 第 4 课(上)
  5. js 数组 实现 完全树_算法和数据结构 | 树状数组(Binary Indexed Tree)
  6. [保护模式]段间跳转和跨段跳转
  7. php 框架 路由解析,来!狂撸一款PHP现代化框架 (路由的设计)
  8. Multiavatar头像生成,要多少有多少
  9. Pyhton入门 笔记 第三天 正则表达式与JSON
  10. 一张图了解Spring Cloud微服务架构
  11. css多行文本溢出显示省略号(…)
  12. SEAndroid语法介绍
  13. hdu.1429.胜利大逃亡(续)(bfs + 0101011110)
  14. 查询mysql数据库表占用空间大小_MySQL数据库查看数据表占用空间大小和记录数...
  15. python dict hash_Python Hashmap/Dicti
  16. js的alert弹框中怎么写html,自定义JavaScript的alert()弹出框样式
  17. 运行kettle-8.2源码
  18. 前端框架MVVM是什么(整理)
  19. 【WIN11】微软拼音输入法单字频率固定方法
  20. 计算机怎样更新目录,怎么在word中设置自动更新目录功能

热门文章

  1. 性能优化总结(三):聚合SQL在GIX4中的应用
  2. 在myql sqlserver 快速找到带有关键字的表
  3. PANIC: Could not open: AVD
  4. 一个border引发的血案
  5. 手动处理MNIST手写数据集的逻辑斯蒂回归算法实践
  6. python : yield 的工作机制
  7. 【Oracle】进阶知识进一步了解
  8. 移动端设备管理平台 atx server2实践
  9. tomcat端口修改以及jvm启动参数设置
  10. SpringCloud中 Feign结合Hystrix断路器开发。