背景
对于任何一条区块链来说,随着运行时间的增长,数据量的增加是不可避免的一件事。那对于新加入的节点来说,需要同步的历史数据就会越来越多,同步数据花费的时间也会越来越长。这对于节点参与的积极性是有着不利的影响的。本文主要讨论能够减少新节点数据全同步花费时间的几种方法(目前主网全同步数据需要2天时间)。
同步的耗时因素
讨论具体方法之前,先考虑下同步数据时花费时间的具体耗时因素。
数据量 : 数据总量只会越来越多,属于不可控因素
网络带宽 : 可通过增加带宽来提高数据的下载速度
服务器硬件(内存,硬盘,CPU) : 硬件性能越高,对于同步的区块数据的处理就越快。
同步模式:快速同步与全同步因为同步模式不一样,同步花费的时间不一样。本文数据同步花费时间过长的问题就是针对全同步模式来说的。
方法总结
1、提升网络带宽,硬件性能
提升内存,CPU,特别是硬盘的性能,对同步数据的处理效率会有较大的提升。
缺点是增加了矿工的成本,不能从根本上解决问题。
2、将区块数据集中存储到公开地址,如公有云
新节点提前到共有云下载需要同步的区块数据,节点ghpb程序启动后只需要同步之后的区块数据即可。
相对于全同步模式来说,数据总量不变,但花费时间应该会大大降低(主要受网络影响)。
3、快速同步模式
在不考虑历史状态数据的情况下, 可采用快速同步模式进行数据同步。目前主网的情况,快速同步模式下1个小时即可完成同步。
4、快速同步+历史状态数据重塑
如果需要历史状态数据,可以先使用快速同步将区块数据同步下来,然后在本地将历史状态数据重塑。 对于矿机而言,可以实现一边挖矿一边重塑历史状态数据。(考虑到对数据库的影响,可以限制下重塑历史状态数据的效率。)
5、调整同步起始位置 + 快速同步 | 历史状态数据重塑
对于新节点的加入,同步位置都是从创世块开始同步的,可以预想到随着交易量的上升,快速同步模式也并不能彻底解决耗时的问题,因此可以考虑将同步的起始区块调整为第N块,其中 0 <N<block.height,为了降低同步时间,可以将N尽量接近block.height。至于0~N之间的区块数据,可以在后台慢慢同步,同步完成后再本地重塑历史状态数据。
THE END!