快照与备份的那点事儿

简单地说

快照记录的是数据在某一时刻的状态 >>> 就像在你咧嘴傻笑的时候……啪——有人按下了快门,就是一张你的照片
备份则存储的是数据在某一时刻的副本 >>> 即另外重新创建一个跟现在的你一毛一样的另一个你,你们俩都是有生命的个体

总的来说

快照需要真实的数据源时可用;
备份则与真实数据源是否可用无关。

人话版

{ 打个比方,有不恰当的地方欢迎指出 ^ ^ }
有一个人他并不认识你,当见到你的快照时,就像看到了一张你的照片,虽然能了解一部分你在照照片时的大致情况,但并不能获取自己想知道的关于你的全部信息,比如愿不愿意借给他钱……并且在仅有这张照片,却没办法联系到到你本人时,他是无法真的向你借钱的= =
但是当他见到一个你的备份时,他不光啥能都知道,并且可以立刻跟你借钱(抠鼻……)

实现原理

快照的实现方式主要分两种,下面分别简单介绍下各自的实现原理

COW

写前拷贝 Copy On Write
快照与备份的那点事儿_第1张图片
总结上图,COW方式在写数据时会先把数据源该位置的数据复制到快照中,之后在真正的在数据源的该位置写入新数据>>>即写了两次,并且最新存放在数据源,快照中存放是原始数据被重复更新的位置是否会发生覆盖?这点还未搞清楚,望大神指点 [抱拳抱拳~~~]

ROW

写时重定向 Redirect On Write
快照与备份的那点事儿_第2张图片
总结上图,ROW方式在写数据时会先通过映射地址找到快照中与数据源该位置相对应的位置,之后直接在快照中写入新数据>>>即写了一次,并且最新的数据存放在快照中,数据源始终存放原始数据

总结两图

COW方式在写入数据时,会拷贝两次,因此在进行大量写入操作时,性能不如ROW;ROW方式在读取数据时会先做判断,导致发生大量读取操作时,性能不如COW;而在删除时,COW方式由于新数据都存储在数据原本身,因此**只需要删除快照和映射表就可以了,而ROW方式的新数据存在快照中,因此删除时为了保证数据的完整性必须先向源数据进行拷贝,拷贝完成后方能删除。
^ ^ 欢迎大家批评指正~~~

你可能感兴趣的:(出坑必备~,基础,Java)