Erasure code

Erasure code(删除码、容删码)即forward error correction(FEC,前向纠错)是FEC的一种实现

Erasure code是与RAID完全不同的新技术,但是在面对自然灾难或技术故障时同样具有很好的恢复能力,而且Erasure code占用更少的磁盘空间,只需要数据块的一个子集就可以恢复原始数据。

Erasure code把数据分割成若干数据块,然后利用vandermonde矩阵的RS(Reed–Solomon codes)的算法原理将额外的编码信息追加到每个数据块中(膜拜数学帝   😉   ),可以判断出整个数据集中任何位置上的一定数量的错误,并且修复这些错误,也就是前面说的从一些数据块的子集就可以复原完整的数据集。(这里错误地把不同实现方法揉到一起了,详见后面更正)

而数据块中附加的额外信息的多少,即code rate编码率决定着这个子集的所需的数据块量,附加的额外信息越多则恢复整个数据集需要的数据块越少。

Erasure code常见于单项通讯连接,如网络多播、广播等重传代价很大或不可能重传的场景,和大数据存储设备,用以实现恢复被破坏的数据。

总的来说跟我们常用的winrar软件打包时候的恢复记录选项很像。应该是相似的技术。应该是RSCode像才对。

—————-更正—————–

FEC(Forward Error Correction)当前我了解到有两种实现,一种是Erasure code,另一种是RSCode(Reed–Solomon codes)。
Erasure code用作从数据块子集恢复出整个数据集。但不提供判断和修正错误数据的功能。可以用做分布式存储的灾难恢复。如sheepdog项目里的Erasure code模式的冗余就是引用zfec的代码,优点是空间占用相对少,所以写也更快。
而RSCode则是判断错误位置及修正数据,当然其优点就是容错能力,而非抗丢失,所以很适合含有噪声和爆发性错误的无线通信。比如,读取CD或是太空中的飞船向地球传回数字图片时,就是应用RS编码,并且RS编码已经扩展到卫星通信中。然而,RS编码是一个非常旧的概念,并且编码的延迟也非常明显。目前一种叫做龙卷风码(Tornado code)的新的编码方式正在广泛应用,它能够成功的解决软件基础环境中的延迟问题。

这也就是为什么二维码(qrcode)中间随便加个图,遮挡住一部分还是能够被识别出来的原因了。因为二维码解码库用到了rscode嘛。

参考:
http://en.wikipedia.org/wiki/Erasure_code
http://en.wikipedia.org/wiki/Forward_error_correction
http://feclib.sourceforge.net
http://rscode.sourceforge.net/
https://pypi.python.org/pypi/zfec

发表评论?

1 条评论。

  1. Erasure code | 站点标题 - pingback on 2013/12/03 在 16:03

发表评论


请输入正确的验证码

Trackbacks and Pingbacks: