実際問題、メモリやデータだけを復元の対象とするとしたら
DBなど使わなくとも原本を保存しておけば何があっても元に戻せるのだが
そういう話ではないし
どのみち非同期処理にC#よろしくコルーチンが使いたいわけで
ただしそのままでは並行して細切れに処理が走って危険なので
書き込む前にbarrierを設けようというアイデアがまずあって
そうすることでついでに例外安全性も確保できるし
ならばキャンセル処理もできますわなぁという巡り合わさった面白い話