RS(纠删码)技术浅析及Python实现
前言
在Ceph和RAID存储领域,RS纠删码扮演着重要的角色,纠删码是经典的时间换空间的案例,通过更多的CPU计算,降低低频存储数据的存储空间占用。
纠删码原理
纠删码基于范德蒙德矩阵实现,核心公式如下所示(AD=E)

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

函数\(Inverse[A']\)代表A'的逆矩阵,I代表单位矩阵
\]
\]
\]
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\)。
\]
更多优化
范德蒙德矩阵求逆矩阵的时间复杂度为\(O(N^3)\),柯西矩阵求逆矩阵的时间复杂度为\(O(N^2)\),因此可以采用柯西矩阵替代范德蒙德矩阵用于编码运算。
RS(纠删码)技术浅析及Python实现的更多相关文章
- 应用AI芯片加速 Hadoop 3.0 纠删码的计算性能
本文由云+社区发表 做为大数据生态系统中最重要的底层存储文件系统HDFS,为了保证系统的可靠性,HDFS通过多副本的冗余来防止数据的丢失.通常,HDFS中每一份数据都设置两个副本,这也使得存储利用率仅 ...
- Erasure Coding(纠删码)深入分析
http://blog.sina.com.cn/s/blog_57f61b490102viq9.html 1.前言 Swift升级到2.0大版本后宣称开始支持纠删码,这其实是一个很有意义的特性,主要是 ...
- Erasure Coding(纠删码)深入分析 转
1.前言 Swift升级到2.0大版本后宣称开始支持纠删码,这其实是一个很有意义的特性,主要是能够在一定程度上解决3副本空间浪费太多的问题.因为3副本这一点是swift推广的最大障碍之一,成本的增加吓 ...
- Ceph纠删码编码机制
1 Ceph简述 Ceph是一种性能优越,可靠性和可扩展性良好的统一的分布式云存储系统,提供对象存储.块存储.文件存储三种存储服务.Ceph文件系统中不区分节点中心,在理论上可以实现系统规模的无限扩展 ...
- 详解Hadoop3.x新特性功能-HDFS纠删码
文章首发于微信公众号:五分钟学大数据 EC介绍 Erasure Coding 简称EC,中文名:纠删码 EC(纠删码)是一种编码技术,在HDFS之前,这种编码技术在廉价磁盘冗余阵列(RAID)中应用 ...
- Hadoop hdfs副本存储和纠删码(Erasure Coding)存储优缺点
body { margin: 0 auto; font: 13px / 1 Helvetica, Arial, sans-serif; color: rgba(68, 68, 68, 1); padd ...
- [转]Reed Solomon纠删码
[转]Reed Solomon纠删码 http://peterylh.blog.163.com/blog/static/12033201371375050233/ 纠删码是存储领域常用的 ...
- MICS:副本和纠删码混合存储系统
摘要 云存储系统的三个指标: 高可靠性,低存储开销,高读写性能. 这三个指标是没有办法同一时候满足的,许多时候须要进行tradeoff. 副本系统和纠删码是两种在存储系统中广泛使用的策略,它们在保证高 ...
- Ceph的正确玩法之Ceph纠删码理论与实践
http://blog.itpub.net/31545808/viewspace-2637083/ 注意空格,有的命令少空格 随着云计算业务的快速发展,国内外云计算企业的专利之争也愈发激烈.在云计算这 ...
随机推荐
- 【源码】rm zip 删除文件夹中大量的小文件 百万 扫描文件时间
rm 删除文件夹中大量的小文件 百万 迟迟未删除 在扫描文件? rm删除命令源码分析 - ty_laurel的博客 - CSDN博客 https://blog.csdn.net/ty_laurel/ ...
- python 时间字符串和时间戳之间的转换
https://blog.csdn.net/qq_37193537/article/details/78987949 1.将字符串的时间转换为时间戳 方法: a = " ...
- sql中把字符串转化为数字的方法
1. convert(int,字段名) 2. cast(字段名 as int)
- 2018/04/18 每日一学Linux 之 ssh关闭密码登录
在平常工作中,常常需要关闭 SSH 的密码登录,只留 SSH 证书登录. 好处显而易见,避免了经常输入密码导致的密码泄露,和设置密码导致被暴力破解的可能性. -- 方法也很简单,首先 你是可以 登录 ...
- 滑雪---poj1088(动态规划+记忆化搜索)
题目链接:http://poj.org/problem?id=1088 有两种方法 一是按数值大小进行排序,然后按从小到大进行dp即可: #include <iostream> #incl ...
- /etc/ssh/sshd_config
线上配置: Port 49142 # 设置SSH监听端口 RSAAuthentication yes # 开启RSA密钥验证,只针对SSHv1 PubkeyAuthentication yes # 开 ...
- windows平台mysql密码破解设置
windows平台下,5.7版本mysql,破解密码的两种方式: #1 关闭mysql服务net stop mysql 启动mysql服务 跳过权限 #2 在cmd中执行:mysqld --skip- ...
- 解决svn log显示no author,no date的方法之一
https://blog.csdn.net/feixiang_song/article/details/37809341 关于mac自带的svn的配置请参考该博客:点击打开链接 问题: 在linux执 ...
- testng入门教程11 TestNG运行JUnit测试
现在,您已经了解了TestNG和它的各种测试,如果现在担心如何重构现有的JUnit代码,那就没有必要,使用TestNG提供了一种方法,从JUnit和TestNG按照自己的节奏.也可以使用TestNG执 ...
- android开发中遇到的一些问题
buildToolsVersion 设置buildtool版本 今天遇到一个奇怪问题instant not supported 原来是设置显示offline...这个很无语,adb devices又能 ...