
2
Journal of Software 软件学报
区块链系统的去中心化特点使其与传统的分布式数据库在技术,应用等方面有很大不同.传统的分布式数据库往往假定存在
中心节点,且节点不存在恶意行为,因此大部分分布式数据库只需要考虑崩溃性故障.而区块链中节点之间是不可信的,即节点可
能恶意地发送消息或执行计算,因而区块链需考虑拜占庭容错.诸多企业,例如 IBM
[3]
、Oracle
[4]
、SAP
[5]
、华为
[6]
等均建立了自身
的区块链系统.随着区块链技术的推广以及对智能合约的支持,区块链技术也被进一步应用于多个领域,包括物联网
[7, 117]
、医疗健
康
[8-9]
、专利保护
[10]
、政府监管
[11]
、资产管理
[12]
等.与此同时,越来越多的工作对区块链各个方面进行了优化,包括系统模型
[13-14]
、
共识算法
[15-16]
、数据安全
[17-20]
、数据存储
[21]
以及性能评价基准
[22]
等等.
...
PreHash ConsProof
MerkleRoot
PreHash
ConsProof
MerkleRoot
R
TX
1
TX
2
TX
3
TX
4
R
TX
5
TX
6
TX
7
TX
8
区块t
区块t+1
Fig. 1 The structure of the blockchain.
图 1 区块链中的数据结构
从数据管理的角度,区块链是一个在分布式环境下存储大量存在全序关系的数据记录系统.数据以及对数据的操作均存储在
区块内并以区块的粒度进行管理.一个典型的区块结构如图 1 所示,包括前一区块哈希值(PreBkHash)、共识验证字段(ConsProof)
以及区块内事务的哈希值(MerkleRoot).其中节点可利用共识验证字段验证其存储的区块是否满足共识条件并确保网络中少量
节点的恶意行为不会影响区块链的一致性,从而使其支持拜占庭容错.在分布式数据库系统中,由于其假定节点不存在恶意攻击行
为,因此分布式数据库中节点共识只需考虑节点崩溃的情况.典型的共识算法有 Paxos
[23]
、Raft
[24]
等.这类共识算法已经被应用于全
球化的分布式数据库中,并已经取得了很好得性能.而在区块链中,为了支持拜占庭容错,区块链中典型的共识机制包括工作量证
明 PoW
[25]
、实用拜占庭容错 PBFT
[26]
等.关于区块结构以及共识算法将在“区块链的核心构成”部分介绍.
虽然与分布式数据库相比,区块链可以支持在不信任网络环境中的去中心化数据管理,但是区块链系统在数据管理方面仍然
面临着诸多问题.其核心问题包括数据存储、事务处理性能、查询处理优化等方面.例如,现阶段区块链的每秒可执行事务数(TPS)
远小于传统的分布式数据库,也很难满足实际公司级别的交易量需求.最广泛使用的电子货币比特币支持平均每秒 7 笔交易,而
visa 等信用卡公司每秒需执行 4000 笔左右的交易
[27-28]
.具体而言,区块链系统中的数据管理与现有分布式数据库有如下方面的不
同:
数据存储方面:在区块链系统中,数据以区块作为基本存储单位.为了方便数据的存取,以太坊
[2]
等利用 LevelDB 这
一基于 Key-Value 结构的数据库存取数据,而部分区块链则选择利用文件系统或关系型数据库进行存储.与传统的分
布式数据库或其他分布式存储系统相比,由于区块链网络中的节点均存储数据的备份,导致数据的存储在区块链框
架下产生新的挑战.首先,直接将所有数据存储于区块链上将导致区块链上的数据规模极大.在一般情况下,系统中的
节点均需要存储所有历史和新添加的数据,因而导致整个系统的存储开销极大.这将使得部分节点可能由于存储空
间的限制,不能加入到区块链的网络中.其次,由于区块链中存储了大量的历史数据,在这种情况下,一个数据在区块
链中可以存在多个历史版本.现有的诸多操作需要基于数据的不同版本进行,因此数据存储需支持多版本的存储、查
询等操作,且可以在各个版本上进行独立的数据添加更改等操作.
事务执行方面:在区块链中,智能合约的一次执行相当于数据库中的一个事务.在传统的数据库中,事务处理需满足
ACID 特性,包括原子性(atomicity)、一致性(consistency)、隔离性(isolation)与持久性(durability).在区块链
系统中,其事务的处理同样需满足以上特性.为了提高系统的吞吐量,部分区块链的事务处理同样会采用并发机制.但
是,区块链系统的并发控制与分布式数据库的并发控制相比有诸多不同.首先,区块链系统中的事务的提交(Commit)
是以区块为单位,而不是以每个事务为单位.一个区块内将包含多个事务.这将导致针对事务的并发控制需要考虑区
块的提交顺序.当一个事务与其他事务并发执行却没有在同一区块中提交将不会明显提高系统的执行效率.其次,部
分区块链中的事务处理流程与数据库中的事务不同.例如 Hyperledger Fabric 中,事务的处理包含模拟、验证等过程.
当其共 识 协议 达 成之后, 每 个节点 才会 执行区 块内的 事务.第三 ,分布式数 据库 往往基 于 master-slave
[32-33]
或者
评论