Page 284 - 《软件学报》2020年第9期
P. 284
张志威 等:区块链的数据管理技术综述 2905
在分布式数据库系统中,由于其假定节点不存在恶意攻击行为,因此分布式数据库中节点共识只需考虑节
点崩溃的情况.典型的共识算法有 Paxos [24] ,Raft [25] 等.这类共识算法已经被应用于全球化的分布式数据库中,并
已经取得了很好的性能.而在区块链中,为了支持拜占庭容错,区块链中典型的共识机制包括工作量证明
PoW [26] 、实用拜占庭容错 PBFT [27] 等.关于区块结构以及共识算法,将在“区块链的核心构成”部分介绍.
虽然与分布式数据库相比,区块链可以支持在不信任网络环境中的去中心化数据管理,但是区块链系统在
数据管理方面仍然面临着诸多问题,其核心问题包括数据存储、事务处理性能、查询处理优化等方面.例如,现
阶段区块链的每秒可执行事务数(TPS)远小于传统的分布式数据库,也很难满足实际公司级别的交易量需求.最
广泛使用的电子货币比特币支持平均每秒 7 笔交易,而 visa 等信用卡公司每秒需执行 4 000 笔左右的交易 [28,29] .
具体而言,区块链系统中的数据管理与现有分布式数据库有如下方面的不同.
• 数据存储方面
[3]
在区块链系统中,数据以区块作为基本存储单位.为了方便数据的存取,以太坊 等利用 LevelDB 这一基于
Key-Value 结构的数据库存取数据,而部分区块链则选择利用文件系统或关系型数据库进行存储.与传统的分布
式数据库或其他分布式存储系统相比,由于区块链网络中的节点均存储数据的备份,导致数据的存储在区块链
框架下产生新的挑战.首先,直接将所有数据存储于区块链上将导致区块链上的数据规模极大.在一般情况下,
系统中的节点均需要存储所有历史和新添加的数据,因而导致整个系统的存储开销极大.这将使得部分节点可
能由于存储空间的限制,不能加入到区块链的网络中.其次,由于区块链中存储了大量的历史数据,在这种情况
下,一个数据在区块链中可以存在多个历史版本.现有的诸多操作需要基于数据的不同版本进行,因此,数据存
储需支持多版本的存储、查询等操作,且可以在各个版本上进行独立的数据添加更改等操作.
• 事务执行方面
在区块链中,智能合约的一次执行相当于数据库中的一个事务.在传统的数据库中,事务处理需满足 ACID
特性,包括原子性(atomicity)、一致性(consistency)、隔离性(isolation)与持久性(durability).在区块链系统中,其事
务的处理同样需满足以上特性.为了提高系统的吞吐量,部分区块链的事务处理同样会采用并发机制.但是,区
块链系统的并发控制与分布式数据库的并发控制相比有诸多不同 [30,31] .首先,区块链系统中的事务的提交
(commit)是以区块为单位,而不是以每个事务为单位.一个区块内将包含多个事务,这将导致针对事务的并发控
制需要考虑区块的提交顺序.当一个事务与其他事务并发执行却没有在同一区块中提交,将不会明显提高系统
的执行效率.其次,部分区块链中的事务处理流程与数据库中的事务不同.例如 Hyperledger Fabric 中,事务的处
理包含模拟、验证等过程.当其共识协议达成之后,每个节点才会执行区块内的事务.第三,分布式数据库往往基
于 master- slave [32,33] 或者 master-master 模式 [34,35] ,其中,master 节点是可信任节点.由于区块链运行在不可信环
境,事务的处理过程需要考虑区块链系统所采用的共识协议影响.以上不同使得分布式数据库的并发控制无法
直接应用于区块链系统.
• 查询处理方面
由于区块链应用于不可信的环境,其查询处理的过程可归类为一般查询处理和可信查询处理.一般查询主
要针对的是溯源查询等.针对可信查询问题,传统的针对查询结果的验证技术需要数据拥有者产生一个利用私
钥生成的签名,后续会利用该签名进行验证.而在区块链系统中,不存在绝对的数据拥有者.网络中的多个节点
(例如工作量证明共识协议下的挖矿者)均有机会添加区块到区块链中.这些有机会添加区块到区块链的节点不
一定是数据本身的拥有者,进而不可能拥有相应的私钥以及签名.其次,传统的数据库签名方法针对不同的查询
产生不同签名,并且均存储在数据库中.而在区块链系统中,由于区块链系统不可篡改的特点,签名一旦写入区
块中就不可以更改.因而,当应对不同的查询时,写入的签名需要满足不同查询的验证条件.最后,基于传统数据
库生成的签名往往基于的是静态数据库.区块链是一个动态,且对数据格式、大小无限制的系统,因而可验证的
签名需满足可验证动态添加的数据的要求.
• 可扩展性方面
为了提高分布式系统的可扩展性,传统的数据库可采用分片机制以提高性能.分片技术会将网络中的节点