文件系统的redo和undo机制类似于数据库中的redo和undo机制。要理解该机制,首先要明白什么是log。
1 log
记录数据修改情况的结构就是日志(log)。
log是log entry的序列,记录了所有的更新活动。一个更新日志记录(update log record)描写了一次数据的写操作。
记事务为T,常见的日志记录类型如下:
- <T,start> 事务T已经开始
- <T,X,V1,V2> 事务T对X进行写操作,V1为X初始值,V2为X更新值
- <T,commit> 事务T已经提交
- <T,abort> 事务T已经中止
每次事务执行写操作之前,必须就已经建立该次写操作的日志记录。
对log的恢复,一般采用两种技术:延迟修改技术(deferred-modification technique)和立即更新技术(immediate-modification technique)。
1.1 延迟修改技术
延迟修改技术是通过将write操作拖延到事务提交时才执行,来保证事务的原子性。即,在<T,commit>之后,才向持久性内存中写数据。
对于日志中,只要事务提交了,即<T,commit>就要进行redo,未提交则无需做任何处理。并且redo一定要从前往后按顺序执行。