超级账本中的数据存储

6

我开始学习Hyperledger,并通过创建一个使用composer playground的示例应用程序熟悉了它。我的疑惑在于使用Hyperledger进行分散存储。我已经阅读了一些说明文档,其中提到了:

  • 将数据的哈希值保存在区块链中以确保其不可变性。

  • 将图像作为资产通过base64字符串保存在区块链中。

有些事情是清楚的,但仍然存在大量不确定因素,包括:

  • 数据存储在区块链中的位置是哪里?是在couchdb中吗?
  • 假设数据存储在couchdb中,并且通过多个对等方向通道添加新对等方,这是否意味着所有对等方的couchdb都会同步?

任何关于区块链数据存储、分散存储等内容的资源/教程都将非常有帮助。

谢谢!

3个回答

7
区块链数据,也称账本,以物理文件的形式存储。它包含链接块,每个块由一组交易组成。每个状态改变都会被存储在其中。
相比之下,全局状态只包含每个资产的当前状态,因为这是应用程序所需的。
全局状态实现为数据库,CouchDB是一个不错的选择,还有一个更简单的选项可用,但在查询能力方面提供的功能要少得多。
当然,这意味着可以随时从账本轻松地重新创建全局状态。
当新对等方添加到通道中时,将从账本创建其自己的全局状态。
可以在此处阅读一个很好的描述:https://hyperledger-fabric.readthedocs.io/en/release-1.3/ledger/ledger.html

1
一个疑问。我一直在阅读有关区块链内文件存储的内容。最终得出结论,以太坊或超级账本基于的区块链必须连接到IPFS进行文件存储,并将返回的哈希值存储回超级账本/以太坊。但是IPFS也是一个区块链,它是如何能够存储数据的呢? - Sooraj
1
区块链并不适合存储大量数据,而且在以太坊上使用会非常昂贵。IPFS 不是区块链,它是一个版本化的点对点文件共享系统(使用 BitTorrent 技术),你可以将其视为分布式文件系统,因为文件存储在网络上用户的文件系统中。更多面向区块链的解决方案将是像 Siafilecoin 这样的项目(使用 IPFS),但是数据仍然不会存储在区块链本身上。 - Yann39

3
进一步说明,账本并不直接存储业务对象,而是存储有关这些对象的重要信息/事实 - 因此这些重要事实的历史记录存储在账本中,而这些重要事实的当前值存储在世界状态中。因此,实际对象(即有关其事实存储在账本和世界状态中的对象)存在于外部数据存储中 - 可以称之为“链外”数据。但是,我们在账本中存储的信息允许我们了解它的相关事实并进行定位。希望这可以帮到您。

很好,你的回答命中了所提出问题的核心。保存链下数据的最佳选择是什么?如果我们有一个可以处理许多(商业)文件哈希的Hyperledger,我们如何存储这些数据?IPFS可能是一个不错的选择吗?请注意,我们可能会有许多通道,并且我们不会与其他通道的同行共享某些文件。 - shogitai
1
目前,IPFS是我想到的唯一选择,但它并不简单,因为每个参与者都必须安装区块链节点、IPFS和一个中间件。这将使点对点变得复杂,并且中间件必须始终保持运行状态。虽然我从未尝试过,但这是我想到的解决方案。关于通过频道共享文件-您可以以加密格式存储数据,并仅向频道的参与者提供密钥。这可能会解决问题。请告诉我您最终是如何解决问题的。 - Rahul Jain

1
  1. 数据存储在区块链中的账本中。Couchdb仅保存状态,可以从账本刷新。Couchdb有助于更快地查询区块链数据。
  2. 是的,所有同行都会通过八卦协议拥有相同的区块。Couchdb只是从账本中读取数据并为自己创建一个状态。

1
那么关于需要存储在“离链”上的大型商业文件呢?最好的选择是什么? - shogitai

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