CMU-15-445 数据库系统实验四日志和恢复

前言

这次实验较为简单,只花了不到一周的时间,可能是慢慢习惯了实验,所以感觉这次实验不难。

实验四:日志和恢复

第四个实验是在数据库系统中实现日志记录和恢复机制。

任务一:日志管理器 & 任务二:系统恢复

  • include/logging/log_record.h
    • 日志记录的基本结构
  • logging/log_manager.cpp和logging/log_manager.h
    • 刷新日志记录到磁盘
  • table/table_page.cpp和include/logging/table_page.h
    • 以元组为单位,构造日志项,并通过log_manager写入日志
  • concurrency/transaction_manager.cpp和include/concurrency/transaction_manager.h
    • 更新事务的lsn
  • logging/log_recovey.cpp和include/logging/log_recovey.h
    • 反序列化日志(即分析阶段),重做、撤销

总结

第四次实验虽然改的文件多,但量并不大,比起上一次实验的并发控制简单多了。

虽然比上次实验简单,但是这次实验也有一些难点,首当其冲的就是log_manager,因为要实现后台线程和线程同步。

我采用的是最直观但不怎么简洁的办法,用条件变量控制线程,再用一个原子布尔变量来判断后台线程是否在运行。

任务二只要理解恢复算法就能很快写出来了。