2015-10-26 57 views
0

是否有擦除代码可以通过(以某种方式)添加冗余块来应用于多个块(可能是100或200,每几百kB)?分块文件的擦除代码

我听说过Reed-Solomon,但它看起来并不像它可以用于庞大的数据集和多个块,我错了吗?

谢谢!

回答

1

Reed-Solomon当然可以用于任何数据大小。

只要将您的数据视为多个RS大小块的集合(例如,基于字节的RS代码的255字节)并独立计算每个块。所有校验和都是整个大数据事件的校验和。

如果您的数据长度不是RS块大小的倍数,即。最后一个块太短,只需在编码之前添加一些0字节来填充它,并在解码之后再次删除0。您必须将原始数据长度保存在某处,但这应该不成问题。

1

擦除代码将$ N $原始数据块编码为$ M $奇偶块以实现冗余,而这些$ N $原始数据块和$ M $奇偶块只是整个存储的一个条带。理论上,只有在构造的Galois域$ GF(2^w)$ RS足够大时,$ N $的大小对于Reed-Solomon(RS)码才是任意大的。基于以上情况,您的问题更可能如下

为什么条带中(原始数据)块的数量很少会太大,例如$ N = 100 $或$ 200 $?

的原因是update problemrepair problem:如果您在纠删码,大量的数据编码大量数据块到校验块/校验块是合作关系。只要您更新一个数据块,所有的奇偶校验块也必须更新,这会导致奇偶校验部分的I/O较大; repair problem是当一个数据/奇偶校验块失败时,大量数据/奇偶校验块被访问并传输进行修复,导致巨大的磁盘I/O或网络流量。

以RAID5的$ 3 $数据块(Ç)和奇偶校验块P = A + B + C作为例子,对于任何块的故障的修复需要的所有其他三块参加。

编码的块数越多,存储系统可能遇到的越严重的update problemrepair problem,这进一步极大地影响了系统的性能。

顺便说一句,当$ N $放大时,解码(获取原始数据的过程)速度大大降低。