是否有一个纠删码,可以通过(以某种方式)添加冗余块来应用于多个块(可能是 100 或 200,每个几百 kB)?
我听说过 Reed-Solomon,但它看起来不能用于大型数据集和多个块,我错了吗?
谢谢!
是否有一个纠删码,可以通过(以某种方式)添加冗余块来应用于多个块(可能是 100 或 200,每个几百 kB)?
我听说过 Reed-Solomon,但它看起来不能用于大型数据集和多个块,我错了吗?
谢谢!
当然,Reed-Solomon 可以用于任何数据大小。
只需将您的数据视为多个 RS 大小的块的集合(例如,基于字节的 RS 代码为 255 字节)并独立地为每个块进行计算。所有校验和一起是整个大数据事物的校验和。
如果您的数据长度不是 RS 块大小的倍数,即。最后一个块太短了,编码前加一些0字节填满,再解码后去掉0。您必须将原始数据长度保存在某处,但这应该没问题。
纠删码将$N$原始数据块编码为$M$奇偶校验块以实现冗余,而这些$N$原始数据块和$M$奇偶校验块只是整个存储的一个条带。理论上,对于 Reed-Solomon(RS) 码,$N$ 的大小可以是任意大的,前提是 RS 构建的伽罗瓦域 $GF(2^w)$ 足够大。基于上述情况,您的问题更有可能如下
为什么条带中(原始数据)块的数量很少会太大,例如 $N = 100$ 或 $200$ ?
原因是:如果您通过纠删码将大量数据块编码为奇偶校验块,则许多数据/奇偶校验块是相互关联的update problem
。repair problem
只要更新一个数据块,所有的奇偶校验块也必须更新,这会导致奇偶校验部分的 I/O 繁重;repair problem
是当一个数据/奇偶校验块发生故障时,大量数据/奇偶校验块被访问和传输以进行修复,从而导致巨大的磁盘 I/O 或网络流量。
以$3$数据块(A、B、C)和奇偶校验块P=A+B+C的RAID5为例,任何块的故障修复都需要其他三个块都参与。
编码的块数越多,对存储系统来说可能遇到的问题就越严重update problem
,repair problem
这进一步极大地影响了系统的性能。
顺便说一句,当 $N$ 放大时,解码(获取原始数据的过程)速度大大下降。