【问题标题】:Where actual blockchain state data stored : in memory , in file or in database?实际的区块链状态数据存储在哪里:内存、文件还是数据库?
【发布时间】:2020-12-03 02:26:14
【问题描述】:

我有一个查询,区块链数据保存在每个节点的哪里。在谷歌、StackOverflow 和一些博客中搜索了很长时间后,得到了很多答案:比如:它保存在像 level-DB 或 Rocks-DB 这样的数据库中,有人说它保存在内存中的变量中,有人说它保存在一个变量中文件(来自 hyperledger-fabric)。

我想知道,有没有一种特殊的存储区块的方法是大多数区块链框架所遵循的?

或者所有这些框架选择不同的方法(如文件、内存或数据库)。

我知道区块链的当前状态/世界状态保存在数据库中。这种当前状态/世界状态与实际的区块链完全不同。在当前状态或世界状态下,数据是可以修改的,但在实际区块链中区块/数据是不可变的。

简而言之,我的问题是:

数据(不可变块)如何存储在区块链中每个完整节点的账本上?它是在内存中,在文件中(如 JSON、CSV 文件)还是在数据库中

【问题讨论】:

    标签: blockchain hyperledger ethereum bitcoin decentralized-applications


    【解决方案1】:

    区块链是一个分布式数据库。这意味着数据分散在节点(参与的计算机)周围。每个节点都可以决定如何存储数据(以及是否存储数据)。

    当您访问数据时,您实际上是在向网络上的节点发送消息。原则上,如果您只想发送交易,则不必在计算机上存储区块链的任何部分。区块链协议保证您可以正确可信地从收到的信息片段中重建数据。

    对于每个节点,存储完全取决于软件的编写方式和运行配置方式。对于以太坊和比特币等大型区块链,整个区块链数据大约为数百 GB,因此如果您将软件配置为本地存储,该软件通常会从其他计算机下载大量大文件并将其存储在您的磁盘上.对于某些程序,作者可能更喜欢使用数据库而不是文件。并且在大多数情况下,部分数据会通过操作系统缓存和程序自己的数据结构临时保存在内存中。

    【讨论】:

    • 您的部分评论“对于以太坊和比特币等大型区块链,整个区块链数据以数百千兆字节为单位”,然后每个完整节点(不是轻量级节点)将整个数据保存在本地。那么他们将大量数据保存在内存、数据库还是文件中??
    • 这是一个设计选择,由作者决定。有些程序使用普通文件,有些使用数据库,有些使用混合。内存不是持久的,因此几乎在任何情况下磁盘都用于存储永久数据。
    • 请不要忘记标记正确答案并关闭问题
    • 通常情况下,是否所有数据都存储在比特币的所有节点上?或者它的一部分在一堆节点上,以后可以串起来重建整个?我问是因为,随着区块链规模不断扩大,节点应该如何存储所有区块链?它可能会达到数 TB 甚至更多。
    • 是的,这真的很有趣。 Solana 等新人如何存储区块链数据?
    【解决方案2】:

    这取决于节点客户端的实现。几乎所有这些都使用键值存储来提高效率。仅举几例:

    • Bitcoin Core 使用 LevelDB
    • GoEthereum(又名 geth)使用 LevelDB
    • Rippled(XRP 客户端)可以配置为使用 RocksDB 或 NuDB

    【讨论】:

      【解决方案3】:

      它存储在分类帐中。现在该分类帐可以采用任何 NO-SQL 技术堆栈。

      【讨论】:

      • 正如您所说:“分类帐可以采用任何 NO-SQL 技术堆栈。”,您知道著名的区块链应用程序使用哪种技术,例如比特币?还是以太坊?还是超级账本结构?这会很有帮助。我搜索了很多,但没有找到答案..
      • 好的,所以他们中的大多数使用(键,值)对来存储数据。可以存储的数据类型没有限制。通常,实际数据不直接存储在区块链中,而是计算出来的哈希值。阅读默克尔树,它会清除很多东西!
      【解决方案4】:

      比特币节点将原始区块数据保存在磁盘上的 .bitcoin/blocks/blk*.dat 文件中。每个 blknnnnnn.dat 的大小为 128MB,截至今天的数据总大小约为 300GB。 所有已知区块的元数据都保存在 .bitcoin/blocks/index/nnnnnn.ldb 文件中的 Level DB 文件中。

      【讨论】:

        猜你喜欢
        • 2020-11-08
        • 2017-05-30
        • 1970-01-01
        • 2010-11-09
        • 2011-01-06
        • 1970-01-01
        • 1970-01-01
        • 2014-02-16
        • 2015-01-31
        相关资源
        最近更新 更多