数据快照技术

write redirectcopy on write比较

共同点:不管是哪个一种快照方式,只要上层向一个在快照之后从来没有被更新过的扇区写IO,这个IO块就要占用新卷上的

一个块(因为要保留原块的内容,不能被覆盖),如果上层将原卷上的所有扇区都更新了,那么新卷的容量就需要和原卷的

数据量同样大才可以。但是通常应用不会写覆盖面百分之百。做快照的时候,新卷的容量一般设置成原卷的30%就可以。

不同点

copy on write方式下,快照完成之后,如果需要更新一个从来没有被更新过的块,则程序首先将这个块读出,再将其写入到新卷,然后将更新的数据覆盖写入到原卷对应的块。需要三步动作(一次读,两次写)。

write redirect方式下,同样的过程只需要一次写入即可,即将更新数据直接写入到新卷(同时更新映射图中的指针,在内存中进行)。

所以write redirect相对copy on write方式在IO延迟上有优势。

在文件系统快照情况下,copy on write方式和write redirect方式 同样多要针对每个IO遍历当前文件系统中的元数据。这部分开销是一样的。而write redirect耗费IO方面的开销,就要比copy on write小得多了。

总之,卷级的快照,仿佛就是增加了一个“卷块映射系统”,其作用与文件系统大同小异,只不过文件系统处理的是文件名和块的映射关系,而“卷块映射文件系统”处理的是块与块的映射关系。

快照的意义(有可能带来数据不一致情况)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Java 中,可以使用序列化技术来实现数据快照。序列化是一种将对象转换为字节流的机制。通过序列化,我们可以将对象保存到文件中或通过网络传输,以便稍后恢复该对象的状态。 要实现数据快照,先定义一个类,该类包含需要进行快照数据。然后,使用 Java 的序列化机制将该对象序列化为字节流,保存到文件或数据库中。如果需要恢复快照,只需反序列化该对象即可。 以下是一个简单的示例: ``` import java.io.*; public class Snapshot implements Serializable { private static final long serialVersionUID = 1L; private String data; public Snapshot(String data) { this.data = data; } public String getData() { return data; } public static void main(String[] args) { Snapshot snapshot = new Snapshot("Hello, world!"); try { FileOutputStream fileOut = new FileOutputStream("snapshot.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(snapshot); out.close(); fileOut.close(); System.out.println("Snapshot saved to snapshot.ser"); } catch (IOException e) { e.printStackTrace(); } try { FileInputStream fileIn = new FileInputStream("snapshot.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); snapshot = (Snapshot) in.readObject(); in.close(); fileIn.close(); System.out.println("Snapshot restored: " + snapshot.getData()); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } } ``` 这个示例定义了一个名为 `Snapshot` 的类,该类包含一个字符串类型的数据,并且实现了 `Serializable` 接口。在 `main` 方法中,我们创建了一个 `Snapshot` 对象,并将其序列化为 `snapshot.ser` 文件。然后,我们从文件中读取数据,并将其反序列化为 `Snapshot` 对象。最后,我们打印出恢复的数据。 当我们运行这个程序时,它将输出以下内容: ``` Snapshot saved to snapshot.ser Snapshot restored: Hello, world! ``` 这表明我们成功地将对象保存到文件中,并能够从文件中恢复快照

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值