数据库恢复子系统的常见技术和方案对比(一)
作者:实验室小陈/大数据开放实验室 对于事务型数据库而言,最关键的功能是要保证事物ACID属性,其中原子性和持久性依靠恢复子系统保证。事务在进行中如果发现无法继续,就需要用恢复子系统进行回滚;或者出现系统崩溃,也需要依靠恢复子系统把数据库恢复到崩溃前状态。在本专栏中,我们主要介绍Logging Protocols / Recovery Algorithms,它们分别是事务型数据库恢复子系统中的两个关键部分。 — Logging Schemes— 恢复子系统中的关键是恢复算法,目的是要实现两个过程。首先是事务执行过程中为系统恢复做的准备工作,目前大多数系统通常采用日志记录方式,尽管事务执行过程中同时记录数据更新日志会有额外开销,但如果没有日志,一旦系统崩溃则无法实现系统恢复和未完成事务的回滚。此外,还有Shadow Paging方案,即数据每次修改都通过Copy-on-Write的方式进行。在更新数据时,复制一份原数据的副本并在副本上进行更新,最后通过用副本替换原始数据的方式完成操作。Shadow Paging方案开销较大,一般用在更新不频繁的场景下,如文本编辑器等类似场景,因此事务型数据库系统里大都采用基于日志的方案。第二个过程是在出现系统故障或事务回滚的情况时,如何利用系统记录的日志信息并采用合适策略来保证数据库能够恢复到正确状态。 Physical Logging &