实际区块链状态数据存储在哪里:在内存中,在文件中还是在数据库中?
Where actual blockchain state data stored : in memory , in file or in database?
我有一个疑问,区块链数据在每个节点中保存在哪里。在google, Whosebug, 和一些博客中搜索了很长时间后,得到了很多答案:比如:它保存在像level-DB或rocks-DB这样的数据库中,有人说它保存在内存中的变量中,有人说它保存在一个文件中(来自 hyperledger-fabric)。
我想知道,是否有大多数区块链框架遵循的特定存储块的方法?
或者所有这些框架选择不同的方法(如文件、内存或数据库)。
我知道有一个当前的 state/world 区块链状态保存在数据库中。当前的 state/world 状态与实际区块链完全不同。在当前状态或世界状态下,数据可以修改,但在实际区块链中 block/data 是不可变的。
简而言之,我的问题是:
数据(不可变块)如何存储在区块链中每个完整节点的账本上?它是在内存中,在文件中(如 JSON,CSV 文件),还是在 DB
中
区块链是一个分布式数据库。这意味着数据分散在节点(参与计算机)周围。每个节点都可以决定如何存储数据(以及是否存储数据)。
当您访问数据时,您实际上是在向网络上的节点发送消息。原则上,如果您只想发送交易,则不必在计算机上存储区块链的任何部分。区块链协议保证您可以正确可信地从接收到的信息片段中重建数据。
至于每个节点,存储完全取决于软件的编写和配置方式 运行。对于以太坊和比特币等大型区块链,整个区块链数据在数百 GB 量级,因此如果您将软件配置为将其存储在本地,该软件通常会从其他计算机下载大量大文件并将其存储在您的磁盘上.对于某些程序,作者可能更喜欢使用数据库而不是文件。而且在大多数情况下,部分数据会通过OS缓存和程序自身的数据结构暂时保存在内存中。
这取决于节点客户端的实现。几乎所有人都使用 key-value 存储来提高效率。具体举几个例子:
- Bitcoin Core 使用 LevelDB
- GoEthereum (a.k.a geth) 使用 LevelDB
- Rippled(XRP 客户端)可以配置为使用 RocksDB 或 NuDB
它存储在 Ledgers 中。现在分类帐可以采用任何 NO-SQL tech-stack.
比特币节点将原始块数据保存在磁盘上的文件 .bitcoin/blocks/blk*.dat 中。每个 blknnnnnn.dat 的大小为 128MB,截至今天的数据总大小约为 300GB。
所有已知块的元数据都保存在 .bitcoin/blocks/index/nnnnnn.ldb 文件中的 Level DB 文件中。
我有一个疑问,区块链数据在每个节点中保存在哪里。在google, Whosebug, 和一些博客中搜索了很长时间后,得到了很多答案:比如:它保存在像level-DB或rocks-DB这样的数据库中,有人说它保存在内存中的变量中,有人说它保存在一个文件中(来自 hyperledger-fabric)。
我想知道,是否有大多数区块链框架遵循的特定存储块的方法?
或者所有这些框架选择不同的方法(如文件、内存或数据库)。
我知道有一个当前的 state/world 区块链状态保存在数据库中。当前的 state/world 状态与实际区块链完全不同。在当前状态或世界状态下,数据可以修改,但在实际区块链中 block/data 是不可变的。
简而言之,我的问题是:
数据(不可变块)如何存储在区块链中每个完整节点的账本上?它是在内存中,在文件中(如 JSON,CSV 文件),还是在 DB
中区块链是一个分布式数据库。这意味着数据分散在节点(参与计算机)周围。每个节点都可以决定如何存储数据(以及是否存储数据)。
当您访问数据时,您实际上是在向网络上的节点发送消息。原则上,如果您只想发送交易,则不必在计算机上存储区块链的任何部分。区块链协议保证您可以正确可信地从接收到的信息片段中重建数据。
至于每个节点,存储完全取决于软件的编写和配置方式 运行。对于以太坊和比特币等大型区块链,整个区块链数据在数百 GB 量级,因此如果您将软件配置为将其存储在本地,该软件通常会从其他计算机下载大量大文件并将其存储在您的磁盘上.对于某些程序,作者可能更喜欢使用数据库而不是文件。而且在大多数情况下,部分数据会通过OS缓存和程序自身的数据结构暂时保存在内存中。
这取决于节点客户端的实现。几乎所有人都使用 key-value 存储来提高效率。具体举几个例子:
- Bitcoin Core 使用 LevelDB
- GoEthereum (a.k.a geth) 使用 LevelDB
- Rippled(XRP 客户端)可以配置为使用 RocksDB 或 NuDB
它存储在 Ledgers 中。现在分类帐可以采用任何 NO-SQL tech-stack.
比特币节点将原始块数据保存在磁盘上的文件 .bitcoin/blocks/blk*.dat 中。每个 blknnnnnn.dat 的大小为 128MB,截至今天的数据总大小约为 300GB。 所有已知块的元数据都保存在 .bitcoin/blocks/index/nnnnnn.ldb 文件中的 Level DB 文件中。