为什么崩溃恢复对于 Append-only 数据库要简单得多?

Why crash recovery are much simpler for Append-only database?

在“设计数据密集型应用程序”一书中,它说 Concurrency and crash recovery are simpler if segment files are append-only or immutable. For crash recovery, you don't need to worry if a crash happened while a value was being overwritten, leaving you with part of old data and part of new data.

然而,“留给你一部分旧数据,一部分新数据”,我没看懂。即使是Append-only数据库,当追加新数据中断时,也会有一部分旧数据和一部分新数据。

数据写入日志后,数据库报告“数据已提交”。在append only数据库中,日志是唯一写入数据的地方;没有其他数据文件要更新,因此没有复杂性。

加载仅附加数据库时,唯一发生的事情是读取日志文件以构建一些 in-memory 结构以进行优化。此负载是由于崩溃还是由于常规框重启而发生并不重要。

Impaler 很好地描述了非仅附加数据库的复杂性。有多种数据结构,必须有一个过程才能在崩溃后使它们保持同步。