以下是针对存储快照技术 COW(Copy-On-Write)和 ROW(Redirect-On-Write)的通俗图解说明:


​一、什么是存储快照?​

存储快照是某一时刻数据的“照片”,记录数据的瞬时状态。它通过指针和元数据管理数据块,而非完整复制所有数据,因此创建速度极快。


​二、COW(写时复制)​

​工作原理​

  1. ​初始状态​

    • 原始数据块(A/B/C)存储在硬盘中。
    • 快照创建时,系统生成一个快照表(空表)。
    [原始数据]      [快照表]
    A → 数据A      | 空
    B → 数据B      | 空
    C → 数据C      | 空
    
  2. ​修改数据时​

    • 当修改数据块 ​​B​​ → ​​B'​​:
      1. ​复制原始数据​​:将原始B复制到快照表。
      2. ​修改原始数据​​:直接在原位置写入B'。
    [原始数据]      [快照表]
    A → 数据A      | B → 数据B(原版)
    B → 数据B'     | 
    C → 数据C      |
    
  3. ​读取快照​

    • 快照会优先从快照表中读取被修改过的旧数据(如B),未修改的数据(A/C)仍从原位置读取。

​特点​

  • ✅ ​​优点​​:快照读取性能高(直接读原数据或快照表)。

  • ❌ ​​缺点​​:频繁写入时性能下降(每次修改都要复制旧数据)。


​三、ROW(写时重定向)​

​工作原理​

  1. ​初始状态​

    • 原始数据块(A/B/C)存储在硬盘中。
    • 快照创建时,系统生成一个快照指针表(指向原数据)。
    [原始数据]      [快照指针表]
    A → 数据A      | A → 数据A
    B → 数据B      | B → 数据B
    C → 数据C      | C → 数据C
    
  2. ​修改数据时​

    • 当修改数据块 ​​B​​ → ​​B'​​:
      1. ​写入新位置​​:将B'写入到新位置(如D)。
      2. ​更新指针​​:原始数据B保持不变,新数据B'指向新位置。
    [原始数据]      [新数据]      [快照指针表]
    A → 数据A      D → 数据B'    | A → 数据A
    B → 数据B                     | B → 数据B
    C → 数据C                     | C → 数据C
    
  3. ​读取快照​

    • 快照始终通过指针表读取原始数据(B),而新数据(B')由当前系统直接访问。

​特点​

  • ✅ ​​优点​​:写入性能高(无需复制旧数据)。

  • ❌ ​​缺点​​:快照读取可能变慢(需跳转多个指针)。


​四、对比总结​

​特性​ ​COW​ ​ROW​
​写入性能​ 修改时需复制旧数据,性能较低 直接写入新位置,性能高
​读取性能​ 快照读取快(直接访问) 快照读取可能慢(指针跳转)
​适用场景​ 频繁读取快照(如数据库恢复) 频繁写入(如虚拟机磁盘操作)

​五、生活化比喻​

  • ​COW​​:像在图书馆修改一本书,修改前必须复印旧版本存档,新版本在原位置覆盖。

  • ​ROW​​:像在图书馆新增一本书的修订版,旧书保留在原书架,新书放到新位置并更新索引。

通过这种方式,小白也能轻松理解两种技术的核心差异!

posted on 2025-05-22 14:26  LeeHang  阅读(500)  评论(0)    收藏  举报