背景
OKC节点一直都是使用golevelDB存储数据,levelDB作为高效的KV存储方案被广泛应用于各种区块链项目中。
近期,经过OKC团队的调研和实际测评,rocksDB是比levelDB更优秀的KV存储方案,能够更好的应用于OKC节点,显著提高DB读写效率,进而提高网络出块效率。
所以,OKC计划在测试网和主网中逐步使用rocksDB。
问题
那么,针对测试网或主网已有levelDB数据,如何高效安全的转换为rocksDB数据并基于此数据继续参与网络中区块的同步和生产呢?
解决方案
针对以上问题,我们开发了一个DB转换工具,该工具包含在最新的OKC代码中。
2. 编译工具
make install WITH_ROCKSDB=true
WITH_ROCKSDB=true
是必须的,否则无法使用rocksdb功能。
3. 一键转换
命令行方式
exchaind data convert --home {oec-node-home}
命令执行成功后,原{oec-node-home}/data/
中的所有*.db
由leveldb转换为rocksdb,并将该目录重命名为{oec-node-home}/data_backup
。对应的rocksdb数据保存在{oec-node-home}/data
目录中。
之后您就可以利用{oec-node-home}/data/
启动OKC rocksdb节点了。
你可能会出现遇到panic: couldn't create db: Error initializing DB: Corruption: Unsupported compression method or corrupted compressed block contents: Snappy
这样的错误,此时需要安装Snappy
并重新编译rocksdb,具体可以参考这里
容器方式
docker run --name db-convert -d -v {oec-node-home}:/root/.exchaind okexchain/db-convert
执行完成后,效果同上。
你也可以通过查看log确认convert进度:
docker logs db-convert
经测试,转换速率约48G/h.