博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RS(纠删码)技术浅析及Python实现
阅读量:4087 次
发布时间:2019-05-25

本文共 1280 字,大约阅读时间需要 4 分钟。

前言

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

纠删码原理

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

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

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

 

Inverse[A′]∗A′∗D=Inverse[A′]∗E′​Inverse[A′]∗A′∗D=Inverse[A′]∗E′​

 

 

 

I∗D=Inverse[A′]∗E′​I∗D=Inverse[A′]∗E′​

 

 

 

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(2w)​GF(2w)​ 代表所有运算结果只能在[0,2w)​[0,2w)​ 之间。

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

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

 

8∗9=x8x9=x17=x17%15=x2=48∗9=x8x9=x17=x17%15=x2=4

 

 

更多优化

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

转载地址:http://awuii.baihongyu.com/

你可能感兴趣的文章
if __name__ == ‘__main__‘:就是Python里的main函数,脚本从这里开始执行,如果没有main函数则从上到下顺序执行。
查看>>
PX4官方用户和开发手册的首页面是会给你选择英文和中文的
查看>>
网络协议栈我是不是可以这么理解,就是把你要发送的数据自动处理成TCPIP格式的消息发出去,这种底层的转换不需要你弄了。
查看>>
除了LwIP还有uIP
查看>>
《跟工程师学嵌入式开发》这本书最后的终极项目我反而觉得有说头
查看>>
博士的申请考核制
查看>>
那些硬件的初始化函数主要是在做些上什么?
查看>>
MAVLink学习之路05_MAVLink应用编程接口分析(也有讲STM32下的收发函数)
查看>>
找到了中文版的mavlink手册
查看>>
浅谈飞控开发的仿真功能
查看>>
我觉得在室内弄无人机开发装个防撞机架还是很有必要的,TBUS就做得很好。
查看>>
serial也是见到很多次了,似乎它就是一种串行通信协议
查看>>
TBUS的一些信息
查看>>
PX4+激光雷达在gazebo中仿真实现(古月居)
查看>>
专业和业余的区别就在于你在基础在基本功打磨练习花的时间
查看>>
通过mavlink实现自主航线的过程笔记
查看>>
Ardupilot飞控Mavlink代码学习
查看>>
这些网站有一些嵌入式面试题合集
查看>>
我觉得刷题是有必要的,不然小心实际被问的时候懵逼,我觉得你需要刷个50份面试题。跟考研数学疯狂刷卷子一样!
查看>>
我觉得嵌入式面试三要素:基础吃透+项目+大量刷题,缺一不可。不刷题是不行的。而且得是大量刷,刷出感觉套路,别人做题都做得是固定题型套路条件反射了,你还在那慢慢理解慢慢推是不行的,也是考研的教训。
查看>>