Elea Notes.

词条 · 理论 ·

纠删码

把数据拆成多份并加上冗余,丢掉一部分也能把原数据完整还原出来。

也称:erasure code、erasure coding、里德-所罗门码、Reed-Solomon

一句话

把一份数据编码成更多份碎片,只要收集到足够比例的碎片,就能还原全部——哪怕丢了一些。

打个比方

你要把一句话告诉远方的朋友,但传话过程会丢字。

笨办法是抄三遍,冗余度 300%,而且如果三份都在同一处丢失,照样没救。

纠删码的办法更聪明:想象把数据点画在一条曲线上。两点确定一条直线,三点确定一条抛物线——反过来说,如果你知道曲线是二次的,那么曲线上任意三个点都足够把整条曲线还原出来,第四、第五个点是多余的保险。

于是把原始数据当成曲线上的必要点,再多算一些曲线上的点发出去。收到任意足够数量的点,就能反解出整条曲线,也就拿回了原始数据。丢哪几个都不要紧。

关键性质

  • 有门槛:低于门槛数量的碎片,什么也还原不出来;达到门槛,就能完整还原。不是”越多越清晰”,是全或无。
  • 碎片平等:没有哪一片更重要,任意组合达标即可。
  • 可调:想抗多少丢失,就加多少冗余点。

用在哪

硬盘阵列(RAID)、云存储、二维码(污损一部分仍能扫出来)、深空通信,以及区块链的数据可用性方案。

凡是”传输或存储会丢东西,但又不能丢信息”的场合,基本都有它。