什么是快照
先看一下百度的介绍
快照指照相馆的一种冲洗过程短的照片·如:证件快照。基于硬件编程技术的一种,针对内存进行的快速读取技术,常用于硬件开发。
存储网络行业协会SNIA(StorageNetworking Industry Association)关于快照的定义
关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。
个人理解
我个人人为快照就相当于对某一时刻的数据库状态拍了一张照片,当以后数据库发现问题时,可以利用此照片迅速恢复到拍照时的状态
作用一:数据回滚
我们在t1时刻对数据库利用数据库的源数据常见了一份快照,在t2时刻对数据库进行修改时发生了错误,此时我们就可以利用已有的快照将数据库中的数据回滚到t1时刻,减轻了损失作用2对数据库进行数据挖掘与测试
因为快照数对数据库源数据的一份拷贝,那么我们当然可以在快照上做数据挖掘与测试,而不影响源数据。
快照实现的两种方式
写时拷贝(Copy On Write)
写操作
当我们创建快照以后,在对源卷进行写操作时,需要写入的数据会先进入缓冲区,然后快照系统将原卷对应位置的数据写入快照,然后在将缓冲区的数据写入原卷。
读操作
进行读操作时快照系统首先会进行判断需要读取的数据是否在快照中,如果在直接读快照,如果不在则根据映射表读源卷。
回滚
先将源卷停止I/O操作,然后根据映射表将快照中的数据写入源卷对应的位置中,左后解除对源卷的锁定即可。
删除快照
直接删除即可
特点
这种方法适用于读频繁的情况下,因为每一次写入操作都涉及两写一读(写入快照,写入源卷,读源卷)。
写时重定向(Write On Redirect)
每次对源卷的操作都会重定向到快照中
写操作
当创建快照之后,每次对源卷的写操作都会写入快照对应的位置上,并建立源卷与快照的映射表,只涉及一次写操作,就是对快照的写。
读操作
读操作分两种情况
1:需要读的数据在创建之前:直接读源卷
2:需要读的数据在创建之后:直接读快照
回滚
取消重定向即可
删除快照
锁定源卷的I/O操作,根据映射表将快照中的数据写入到源卷,删除快照
两种方式对比
Redis–Snapshotting
- 快照是默认的持久化方式。这种方式将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以配置自动做快照持久 化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照,下面是默认的快照保存配置
save 900 1 #900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内容如超过10个key被修改,则发起快照保存