前言

在Ceph和RAID存储领域,RS纠删码扮演着重要的角色,纠删码是经典的时间换空间的案例,通过更多的CPU计算,降低低频存储数据的存储空间占用。

纠删码原理

纠删码基于范德蒙德矩阵实现,核心公式如下所示(AD=E)

假设某些数据丢失,右式部分行丢失,变成E',则左式也相应去掉对应行,变成A'。

函数\(Inverse[A']\)代表A'的逆矩阵,I代表单位矩阵

\[Inverse[A']*A'*D=Inverse[A']*E'​
\]

\[I*D=Inverse[A']*E'​
\]

\[D=Inverse[A']*E'​
\]

Python实现

import numpy as np

# 备份数量
backup_up = 2
# 原始数据
data = np.array([1, 0, 0, 8, 6])
# 根据纠删码原理生成的数据
vander_data = np.concatenate((np.identity(len(data)), np.vander(data, 3).transpose()[::-1]), axis=0)
storage_data = vander_data.dot(data)
print('生成数据',storage_data)
# 模拟数据丢失
loss_data = np.concatenate((storage_data[0:3], storage_data[5:7]), axis=0)
print('丢失后数据', loss_data)
# 恢复数据
recover_data = np.linalg.inv(np.concatenate((vander_data[0:3], vander_data[5:7]), axis=0)).dot(loss_data)
print('恢复数据',recover_data)

基于Python的Numpy库可以很容易地模拟纠删码数据恢复的流程。效果如下所示

伽罗华域优化

实际上,上述的Python代码只是纠删码的最基础版本,可以发现校验数据大于原始数据,这样就导致校验数据需要更多的存储位,并没有很好的优化存储空间。

在现实场景中,纠删码一般通过自定义的伽罗华域进行运算,保证位数在一定范围内。伽罗华域\(GF(2^w)​\)代表所有运算结果只能在\([0,2^w)​\)之间。

伽罗华域的加法和减法为异或运算,乘法和除法需要基于生成多项式计算出gfilog表。\(GF(2^4)\)的gfilog表如下所示。

以8*9为例,计算过程如下所示,需要注意如果值大于\(2^w\),需要模\(2^w\)。

\[8*9=x^8 x^9=x^{17}=x^{17 \text{$\%$15}}=x^2=4
\]

更多优化

范德蒙德矩阵求逆矩阵的时间复杂度为\(O(N^3)\),柯西矩阵求逆矩阵的时间复杂度为\(O(N^2)\),因此可以采用柯西矩阵替代范德蒙德矩阵用于编码运算。

RS(纠删码)技术浅析及Python实现的更多相关文章

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

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

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

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

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

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

  4. Ceph纠删码编码机制

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

  5. 详解Hadoop3.x新特性功能-HDFS纠删码

    文章首发于微信公众号:五分钟学大数据 EC介绍 ​Erasure Coding 简称EC,中文名:纠删码 EC(纠删码)是一种编码技术,在HDFS之前,这种编码技术在廉价磁盘冗余阵列(RAID)中应用 ...

  6. Hadoop hdfs副本存储和纠删码(Erasure Coding)存储优缺点

    body { margin: 0 auto; font: 13px / 1 Helvetica, Arial, sans-serif; color: rgba(68, 68, 68, 1); padd ...

  7. [转]Reed Solomon纠删码

    [转]Reed Solomon纠删码    http://peterylh.blog.163.com/blog/static/12033201371375050233/     纠删码是存储领域常用的 ...

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

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

  9. Ceph的正确玩法之Ceph纠删码理论与实践

    http://blog.itpub.net/31545808/viewspace-2637083/ 注意空格,有的命令少空格 随着云计算业务的快速发展,国内外云计算企业的专利之争也愈发激烈.在云计算这 ...

随机推荐

  1. 通过微信服务号推送Zabbix告警

    近期看到一篇通过微信实现Zabbix告警的文章,但实践时发现,无法成功发送消息. 分析原因,应该是微信公众平台加强了登录验证,在登录时会需要管理员进行扫描二维码操作才能成功登陆后台: 而之前文章中的A ...

  2. ndk http://www.th7.cn/Program/Android/201412/334955.shtml

    http://www.th7.cn/Program/Android/201412/334955.shtml http://ruikye.com/2014/08/30/androidstudio_ndk ...

  3. 洛谷P2602 数字计数 [ZJOI2010] 数位dp

    正解:数位dp 解题报告: 传送门! 打算在寒假把学长发过题解的题目都做辣然后把不会的知识点都落实辣! ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 然后这道题,开始想到的时候其实想到的是大模拟,就有点像之前考试贪 ...

  4. /etc/rc.d/rc.local 自定义开机启动程序

    /etc/rc.d/rc.local 用于用户自定义开机启动程序,可以往里写开机要执行的命令或脚本,线上的配置如下: [root@localhost ~]$ cat /etc/rc.d/rc.loca ...

  5. .NET数据挖掘与机器学习开源框架

    1.    数据挖掘与机器学习开源框架 1.1 框架概述 1.1.1 AForge.NET AForge.NET是一个专门为开发者和研究者基于C#框架设计的,他包括计算机视觉与人工智能,图像处理,神经 ...

  6. tf.nn.embedding_lookup函数的用法

    关于np.random.RandomState.np.random.rand.np.random.random.np.random_sample参考https://blog.csdn.net/lanc ...

  7. 【Cocos2dx 3.x Lua】CCParallaxNode使用

    我们知道,当我们移动时,我们会看到离我们越近的物体,会移动的越快,越远的物体,比如远处的山会移动的很慢,而最远处的物体,比如太阳几乎不动,这个现象叫视差,而在游戏中模仿视差,可以让玩家感觉到游戏中的角 ...

  8. c#中WMI 中的日期和时间转为本地时间

    取得的值:CreationDate:20170122084915 .713600+480 转:   var objQuery = new ObjectQuery("select * from ...

  9. 提高php代码质量的36个技巧的摘录

    17.不要直接使用 $_SESSION 变量 简单例子: $_SESSION['username'] = $username; $username = $_SESSION['username'];   ...

  10. git克隆代码

    1.vs--team explorer-clone,或者team-connect to tfs-clone 2.1输入git的url,2输入本地放代码的文件夹,3点clone,克隆出4.双击4 3.点 ...