快照有COW(Copy On Write,写时复制)和ROW(Redirect On Write,写重定向)两种实现方式。
1 .COW
COW(Copy-On-Write),写时拷贝,也称为写前拷贝。
创建快照,如果源卷的数据发生了变化,快照系统会将原始数据拷贝到快照卷上的数据块中,然后再对源卷进行改写;
OW快照在初始化的过程中仅创建用来描述源数据块位置的指针信息(元数据),而不是完整的将源数据块拷贝过来。因此初始化的过程几乎可以在瞬间完成,对系统的影响也很小
COW方式的执行步骤为:
(1) 读修改的原对象数据。
(2) 将原对象数据写入新对象。
(3) 将更新数据写入原对象。
由此可以看出,COW方式需要1次读、2次写,写性能较差。
在对快照进行读操作时,先由快照系统判断,需要读取的数据是否在快照卷中,若在,直接从快照卷读取,若不在,则查询映射表,去对应源卷的逻辑地中读取(这个查表并去源卷读的操作,也叫读重定向)
2.ROW
创建快照以后,快照系统把对数据卷的写请求重定向给了快照预留的存储空间,直接将新的数据写入快照卷。上层业务读源卷时,创建快照前的数据从源卷读,创建快照后产生的数据,从快照卷读。
ROW方式的执行步骤为:
(1) 将更新数据写入新对象。
(2) 更新地址映射表指针。
使用ROW快照,数据卷存放的是上一个快照时间点的旧数据,新数据最终存放在预留的快照空间。这里也有一个复杂的问题,就是快照的删除。被删除的快照上的数据必须被复制到原始数据卷,并且做一致性回退。创的建快照越多,维护快照的复杂度也会以指数级别上升。
由此可以看出,ROW方式仅需1次写,写性能好,但读取数据时需要多次寻址,读性能较差。在多次写之后,数据会被分配到不同的位置,连续读写性能不如COW。
关注小张的知识杂货铺,让我们一起学习一起进步