使用RedoLog和<WAL,执行Commit或者Rollback操作,数据刷盘>顺序
可以保证持久性和原子性

case 0
使用UndoLog和<WAL,执行Commit或者Rollback操作,数据刷盘>顺序
在紫色阶段,非易失存储里没有了新值,如果出现crush,就无法恢复了

case 1
使用UndoLog和<WAL,数据刷盘,执行Commit或者Rollback操作>顺序
可以保证持久性和原子性

case 2
以上虽然两种都实现了持久性和原子性,但是只能支持单线程
思路如下:
如果要保证随时可以恢复并执行Commit和Rollback操作,必须把旧值和新值在非易失存储(WAL或者磁盘)里保存;
而上述单Log场景,都将磁盘作为其中一份数据(旧或者新)的保存地址,而当变成多事务场景时,磁盘就成了临界资源;因此合理的手段是同时使用两种日志,这样磁盘里始终拥有两份数据,不用担心Crush。
下面是自己对数据库故障恢复的简单理解,不想再深究了

牙膏困了
