基于区块链的健康链系统设计与实现(5)区块链性能优化
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)区块链性能优化相关推荐
- 基于JAVA疫情社区健康评估系统设计与实现 开题报告
本科生毕业论文 基于Java疫情下社区健康评估系统springboot框架 开题报告 学 院: 专 业: 计算机科学与技术 年 级: 学生姓名: 指导教师: XXXX大学本科 ...
- 区块链相关论文研读3- 关于超级账本Hyperledger Fabric的性能优化
这是2019年6月发表在顶会Sigmod上面的论文,论文题目为<Blurring the Lines between Blockchains and Database Systems: the ...
- 基于区块链的健康链系统设计与实现(4)系统实现
4 系统实现 4.1 SDK接口 SDK接口主要是基于PHP语言通过libcurl扩展库实现了基于Http的JSON-RPC客户端.[12] 其主要函数代码为: //初始化一个CURL会话 $curl ...
- 基于区块链的健康链系统设计与实现(3)系统设计
3 系统设计 3.1 系统整体设计 系统架构如图5,系统将搭建SDK接口服务器作为微信程序和区块链的通讯中介.微信程序通过Https协议与SDK接口进行数据交互,SDK接口与区块链系统通过JSON-R ...
- 基于区块链的健康链系统设计与实现(2)区块链平台Web服务器
2.2 区块链平台分析 Bitcoin(比特币)作为区块链技术的起源,是目前发展最成熟的开源区块链平台之一,拥有大量的开发人员和活跃的开发社区.Ethereum(以太坊)核心是支持智能合约的EVM(以 ...
- 基于区块链的健康链系统设计与实现(1)引言
摘 要:疫情期间,各大公共场所的人员进出都需要进行测温和信息登记,鉴于人工纸张录入数据的方式效率低下,本系统基于微信小程序开发相关功能,通过扫码的形式实现人员的注册和信息登记,同时基于比特币的区块链技 ...
- 区块链应用 | 一篇文章让你搞懂区块链,非标通证应用将首先落地
近期,区块链领域火热,越来越多的力量正在加入这一市场,就在昨日美图还发布了区块链白皮书. 不过,区块链市场喧嚣,陷入各种炒币的喧嚣.就在日前,CSDN副总裁孟岩以<区块链关键技术>的口述形 ...
- 区块链概念股分析 | 远光软件大涨128%,区块链或成关键因素?
随着高层的发话,区块链概念股一度掀起一波炒作热潮,越来越多的上市公司开始涉足区块链业务.但是区块链概念股鱼龙混杂,面对众多质量参差不齐的股票,大家往往不知道该如何下手. 陀螺财经重磅推出[区块链概念股 ...
- 多链跨链、高可用、高安全性的区块链应用如何落地? 金链盟大赛10强揭晓
为响应 "区块链应以服务实体经济为导向" 号召,助力实体产业的区块链技术应用落地.2018年 8 月 28 日,金链盟中国区块链应用大赛在京启动.本次大赛由金链盟. 深圳市金融科技 ...
最新文章
- 解决Latex图片或者表格浮动
- 详解SQL Server连接(内连接、外连接、交叉连接)
- Swift3字符串转换为其他数据类型
- wireshrk中的名词说明
- 如何不用 List.clear() 方法 就清空 list 中的 所有元素(中兴面试)
- C++(15)--面向对象编程实践-欢乐斗地主(vector的花式输出)
- Qt自定义QML模块
- 一个 bug ,罚款 200,我真待过这样的公司
- 网络是怎样连接的学习笔记1----探索浏览器内部(十分适合理清思路)
- esp8266电池供电方案_普通照明、应急照明、事故照明系统的9种设计方案解读,收藏好!...
- 十代主板改win7_微星z490主板装win7系统及bios设置教程(支持10代cpu装win7)
- python语句分号_Python中的分号
- create table
- 我最近在看什么——《蛤蟆先生去看心理医生》
- 微信小程序 java音乐播放器系统python php
- 第七届全球云计算大会-中国站9月宁波举办
- 思科Cisco AnyConnect 下载地址(windows、macos、iOS、Android、linux)
- dw设计网页Linux,【dw网页设计】- 虎课网
- windows远程桌面连接家中电脑
- Ubuntu18.04 GoldenDict安装及配置
热门文章
- 导入jQuery库时应该注意的问题
- log4j2配置文件log4j2.xml详解
- 暖通空调系统全面水力平衡解决方案
- 数据中心机房布线系统运维和管理
- Dataset:Big Mart Sales数据集的简介、下载、案例应用之详细攻略
- 成功解决The NVIDIA driver on your system is too old (found version 9010). Please update your GPU driver
- 成功解决bash syntax error near unexpected token from
- Py之pygame:有趣好玩—利用pygame库实现鱼儿自动实时目标跟踪(附完整代码)
- Ubuntu16.04 安装谷歌浏览器并配置常用插件与扩展
- BigData预处理(完整步骤)