这是「区块链技术指北」的第 38 篇文章。
0x00 背景
更新:从 EOSIO 1.1.0 开始,已经默认支持 MongoDB,所以本文提供的方法仅做参考。
执行 脚本编译 nodeos 会默认安装 mongodb,但是从 Dawn 4.0 开始, 插件不再生效,详情请参考 #3030。#4304 PR 重新支持 MongoDB,本文讲解如何将链上数据实时同步到 MongoDB。
0x01 部署
部署的思路如下:
编译支持 mongodbplugin 的 nodeos
配置 MongoDB
启动 MongoDB
创建数据库
启动 nodeos,同步主网数据
查看 MongoDB,确认数据
接下来我们逐步讲解。
由于 EOSIO 代码库有 分支,所以可以使用 git 自动将支持 mongodbplugin 插件的代码合并,详细命令如下:
如果 nodeos 编译成功,MongoDB 自动安装,路径在$USER/opt/mongodb。执行 ,如果有如下的输出,表示 MongoDB 插件编译成功。
接下来我们配置 MongoDB。
mongodb.conf 配置文件内容如下:
接着启动 MongoDB,并且创建 eos 数据库。
然后配置 EOS 主网 fullnode。
修改 config.ini 相关配置,添加如下参数:
最后执行 start.sh,同步主网数据。
0x02 测试
我们执行 登录到 MongoDB,可以对同步的数据进行校验。
0x03 小结
之前介绍了将 EOS 主网数据同步到 MySQL,本文讲解了另一种同步到文档型数据库的方法。MySQL 和 MongoDB 最大的区别在于,MySQL 是传统的关系型数据库,支持 SQL 标准,而 MongoDB 是文档型数据库。MySQL 天生适用于结构化数据以及需要使用事务的场景,天生支持 SQL 标准,对开发者比较友好。
MongoDB 适合如下场景:[1]
表结构不明确且数据不断变大,MongoDB 是非结构化文档数据库,扩展字段很容易且不会影响原有数据
更高的写入负载,MongoDB 侧重高数据写入的性能,而非事务安全
数据量很大或者将来会变得很大,MongoDB 内建了 Sharding、数据分片的特性,容易水平扩展
高可用性,MongoDB 自带高可用,自动主从切换(副本集)
而 MongoDB 不支持事务、不支持 JOIN,所以涉及事务和复杂查询的场景不适合 MySQL。
关于 MongoDB 和 MySQL 的对比,可以点击 此处 查看。
0x04 参考
「区块链技术指北」同名知识星球,点击加入。
领取专属 10元无门槛券
私享最新 技术干货