Hyperledger fabric 中链数据库和状态数据库的区别?

Difference between chain and state database in Hyperledger fabric?

Hyperledger fabric 中链数据库和状态数据库的主要区别是什么。我很困惑他们是否相同。

Hyperledger Fabric 中有两个 "store" 数据的地方:

  • 分类帐
  • 状态数据库

账本是真实的"blockchain"。它是一个基于文件的分类帐,用于存储序列化的块。每个区块都有一个或多个交易。每个事务包含一个读写集,它修改一个或多个 key/value 对。账本是数据的最终来源,是不可变的。

状态数据库保存任何给定键的最后已知提交值。当每个对等方验证并提交交易时,它就会被填充。状态数据库总是可以通过重新处理账本来重建。状态数据库目前有两种选择:嵌入式 LevelDB 或外部 CouchDB。

顺便说一句,如果您熟悉 Hyperledger Fabric 通道,那么每个通道都有一个单独的分类帐。

该链是一个事务日志,结构为哈希链接块,其中每个块包含一系列 N 个事务。区块头包括区块交易的哈希值,以及前一个区块头的哈希值。通过这种方式,分类账上的所有交易都被排序并以加密方式链接在一起。

状态数据库只是链交易日志的索引视图,因此可以随时从链中重新生成。

来源:http://hyperledger-fabric.readthedocs.io/en/release/ledger.html