APP下载

区块链查询技术优化

2021-05-23李楠

电脑知识与技术 2021年11期
关键词:区块链

李楠

摘要:对区块链上数据查询功能单一且查询效率低等问题,提出一种查询技术的优化方案,该方案对区塊链的Merkle树进行了修改,结合了B+树的结构,不仅能够快速验证(基于M-B+树根hash),还可以利用B+树的结构快速查找特定记录。并将交易的关键信息和对应的区块号等数据存入到关系数据库MySQL中,从而支持关系查询。实验结果表明,基于M-B+树的区块链系统不仅查询速度效率提升而且具有丰富的查询手段。

关键词:区块链;超级账本;关系查询;B+树

中图分类号:TP3        文献标识码:A

文章编号:1009-3044(2021)11-0213-03

1 引言

区块链技术主要是解决在分布式、不可信的场景下进行安全、可靠、不可更改的交易问题。目前研究内容涉及:系统性能分析、安全性能和共识算法研究、技术应用探索等方面,查询技术和底层数据管理研究不多,由于区块链采用链式结构,在查询的业务场景中,查询效率低、方法有限,且时间复杂度高,使区块链技术应用价值被削弱。

在查询领域的研究主要有两大方向:第一种,对结点进行区分,并且对查询的路径进行优化,来提升查询效率,但是这种方法还是在区块链原有的查询方式上进行优化,对原有的区块链查询功能没有提升;第二种,将区块链和现有的数据库连接,借助数据库丰富的查询功能,但是这种方法存在数据库数据安全问题。

第一种方法只是对现有的节点进行优化,在区块链原有的查询方式上进行优化,却没有从区块链本身进行相应的提升改进,对原有的区块链查询功能应用场景和查询手段的改进不大;第二种,将区块链和现有的数据库连接,使用数据库丰富的查询功能,但是存在数据库数据的安全问题,而且会使区块链系统的复杂性变大,使系统的运行效率变低。

为了解决区块链查询效率低,丰富查询功能。本文提出一种新的区块链查询方法:结合B+树和Merkle树的各自特点,建立基于M-B+树的区块存储结构,并将区块号同步到数据库,在进行查询时先在数据库中查找到相应区块号后,然后到对应区块查询数据,因为数据库只保留了区块号,数据都在链上,这样解决了数据库数据被篡改的风险。

2 相关工作

针对区块链查询,目前的研究如下:

贾大宇等[1]在ElasticChain模型基础上,提出一种新的高效查询方法:ElasticQM。该框架主要在数据层建立B-M树的区块链存储结构,提高局部查询效率。

Trent等提出了BigchainDB[2]区块链数据库,具有高吞吐量、低延迟、大容量、丰富的查询功能和去中心化、不可篡改和能够进行数字资产创建、传输的特性。

北京众享比特科技有限公司提出ChainSQL[3]技术,该技术是将数据库的操作记录各个节点共识之后记录到区块链上,如果共识执行失败或不通过,数据库执行回滚操作,这样就实现了兼顾区块链和传统数据库的优点。

余涛等[4]提出FabricSQL方法,该方法将链上的有效交易同步至SQL数据库中,借助数据库管理系统对区块链数据关系查询。

本文所提出一种区块链数据关系查询解决方案,对区块链区块结构修改,结合Merkle树和B+树的特点,建立M-B+区块结构,并设计相关模块结合数据库,实现高效、安全的数据查询。

3 区块链结构设计

3.1 现有的区块链区块结构

在现有的区块链系统中,区块主要包含区块头、区块体两大部分。区块头包含:版本号、时间戳、难度系数、随机数、前区块hash、Merkle树根hash;区块体包含:魔法数、区块大小、交易数量、交易详情大小。如图1所示。

区块结构说明。在区块头中,版本号是用来标记当前区块对应的系统版本,大小为4 byte;时间戳是记录区块创建的时间,大小为4 byte;难度系数是记录区块链工作量证明的难度目标,储存格式为难度系数的hash;随机数是记录区块链工作量的计算参数,大小为4 byte,存储格式为hash;前区块头的hash是当前区块的前一个区块的区块头的hash,大小为32 byte;Merkle树根hash是当前区块打包所有的交易记录都是以Merkle树的方式记录的,记录的是交易树根的hash,当有新的信息存入时,该字段会重新计算更新。

在区块体中,魔法数是客户端解析区块数据时的识别码,大小为4 byte,是不变常量;区块大小为4 byte;交易数量,记录上一个区块创建之后到本区块创建完成之间所有的交易笔数;交易详情,记录所有交易详情,包括收支地址、比特币收支数量、Merkle节点值和数字签名等,采用的数据结构是Merkle树。

区块号,是区块的编号,也称区块高度,从0开始计算,下一个区块的为1,区块号和区块一一对应,可以根据区块号快速查询区块的信息。

3.2 物流信息平台中区块结构设计

1)M-B+树的区块存储结构

Merkle树的结构设计可以保证了数据安全不被篡改,还能快速验证数据的hash是否存在于区块上,查找具体的信息时,根据区块号找到相应的区块,遍历区块查找相应的信息。随着区块链上的数据变多,查询相关数据的效率越来越低。本节提出一种M-B+树的区块存储结构,这种结构不仅结合了现有的Merkle树的特点,又提高了查询效率。

基于B+树和Merkle树的优点,设计了M-B+树的区块存储结构。节点结构如图2。

数据结构如下:

Node{

Node left;

Value value;

Hash hash;

Node right;

}

节点1-5的M-B+树的区块存储结构如下:

2)基于M-B+树的区块链结构

基于M-B+樹的区块结构,利用该结构搭建的区块链,形成一种新的区块链。

如图所示,每一个区块都存储着M-B+树根hash和M-B+树根,树的其余部分放在了区块体中。在验证相关数据是否存在于该区块时只需要验证是否和M-B+树根hash相等就能快速得到结果。

4 区块链查询技术

下面将开始分析传统的区块链查询方法,然后提出一种基于M-B+树结构的区块链查询方法。

4.1 现有的区块链查询方法

在区块链中,除了创世区块,其他区块都记录了前一个区块的hash,形成按时间顺序组成的链。

在查找数据时,从区块号或区块哈希来确定所在的区块,然后找到相应的区块后,在交易信息中找到想要的交易记录。

在交易过程中,查询流程如下:一个SPV节点查询交易地址,节点间的通信链接上建立起bloom过滤器,以Merkleblock消息的形式发送该区块。Merkleblock消息包含区块头和一条连接目标交易与Merkle根的Merkle路径,验证交易的真实性。

4.2 基于M-B+树的区块链结构查询方法

针对区块链查询方面的不足,本节会将基于M-B+树的区块链和关系型数据库MySQL结合,将新生成的区块的区块号、M-B+树哈希、M-B+路径、交易信息同步到关系型数据库MySQL中。

在关系型数据库MySQL中,会将同步过来的区块链的区块号、M-B+树哈希、M-B+路径、交易信息进行判断、同步、提取后,处理成MySQL数据库要求的数据格式存储。

查询方法主要分为三个主要部分:数据处理和同步模块、外部数据库、查询接口。在基于M-B+树的区块链运行过程中,数据判断和提出模块会通过区块链的数据接口,将新生成的区块的区块号、M-B+树哈希、M-B+路径、交易信息同步到关系型数据库MySQL中。

5 实验与分析

本章主要是对基于M-B+树的区块链结构查询方法进行试验并和传统的区块链系统进行比较,并通过试验结果证明方案可行性。

5.1 实验环境

本文采用Hyperledger Fabric开源框架,基于M-B+树的区块结构搭建区块链系统。实验的硬件配置为:Intel Core I5-7300HQ 2.50 GHZ CPU和16GB内存的PC,操作系统为Windows10 专业版。使用VMware Workstation 12.5 建立虚拟机,在虚拟机上模拟实验的真实节点,节点的内存为1GB,硬盘为25GB的Ubuntu16.04系统。数据来自脱敏的电子交易数据集和账户数据集。

图6所示的实验部署图,为了构成P2P网络,首先选择一个普通结点作为初始节点,然后选择一个超级节点和初始节点进行链接。普通节点只同步区块头,超级节点同步整个区块的整体信息。当普通用户获取不在本节点的信息时,可以在超级节点上同步信息,减少普通用户本地存储。

5.2 实验分析

实验1:在两个系统中分别录入相同的原始数据,然后进行一笔交易信息的查询,利用区块链上的查询的接口,控制变量,进行多组对照实验。观察两个系统的查询时间。

查询时间如图所示,由于单个查询时间较短,采用1000笔重复查询实验然后取平均值。图中的横坐标是上链的数据量规模,分别是300M,600M和900M,纵坐标是时间值,通过实验结果可以看出,基于M-B+树的区块链系统的查询时间较传统的区块链系统查询响应时间有着明显的提升。

实验2:在两个系统中分别录入相同的原始数据,然后利用外接数据库MySQL提供的查询接口,根据相同的区块号进行信息查询,取区块号10、100、150、200、250、300进行查询,观察查询时间。

如图所示,利用外接数据库提供的查询接口,利用区块号进行查询实验,通过对实验结果进行分析,外接数据库查询时间相较于传统查询时间缩短。有些数据会缓存在服务器上,所以整体查询时间比直接利用区块链的查询接口要快。

6 结束语

本文研究当前的区块链系统的查询技术,发现查询功能不完善,效率低,对区块链查询方法进行了研究和改善。

传统Fabric区块链系统的查询功能是通过文件系统和Key-value数据库实现的,随着区块链技术的普及和广泛应用在各行各业,系统对存储数据的访问方法支持不足,而且查询功能单一、效率不高。本文针对在物流中区块链查询方面的不足,提出一种解决方案:基于M-B+树的区块链系统,该方案对区块链的Merkle树进行了修改,结合了B+树的结构,能够使区块链系统在进行交易查询时不仅能够快速验证(基于M-B+树根hash),而且可以利用B+树的结构快速查找特定记录。而且基于M-B+树的区块链系统外接了MySQL数据库,将新生成的区块的区块号、M-B+树hash、M-B+路径、交易信息同步到关系型数据库MySQL中。利用MySQL数据库丰富的查询功能,能够快速验证和得到需要查询的信息的区块号,然后到区块链中查找特定信息。

参考文献:

[1] 贾大宇,信俊昌,王之琼,等.存储容量可扩展区块链系统的高效查询模型[J].软件学报,2019,30(9):2655-2670.

[2] McConaghy T, Marques R, Müller A, et al. BigchainDB: a scalable blockchain database[J]. white paper, BigChainDB, 2016.

[3] Beijing PeerSafe Technology Limited Company. White paper for blockchain database application platform [EB/OL]. [2017-01-22]. http://chainsql.net/pdf/chainSql-WhitEpaper.pdf.

[4] 余涛,牛保宁,樊星.FabricSQL:区块链数据的关系查询[J].计算机工程与设计,2020,41(10):2988-2995.

【通联编辑:代影】

猜你喜欢

区块链
基于区块链技术的海上散装液体化学品运输安全监管方法
区块链技术的应用价值分析
“区块链”的苟且、诗和远方
用“区块链”助推中企走出去