我目前正在阅读 Martin Kleppman 的 Designing Data-Intensive Applications。
在书中,他提出了 Bitcask 存储引擎作为如何进行哈希索引的示例。
他说这是关于崩溃恢复...
如果数据库重新启动,内存中的哈希映射将丢失。原则上,您可以通过从头到尾读取整个段文件并记录每个键的最新值的偏移量来恢复每个段的哈希映射。但是,如果段文件很大,这可能需要很长时间,这会使服务器重新启动很痛苦。Bitcask 通过在磁盘上存储每个段的哈希映射的快照来加速恢复,可以更快地将其加载到内存中。
如果发生崩溃,Bitcask 如何处理过期的快照(在拍摄快照后添加新密钥)?
每次添加/更新新的键/值对时, Bitcask 都会拍摄快照吗?
或者 Bitcask 是否会在请求不在内存哈希表中的密钥时对段文件进行 O(n) 搜索(因为可能发生了崩溃并且在拍摄快照后添加了密钥) ?
我正在尝试查看 Bitcask 的源代码,但我很难理解它,因为我不了解 Erlang。
谢谢!