导入数据库
通过提供数据库并使用下一节中解释的 import-db 相关标志启动节点,节点能够重新处理以前生成的数据库。 导入数据库流程的可能用例:
- 索引从创世纪到现在的所有数据;
- 验证区块链国家;
- 确保新软件版本没有向后兼容性问题;
- 检查指定时间的区块链状态(这包括额外的代码更改,但是例如,如果您对块 255255 处的 API 端点的结果感兴趣,您可以使用 import db 并强制节点在对应于该日期的块处停止)。
如何启动流程
假设我们有以下数据结构:
~/elrond-go/cmd/node
在上述路径中找到了node
二进制文件。现在,我们有了一个先前构建的数据库(来自一个与起源链同步的观察者,从未交换过碎片)。这个数据库将放在一个目录中,假设我们将它放在节点的二进制文件附近,产生如下的数据结构:
.
├── config │ ├── api.toml
│ ├── config.toml
│ ...
├── import-db
│ └── db
│ └── 1
│ ├── Epoch_0
│ │ └── Shard_1
│ │ ├── BlockHeaders
│ │ │ ...
│ │ ├── BootstrapData
│ │ │ ...
│ │ ...
│ └── Static
│ └── Shard_1
│ ...
├── node
非常重要的是,名为db
的目录是一个子目录(在我们的例子中是import-db
)。另外,请检查一下config
目录是否与产生db
数据结构的节点相匹配,包括prefs.toml
文件。
警告
请确保/elrond-go/cmd/node/db
目录为空,这样导入数据库的过程将开始
从创世纪到最后一个纪元。
接下来,可以使用以下命令启动节点:
cd ~/elrond-go/cmd/node
./node -use-log-view -log-level *:INFO -import-db ./import-db
注
请注意,-import-db
标志指定了包含源 db 目录的目录的路径。上例中提供的值假设导入数据库目录名为import-db
,位于node
可执行文件附近。
该节点将开始重新处理所提供的数据库。它将以这样的消息结束:
import ended because data from epochs [x] or [y] does not exist
提示
如果导入数据库的数据来自可靠的来源,可以通过跳过块头的签名检查来加快导入数据库的过程。
在这种情况下,节点应该从前面提到的所有标志开始,加上-import-db-no-sig-check
标志。
导入数据库并填充Elasticsearch集群
利用import-db
机制的一个用例是用在这个过程的帮助下重新处理的数据填充一个 Elasticsearch 集群。
提示
用于填充 Elasticsearch 集群的 Import-DB 应该仅用于完整设置(每个 Shard 中的一个节点+一个元链节点)
准备意味着更新每个节点的external.toml
文件。更多细节可以在这里找到。
如果一切配置正确,节点会将重新处理的数据推送到 Elasticsearch 集群中。