以下是针对存储快照技术 COW(Copy-On-Write)和 ROW(Redirect-On-Write)的通俗图解说明:
一、什么是存储快照?
存储快照是某一时刻数据的“照片”,记录数据的瞬时状态。它通过指针和元数据管理数据块,而非完整复制所有数据,因此创建速度极快。
二、COW(写时复制)
工作原理
-
初始状态
- 原始数据块(A/B/C)存储在硬盘中。
- 快照创建时,系统生成一个快照表(空表)。
[原始数据] [快照表] A → 数据A | 空 B → 数据B | 空 C → 数据C | 空 -
修改数据时
- 当修改数据块 B → B':
- 复制原始数据:将原始B复制到快照表。
- 修改原始数据:直接在原位置写入B'。
[原始数据] [快照表] A → 数据A | B → 数据B(原版) B → 数据B' | C → 数据C | - 当修改数据块 B → B':
-
读取快照
- 快照会优先从快照表中读取被修改过的旧数据(如B),未修改的数据(A/C)仍从原位置读取。
特点
-
✅ 优点:快照读取性能高(直接读原数据或快照表)。
-
❌ 缺点:频繁写入时性能下降(每次修改都要复制旧数据)。
三、ROW(写时重定向)
工作原理
-
初始状态
- 原始数据块(A/B/C)存储在硬盘中。
- 快照创建时,系统生成一个快照指针表(指向原数据)。
[原始数据] [快照指针表] A → 数据A | A → 数据A B → 数据B | B → 数据B C → 数据C | C → 数据C -
修改数据时
- 当修改数据块 B → B':
- 写入新位置:将B'写入到新位置(如D)。
- 更新指针:原始数据B保持不变,新数据B'指向新位置。
[原始数据] [新数据] [快照指针表] A → 数据A D → 数据B' | A → 数据A B → 数据B | B → 数据B C → 数据C | C → 数据C - 当修改数据块 B → B':
-
读取快照
- 快照始终通过指针表读取原始数据(B),而新数据(B')由当前系统直接访问。
特点
-
✅ 优点:写入性能高(无需复制旧数据)。
-
❌ 缺点:快照读取可能变慢(需跳转多个指针)。
四、对比总结
| 特性 | COW | ROW |
|---|---|---|
| 写入性能 | 修改时需复制旧数据,性能较低 | 直接写入新位置,性能高 |
| 读取性能 | 快照读取快(直接访问) | 快照读取可能慢(指针跳转) |
| 适用场景 | 频繁读取快照(如数据库恢复) | 频繁写入(如虚拟机磁盘操作) |
五、生活化比喻
-
COW:像在图书馆修改一本书,修改前必须复印旧版本存档,新版本在原位置覆盖。
-
ROW:像在图书馆新增一本书的修订版,旧书保留在原书架,新书放到新位置并更新索引。
通过这种方式,小白也能轻松理解两种技术的核心差异!
浙公网安备 33010602011771号