知识卡片
区块文件是唯一真理来源,其余数据库可重放重建
内容
Peer节点账本由三部分构成:只追加写入的区块数据文件、供快速查询当前值的状态数据库、供审计历史变化的历史数据库(对应[[账本拆成六个数据库背后的读写分工]]中六种存储里的三种)。节点重启时会分别检查这三者记录的账本高度,一旦发现状态数据库或历史数据库落后于区块数据文件(例如进程在提交状态库之前崩溃),就以区块数据文件的高度为准,把缺失区间的区块重新读出来、逐一”回放”进状态库或历史库,而不是反过来纠正区块文件。这本质上是把区块数据文件当成唯一的事实真相(source of truth),状态库和历史库只是从这份真相派生出来、可以随时重建的索引视图——即便这两个派生视图损坏或丢失,只要区块数据文件完好,就总能重放恢复,这也是事件溯源(event sourcing)思路在账本存储层的体现。
参考来源
《Hyperledger Fabric技术内幕:架构设计与实现原理》第7章《公共功能模块》