1 INTRODUCTION
For decades, transactions have been widely used in
database management systems (DBMSs), file systems,
and applications to provide the ACID (Atomicity, Consistency,
Isolation, Durability) properties, but usually at
the cost of implementation complexity and degraded
performance. Transaction recovery, which ensures atomicity
and durability, is a fundamental part of transaction
management [1]. In transaction recovery, a write operation
keeps the previous version of its destination pages
safe before the successful update of the new version, to
provide consistency in case of update failure (e.g., due
to a system crash). Write ahead logging (WAL) [2] and
shadow paging [3] are the two dominant approaches
to transaction recovery. In WAL, a write updates the
new version in the log and synchronizes it to the disk
before over-writing the old version in-place. Additional
log writes and the required synchronization make this
approach costly. In shadow paging, a write overwrites
the index pointer (the metadata to locate pages) to point
to the new version after updating the new version in a
new location (as opposed to over-writing the old version
as done inWAL). This approach causes scattering of data
over the storage space, reducing locality of read accesses,
which is undesirable for high performance.