【问题标题】:Difference between chain and state database in Hyperledger fabric?Hyperledger结构中链和状态数据库之间的区别?
【发布时间】:2017-11-27 18:20:14
【问题描述】:

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

【问题讨论】:

    标签: hyperledger-fabric hyperledger


    【解决方案1】:

    Hyperledger Fabric 中有两个“存储”数据的地方:

    • 账本
    • 状态数据库

    账本是真正的“区块链”。它是一个基于文件的分类帐,用于存储序列化的块。每个块都有一个或多个事务。每个事务都包含一个读写集,它修改一个或多个键/值对。账本是数据的权威来源,并且是不可变的。

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

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

    【讨论】:

    • 您提到“状态数据库保存任何给定键的最后一个已知提交值”,所以当我们查询它从哪里检索数据时 1) 从链或 2) 从状态数据库?如果它来自状态数据库,它如何检索特定键,因为您提到“状态数据库保存任何给定键的最后一个已知提交值”
    • 链码中的查询或 GetState 从状态数据库返回数据。它们只会返回键的最后一个值。如果要获取密钥的完整历史记录,则需要在对等节点的配置中启用历史数据库
    • @GariSingh 感谢您的解释,您能否提供一些有关“配置中的历史数据库”的文档链接,来自超级账本常见问题解答,唯一提到的是使用 GetHistoryForKey() 查询所有键值的历史记录,谢谢。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 2017-04-17
      • 1970-01-01
      • 2015-03-24
      相关资源
      最近更新 更多