Hyperledger Fabric中链和状态数据库的区别是什么?

6

Hyperledger Fabric中链和状态数据库之间的主要区别是什么?我很困惑它们是否相同。

2个回答

27

在Hyperledger Fabric中有两个地方可以“存储”数据:

  • 分类账(the ledger)
  • 状态数据库(the state database)

分类账是实际的“区块链”。它是一个基于文件的分类账,用于存储序列化的区块。每个区块都含有一个或多个交易。每个交易包含一个读写集,该集合修改一个或多个键/值对。分类账是数据的确定性来源,且是不可变的。

状态数据库保存了给定密钥的最后已知提交值。当每个节点验证并提交交易时,它将被填充。状态数据库始终可以通过重新处理分类账进行重建。目前有两个状态数据库选项:内置LevelDB或外部CouchDB。

顺带一提,如果您熟悉Hyperledger Fabric频道,则每个频道都有单独的分类账。


1
你提到了“状态数据库保存了任何给定键的最后已知提交值”,那么当我们查询数据时,它是从链上还是从状态数据库中检索数据?如果是从状态数据库中检索数据,那么它如何检索特定的键呢?因为你提到了“状态数据库保存了任何给定键的最后已知提交值”。 - Moulali
链码中的查询或GetState从状态数据库返回数据。它们只会返回一个键的最后一个值。 如果您想获取一个键的完整历史记录,需要在同行的配置中启用历史数据库。 - Gari Singh
@GariSingh,感谢您的解释,您能否提供有关“配置中的历史数据库”的一些文档链接?根据Hyperledger FAQ,唯一提到的是使用GetHistoryForKey()查询密钥的所有值的历史记录。谢谢。 - Liping Huang

1
区块链是一个交易日志,结构化为哈希链接块,每个块包含N个交易序列。块头包括块交易的哈希值以及先前块头的哈希值。通过这种方式,分类账上的所有交易被排序并加密链接在一起。
状态数据库只是对链式事务日志的索引视图,因此可以随时从链中重新生成。
来源: http://hyperledger-fabric.readthedocs.io/en/release/ledger.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接