分布式文件系统里的EC和RS编解码的效率问题
来源:互联网 发布:心动网络官网电脑版 编辑:程序博客网 时间:2024/06/05 04:34
erasure code(纠删码)是通信、计算机领域常用技术。对于存储技术而言,纠删码是提高数据冗余和降低成本之间的一种折中。
传统盘阵上用的raid4、raid 5也是一种简单的ec,数据冗余度较低,编解码只是简单的异或操作。
分布式文件系统领域副本技术是最常见的提高数据冗余度的方法。但是副本的方式空间利用率太低,双副本也就50%。采用ec对于分布式文件系统而言,可以提高空间利用率,但是也带来的一定的性能损耗和管理复杂度。支持ec的分布式文件系统并不太多。isilon的oneFS是支持ec的,但是其编码比例比较固定的,最多不能超过n:4。HDFS最初也不支持ec,后面有社区做了ec的补丁。facebook对于社区的最新贡献是对传统的rs编码方式的ec做了改进,提出了一种LRC编码(locally reparable code)。
http://storagemojo.com/2013/06/21/facebooks-advanced-erasure-codes/
想谈下RS(Reed Solomon)编码的效率问题。RS编解码矩阵的计算的损耗可以不考虑,因为编解码矩阵肯定是提前算好的。那这里需要考虑的就是编码时复杂的矩阵乘法。RS编码是基于有限伽罗华域上的运算。rs码的矩阵乘法而言,涉及两个操作“乘法”、“加法”。伽罗华域的加法比较简单,对计算机而言就是异或。乘法比较复杂。传统的RS码采用GF(2^8)域上的乘法。GF(2^8)域总共有2^8(256)个不同的数字,如果每次编码时都需要计算这些乘法,效率非常低。如果提前算好存下来,编码时只是去内存里面取以下,这样就不需要复杂的乘法计算,这也是空间换时间的一种trade off。对于8位的rs码而言,需要(1+2^8)*2^8,大约2^(8*2-1) byte=32k byte来存储这些结果,对于现代计算机而言32k根本不算什么。如果是16位的编码,需要2^(16*2-1)*2 byte=4G byte来存储这些结果。4G的内存消耗有些大,但也并非无法承受。但是到了32位的rs吗而言,这种方法已经完全无法实现了,因为内存消耗达到了惊人的2^(32*2-1)*4 byte = 32 e byte。
对于通用处理器而言,伽罗华域的乘法过于复杂。当然128位的rs码也并非完全不可能。如果用空间换时间不行,那就只好时间换空间。伽罗华域的乘法结果只能每次临时算出来,这就需要专门的ASIC芯片或者用LPGA之类的方法直接用硬件算出来。
- 分布式文件系统里的EC和RS编解码的效率问题
- Python的编解码问题
- base64的编解码问题
- 关于GET和POST请求的编解码问题
- url中关于编解码加号和空格的问题
- 关于GET和POST请求的编解码问题
- 关于GET和POST请求的编解码问题
- 深入浅出关于GET和POST请求的编解码问题
- url中关于编解码加号和空格的问题
- 一种新型的EC编码,LRC码,基于RS码的改进,特点介于RS和副本之间。
- 有意思的硬件编解码问题
- python中编解码的问题
- iOS---Url编解码的问题
- rs 解码的一点资料
- Java的编解码
- Http的编解码
- url的编解码
- GET和POST的区别及get和post关于请求的编解码的问题
- mysql 查询缓存相关命令
- 谈谈我做程序员的感想
- Eclipse上GIT插件EGIT使用手册
- 【在UML中表示Java继承和接口】
- js如何对数组进行排序
- 分布式文件系统里的EC和RS编解码的效率问题
- SQL Server 2008 查询主键 索引
- 报考警察还得先整容
- 《编程之美》读书随笔之一:让CPU占有率曲线听你指挥
- 目录解释-linux
- 安卓开发33:HorizontalScrollView 水平滚动 API
- 车牌识别
- JQuery表格高亮
- js如何数组进行排序?