基于区块链的健康链系统设计与实现(5)区块链性能优化
4.4区块链性能优化
通过更改相关参数和优化,交易性能在单节点的情况下能达到100个TPS以上。比如将生成块的时间由每10分钟改成10秒,将调整难度时间由2周改成80秒,将交易内存池扩大,并扩大交易最大容量大小等等。
在测试性能时,需要提前创建大量未花费的交易,并记录交易哈希值以备使用。创建交易的思路是将某个交易按固定数量生成多个输出,然后循环以上次的交易输出作为新的交易输入得到更多的交易。以1个CoinBase交易为例,其输入为50个btc,将其按数量输出为80份。再对这80个交易输出进行操作,对每个输出作为新的交易输入又得到100个交易输出,以同样的步骤再次划分为100倍。最终得到800000个数量约为6000聪btc的交易输出。如下为示例代码:
系统也对数据的存储优化进行了尝试。在比特币的文件存储系统中,blocks目录下blk开头的后缀为dat的文件表示当前的区块数据,rev开头的后缀为dat的文件是区块回滚数据。chainstate目录主要存储UTXO(Unspent Transaction Output)相关的数据,以leveldb数据库存储,indexes目录存储的同样是基于leveldb的交易索引数据。
当收到新的区块或者区块回滚时,系统代码以CChainState::ConnectTip和 DisconnectTip为相应的入口。
数据分片在区块链的数据副本基础上进行,将相关数据分为100个区,具体分区根据交易在区块中的顺序而来,序号1、101、1001等序号除以100其模为1的交易组成第1个分区,依次类推。表4列出了第9个、19个…99个分区的数据。系统测试时将8,000,000个长度为100个字符的数据存储在区块链上,区块高度为21105,总区块大小为2825M,总的UTXO数据大小为588M,交易索引总大小为389M。
A表示交易的顺序,B是每个分区下面的区块数据大小,D是分区后交易索引大小,F是分区后UTXO数据大小。C、E、G表示当前分区所占比例。
C=B/2825M×100%; E=D/389M×100%;
G=F/588M×100%.
A B(M) C(%) D(M) E(%) F(M) G(%)
9 35.6 1.26% 3.97 1.02% 21.3 3.62%
19 34.7 1.23% 3.87 0.99% 20.1 3.42%
29 33.8 1.20% 3.77 0.97% 19.5 3.32%
39 32.9 1.17% 3.68 0.95% 18.5 3.15%
49 32 1.13% 3.59 0.92% 17.9 3.04%
59 31.2 1.11% 3.5 0.90% 17.3 2.94%
69 30.5 1.08% 3.42 0.88% 16.5 2.81%
79 29.7 1.05% 3.35 0.86% 16 2.72%
89 29 1.03% 3.27 0.84% 15.2 2.59%
99 28.3 1.00% 3.2 0.82% 14.8 2.52%
由表可知,数据呈现正确态势,由于区块中交易个数不等,相对来说,交易序号越少,分区中的交易也相对集中,数据量也越大。
【参考】
[1] 雷志伟 等 基于区块链的健康链系统设计与实现. 《计算机与数字工程》2020年第12期
总结
以上是生活随笔为你收集整理的基于区块链的健康链系统设计与实现(5)区块链性能优化的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 基于区块链的健康链系统设计与实现(4)系
- 下一篇: 基于区块链的健康链系统设计与实现(6)结