Page 289 - 《软件学报》2020年第9期
P. 289
2910 Journal of Software 软件学报 Vol.31, No.9, September 2020
般存在多个不同的分支.与此同时,POS-Tree 利用默克尔树的特性,对每个节点计算其相应的哈希签名.内部节
点的签名由其子节点的签名决定.因此,当一个分支的根节点哈希值没有变化时,则可以确定该节点的所有子节
点所包含的内容均没有更新版本.相应的,当两个 Pos-Tree 中节点的数据不同时,必然导致其祖先节点的签名不
同.因而在查找不同的数据时,只需从签名不同的根节点开始,搜索其子树中带有不同签名的节点即可.在文献
[22]中,Forkbase 被应用于 Hyperledger Fabric,以取代 Hyperledger Fabric 的存储层.
2.2 基于关系型数据的存储模式
在关系型数据中,数据往往以表的形式进行存储.存储于同一表的数据具有相同的模式,而不同表之间的数
据根据主外键等产生关联关系.关系型数据一直以来都被广泛应用于企业的管理等诸多方面.文献[68,69]提出
了 BlockchainDB 这一将数据库的关系模型概念与区块链结合的系统.由于企业间的交易往往希望将部分关系
型数据在二者之间公开并获得共识,BlockchainDB 主要针对共享表类型数据,并在多个用户均需要对共享表进
行操作的情况下,支持对表进行数据验证.该系统采用联盟链的设计方式并假定节点不可信.区块链作为数据的
存储层,保证数据在不可信环境下的一致性.在一个 BlockchainDB 系统内部,节点间存在多个分块.每一块独立
地维护一个区块链并存储共享表的部分数据.每一块独立的区块链保证了分块内数据的一致性.
在每一块的区块链存储层之上,BlockchainDB 构建数据库层.数据库层负责的任务包括:(1) 数据库层记录
表的任一条记录存储在哪一些分块中;(2) 提供用户可直接调用的 API;(3) 保证用户提交的事务处理一致性.当
需要进行读写操作时,用户需提交数据所在分片的 ID.之后,BlockchainDB 会在相应的分片中执行读写操作.由
于采用分块的方式管理数据,当用户获得数据时,需验证所得到的数据是否被恶意篡改及其完整性.作者在文中
提出了 Online 和 Offline 两种验证方法.
• 在 Online 验证方法中,用户在提交读请求并获得相应的数据之后,广播其所读数据并要求所有存储该
数据的节点进行验证.如果大部分节点返回的消息表示所需要验证的请求以及数据符合本地的数据,
则返回认可读取到的数据的消息.当大多数的节点均认可所读数据时,则认为数据已被验证;否则,则判
定读取的数据被恶意篡改;
• 在 Offline 验证方法中,采用延迟验证方式,即:当用户提交验证请求且验证请求达到系统设定的参数 e
时,BlockchainDB 开始进行验证.
3 区块链事务处理
与数据库中对事务处理的要求类似,区块链中的事务同样要求保证其原子性(atomicity)、 一致性
(consistency)、隔离性(isolation)与持久性(durability).原子性要求事务的所有操作或者全部完成,或者全部不完
成,而不会存在中间状态.在区块链中,当一个智能合约对多个区块链进行操作时,同样要求其所有操作全部完
成或全部不完成.隔离性则是针对数据资源的并发访问,规定了各个事务之间相互影响的程度.在区块链中,为
了提高吞吐量,区块链中的并发控制也得到极大的关注 [71] .在本部分,我们将从原子性、隔离性、一致性这 3 个
角度,综述现有工作中区块链的事务处理技术.表 2 总结了部分工作针对事务的 3 个特性所采用的主要技术方
式及其针对的事务处理的阶段与对象.
Table 2 Comparison of the approaches for transaction execution
表 2 针对事务处理的技术比较
事务特性 针对对象 针对的阶段 技术方式 文献
跨链事务 − 特殊节点处理 [72,73]
原子性
智能合约 部署阶段 特殊节点处理 [74]
一般事务 排序阶段 读写冲突图 [75]
一般事务 排序阶段&执行阶段 读写冲突图 [76]
隔离性
智能合约 验证阶段 锁机制 [78]
智能合约 验证阶段 软件事务内存 STM [79]
一致性 一般事务 − 快照隔离 [81]