4.4区块链性能优化

通过更改相关参数和优化,交易性能在单节点的情况下能达到100个TPS以上。比如将生成块的时间由每10分钟改成10秒,将调整难度时间由2周改成80秒,将交易内存池扩大,并扩大交易最大容量大小等等。
在测试性能时,需要提前创建大量未花费的交易,并记录交易哈希值以备使用。创建交易的思路是将某个交易按固定数量生成多个输出,然后循环以上次的交易输出作为新的交易输入得到更多的交易。以1个CoinBase交易为例,其输入为50个btc,将其按数量输出为80份。再对这80个交易输出进行操作,对每个输出作为新的交易输入又得到100个交易输出,以同样的步骤再次划分为100倍。最终得到800000个数量约为6000聪btc的交易输出。如下为示例代码:

void createDivisionTransaction(const COutPoint& outpoint,
const CAmount& amount, int nCount, CMutableTransaction& rawTx){
…
//创建多个交易输出
for (int i = 0; i < nCount; i++) {CAmount nAmount = (amount - 10000) * 1.0f / nCount;
CTxOut out1(nAmount, scriptPubKey);
rawTx.vout.push_back(out1);

系统也对数据的存储优化进行了尝试。在比特币的文件存储系统中,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)区块链性能优化相关推荐

  1. 基于JAVA疫情社区健康评估系统设计与实现 开题报告

      本科生毕业论文 基于Java疫情下社区健康评估系统springboot框架 开题报告 学    院: 专    业: 计算机科学与技术 年    级: 学生姓名: 指导教师:   XXXX大学本科 ...

  2. 区块链相关论文研读3- 关于超级账本Hyperledger Fabric的性能优化

    这是2019年6月发表在顶会Sigmod上面的论文,论文题目为<Blurring the Lines between Blockchains and Database Systems: the ...

  3. 基于区块链的健康链系统设计与实现(4)系统实现

    4 系统实现 4.1 SDK接口 SDK接口主要是基于PHP语言通过libcurl扩展库实现了基于Http的JSON-RPC客户端.[12] 其主要函数代码为: //初始化一个CURL会话 $curl ...

  4. 基于区块链的健康链系统设计与实现(3)系统设计

    3 系统设计 3.1 系统整体设计 系统架构如图5,系统将搭建SDK接口服务器作为微信程序和区块链的通讯中介.微信程序通过Https协议与SDK接口进行数据交互,SDK接口与区块链系统通过JSON-R ...

  5. 基于区块链的健康链系统设计与实现(2)区块链平台Web服务器

    2.2 区块链平台分析 Bitcoin(比特币)作为区块链技术的起源,是目前发展最成熟的开源区块链平台之一,拥有大量的开发人员和活跃的开发社区.Ethereum(以太坊)核心是支持智能合约的EVM(以 ...

  6. 基于区块链的健康链系统设计与实现(1)引言

    摘 要:疫情期间,各大公共场所的人员进出都需要进行测温和信息登记,鉴于人工纸张录入数据的方式效率低下,本系统基于微信小程序开发相关功能,通过扫码的形式实现人员的注册和信息登记,同时基于比特币的区块链技 ...

  7. 区块链应用 | 一篇文章让你搞懂区块链,非标通证应用将首先落地

    近期,区块链领域火热,越来越多的力量正在加入这一市场,就在昨日美图还发布了区块链白皮书. 不过,区块链市场喧嚣,陷入各种炒币的喧嚣.就在日前,CSDN副总裁孟岩以<区块链关键技术>的口述形 ...

  8. 区块链概念股分析 | 远光软件大涨128%,区块链或成关键因素?

    随着高层的发话,区块链概念股一度掀起一波炒作热潮,越来越多的上市公司开始涉足区块链业务.但是区块链概念股鱼龙混杂,面对众多质量参差不齐的股票,大家往往不知道该如何下手. 陀螺财经重磅推出[区块链概念股 ...

  9. 多链跨链、高可用、高安全性的区块链应用如何落地? 金链盟大赛10强揭晓

    为响应 "区块链应以服务实体经济为导向" 号召,助力实体产业的区块链技术应用落地.2018年 8 月 28 日,金链盟中国区块链应用大赛在京启动.本次大赛由金链盟. 深圳市金融科技 ...

最新文章

  1. 解决Latex图片或者表格浮动
  2. 详解SQL Server连接(内连接、外连接、交叉连接)
  3. Swift3字符串转换为其他数据类型
  4. wireshrk中的名词说明
  5. 如何不用 List.clear() 方法 就清空 list 中的 所有元素(中兴面试)
  6. C++(15)--面向对象编程实践-欢乐斗地主(vector的花式输出)
  7. Qt自定义QML模块
  8. 一个 bug ,罚款 200,我真待过这样的公司
  9. 网络是怎样连接的学习笔记1----探索浏览器内部(十分适合理清思路)
  10. esp8266电池供电方案_普通照明、应急照明、事故照明系统的9种设计方案解读,收藏好!...
  11. 十代主板改win7_微星z490主板装win7系统及bios设置教程(支持10代cpu装win7)
  12. python语句分号_Python中的分号
  13. create table
  14. 我最近在看什么——《蛤蟆先生去看心理医生》
  15. 微信小程序 java音乐播放器系统python php
  16. 第七届全球云计算大会-中国站9月宁波举办
  17. 思科Cisco AnyConnect 下载地址(windows、macos、iOS、Android、linux)
  18. dw设计网页Linux,【dw网页设计】- 虎课网
  19. windows远程桌面连接家中电脑
  20. Ubuntu18.04 GoldenDict安装及配置

热门文章

  1. 导入jQuery库时应该注意的问题
  2. log4j2配置文件log4j2.xml详解
  3. 暖通空调系统全面水力平衡解决方案
  4. 数据中心机房布线系统运维和管理
  5. Dataset:Big Mart Sales数据集的简介、下载、案例应用之详细攻略
  6. 成功解决The NVIDIA driver on your system is too old (found version 9010). Please update your GPU driver
  7. 成功解决bash syntax error near unexpected token from
  8. Py之pygame:有趣好玩—利用pygame库实现鱼儿自动实时目标跟踪(附完整代码)
  9. Ubuntu16.04 安装谷歌浏览器并配置常用插件与扩展
  10. BigData预处理(完整步骤)