当前位置: 首页 > news >正文

你的数据是如何被保护的?

纠删码:数据世界里的“数学魔法”

我们每天用网盘、短视频、游戏、社交……这些服务背后都有庞大的数据存储系统。问题很现实:硬盘会坏、服务器会宕机、机房会断电,数据丢了谁负责?

最直接的办法是“多备份”。三副本就是把同一份数据保存三份,放在不同机器上;坏了一份还有两份,听上去很稳。
但缺点也很明显:太浪费。存 1GB 要花 3GB,数据到了 TB、PB 级别,成本就是天文数字。

于是工程师们想出了更聪明的办法:纠删码(Erasure Coding)


什么是纠删码

纠删码和三副本最大的不同在于,它不是傻傻地复制,而是把数据切成若干块,然后生成额外的校验块。只要坏掉的块不超过校验块的数量,就能把原始数据算回来。

打个比方,你和同学拍了一张合影。

  • 三副本的做法:再洗两张一模一样的照片,放在不同抽屉里。
  • 纠删码的做法:洗一张照片,然后请几个美术生帮你画几张素描,记录关键的脸型和轮廓。

以后照片哪怕撕掉一角甚至缺一半,你依然可以用素描把它补齐。
区别在于:三副本靠堆数量,纠删码靠聪明的“线索”。


为啥它管用 —— 从方程组说起

纠删码的核心不是把某个校验块对应某个数据块,而是把校验块看作“方程”。

  • 每个丢失的数据块是一个未知数。
  • 要解 1 个未知数要 1 条独立方程,要解 2 个未知数就需要 2 条独立方程。

因此如果你有 M 个校验块,理论上就能恢复最多 M 个同时丢失的数据块。数学上就是:方程数量 ≥ 未知数数量

这也是为什么很多大公司用纠删码来存冷数据:

  • 热数据 → 用三副本,快,恢复简单;
  • 冷数据 → 用纠删码,省空间,成本低。

比如你上传到网盘的一部老电影,可能好几年都不会有人点开看一次,放三份太奢侈,放纠删码正合适。


生活化的理解

  • 做菜类比:做一道菜本来需要十种食材。为了保险,你写了几条替代规则:没西红柿可以用番茄酱,没鸡蛋可以用豆腐。某天真缺了两种材料,但你照样能做出这道菜。校验块就像这些“替代规则”。

  • 数独类比:只要有部分格子填了数字,剩下的就能推理出来。哪怕有人擦掉几个格子,只要留下的线索足够,你仍能恢复全盘。纠删码也是用冗余信息去推断缺失的信息。

把这些场景放回存储系统:

  • 热数据 → 用副本,读写快;
  • 冷数据 → 用纠删码,省空间、成本低。

优缺点一眼看清

优点

  • 空间节省明显:同样的可靠性下,比多副本节省大量存储。
  • 可控冗余:通过 N 和 M 灵活调整容错能力和空间开销。

缺点

  • 计算开销:编码/解码需要矩阵运算,会消耗 CPU 或专门硬件。
  • 恢复代价高:坏盘恢复时需跨多节点读数据,网络和 I/O 压力较大。
  • 不适合高频小文件场景:对随机小读写不友好,延迟可能变高。

总结一句话
👉 三副本是“花钱买时间”,纠删码是“用数学换空间”。
在实际工程里,这两者往往混合使用:热数据用副本以获得更好性能,冷数据用纠删码以节省成本。


实际工程里的落地

  • 什么时候选纠删码:数据量非常大、访问频率低、想节省存储成本的场景。
  • 工程实现:通常不由应用直接实现,而是由存储平台(Ceph、HDFS、MinIO、云厂商对象存储)在底层提供。作为应用开发者,只需要选择存储策略。
  • 运维要点:合理设定 N+M、监控盘/节点故障、考虑恢复窗口和网络带宽、配合缓存层减小冷数据访问延迟。
  • 性能折中:热数据放副本,冷数据放 EC;或者给 EC 池配 SSD 缓存,读写体验更友好。

最后一点想法

纠删码看起来有点抽象,但本质上它把“冗余”做成了更聪明的事:用有限的空间记录足够多的“线索”,以便把丢失的信息重建回来。

下次你往网盘丢文件时,不妨想象:在看不到的机房里,有一群校验块像数学题里的线索一样,默默守护着你的数据——既不显眼,也很靠得住。


补充说明

  • M 块校验的含义:它表示系统最多能同时坏 M 块数据块。修复后不等于“额度刷新”,而是“任意时刻”的限制。
  • 校验块的作用:它们不是模具,而是线索。每个校验块都从不同角度描述了全局,而不是单纯对应一个具体的数据块。
    当数据缺失时,系统会根据现有的数据块 + 校验块,解一组“迷宫题”,最终把缺失的部分推理出来。
http://www.dtcms.com/a/360581.html

相关文章:

  • Linux系统的进程管理
  • vue3+vite+ts 发布npm 组件包
  • 查看所有装在c盘软件的方法
  • [知识点记录]SQLite 数据库和MySQL 数据库有什么区别?
  • DuckDB 内嵌分析:ABP 的「本地 OL盘快照」
  • 福彩双色球第2025100期号码推荐
  • 福彩双色球第2025100期数据统计
  • 吴恩达机器学习作业十一:异常检测
  • Docker 容器(二)
  • 机器视觉学习-day15-图像轮廓特征查找
  • Wi-Fi技术——OSI模型
  • 深度学习量化双雄:PTQ 与 QAT 的技术剖析与实战
  • 开源协作白板 – 轻量级多用户实时协作白板系统 – 支持多用户绘图、文字编辑、图片处理
  • globals() 小技巧
  • C++ 模板全览:从“非特化”到“全特化 / 偏特化”的完整原理与区别
  • Prometheus之启用--web.enable-remote-write-receiver
  • 基于muduo库的图床云共享存储项目(三)
  • 前端常见安全问题 + 防御方法 + 面试回答
  • 「数据获取」《中国工会统计年鉴》(1991-2013)(获取方式看绑定的资源)
  • 【人工智能99问】Qwen3简介(33/99)
  • 浅析NVMe协议:DIF
  • 多线程使用场景一(es数据批量导入)
  • 林曦词典|老死不相往来
  • 洛谷p2392kkksc03考前临时抱佛脚 详解(回溯,深度搜索法)
  • 大模型参数到底是什么?
  • CUDA与图形API的深度互操作:解锁GPU硬件接口的真正潜力
  • C++内存序不迷茫:从CPU缓存一致性理解Memory Order
  • 如何将剪贴板内容存为文件?Paste As File支持文本/图片转换
  • 批处理脚本操作 JSON 文件
  • centos7挂载iscis存储操作记录