如果系统每次收到写入请求后,等待数据完全写入持久化存储再返回结果,这样数据丢失的可能性大大减少,但是一般持久化操作都是磁盘IO操作(甚至网络IO操作),处理的耗时比较长,这样读写的效率就会很低。(write through)
为了保证读写的效率,一般我们都会通过异步的方式来写数据,即先把数据写入内存,返回请求结果,然后再将数据异步写入。但是如果异步写入之前,系统宕机,会导致内存中的数据丢失。(write back)
当系统出现故障重启后,通常要对前面的操作进行replay。但是从头开始代价太高了,所以通过checkpoint来减少进行replay的操作数。checkpiont机制保证在某一时刻,系统运行所在的易失性存储数据与持久化存储的数据保持完全同步,当系统出现故障进行重启的时候,从这一点开始恢复(replay),从而保证 At-Least 语义.
接下来总结一下我遇到的使用checkpoint的工具(后续遇到再不断增加)。
可以数据库故障恢复与检查点来学习checkpoint机制, 以下内容参考《数据库系统基础讲义》
事务对数据可进行操作时:先写运行日志;写成功后,在与数据库缓冲区进行信息交换。