Page 293 - 《软件学报》2020年第9期
P. 293

2914                                 Journal of Software  软件学报 Vol.31, No.9,  September 2020

         照隔离方法,在多个事务均对一个数据进行写操作时,一个事务需等待之前所有的事务写操作均完成之后方可
         开始执行,这将导致系统性能大幅下降.因而作者提出:在事务执行阶段不考虑事务所处的区块,而是直接对事
         务进行排序.与此同时,对数据的写操作会产生多个副本.当事务完成时,按照事务在区块链中的顺序确认所产
         生的多个副本中的一个为合法的副本.
             (2)  先执行后排序的并发控制方式.在该种方式下,同样利用快照隔离来进行事务的并发处理.但是该方式
         需要处理 3 个问题:首先,先执行再排序要避免幻读的可能,即读入还未写入的数据;其次,要避免脏读的可能,即
         读入已被更新的数据;最后,网络中不同的节点由于延迟等原因,数据可能未达成一致,进而可能使得事务所需
         访问的数据不存在.为了处理这些问题,作者提出了基于区块高度的快照隔离.具体而言,每一个数据库节点都
         按照区块链的内容来存储数据.每一个节点记录相应的已写入的区块链的个数.区块链的个数可区分现有区块
         链的快照.当一个节点 A 的区块的个数多于另一节点 B 时,则 A 节点的数据已更新,而 B 的数据还未更新.作者设
         计了基于区块链高度的并发快照隔离方法,确保所有的节点均可在事务完成后,保证数据的一致性.
             文献[68,69]提出了 BlockchainDB,一个将数据库与区块链相结合的系统,并设计了多种一致性水平,以提高
         事务写的效率.在这种情况下,当用户提交查询时,数据库层的 TransactionManager 负责分发提交的查询并确保
         不同的一致性.具体而言,BlockchainDB 有两种一致性水平可供选择.第 1 种为串行一致性.在串行一致性中,所
         有的写操作按照提交的顺序插入队列中.当多个写操作同时对一个数据进行写操作时,只有队列中的第 1 个写
         操作可以被执行.其他的写操作均处于等待状态,直到写操作完成.第 2 种为最终一致性.在最终一致性中,写操
         作依然按照顺序插入到队列中,但是所有的读操作可以马上执行.在这种情况下,脏读的情况可能会发生,即数
         据在被读入之后,被其他的写操作覆盖,因而之前所读的数据与存储的数据不一致.当用户提交查询时,由分片
         管理器确认查询所需的数据处于区块链中的位置.之后,该位置的数据会被并行地读写.由于 BlockchainDB 支持
         不同的一致性,查询的效率在不同的一致性下将会不同.例如,在串行一致性下,BlockchainDB 的查询可能需要
         等待队列中写操作的完成之后才可进行.

         4    区块链查询处理

             在区块链中,所有数据均以链表的形式存储.与一般数据库的查询不同,区块链存储的数据包含在所有事务
         当中.区块链查询分为一般查询与可信查询.表 3 从对关系型查询语句的支持、可信性查询以及链上链下数据
         查询等多方面比较了最新的研究工作.
                              Table 3    Comparison of the query processing in blockchains
                                          表 3   区块链查询处理比较
                              区块链          关系型语义    支持可信性查询       支持链上链下数据查询
                             Chainsql [86]    强          弱               ×
                            BigchainDB [87]    弱         弱               ×
                             SEBDB [88]       强          强               √
                              [1]
                                       [2]
                         Bitcoin  & Ethereum    弱        弱               ×
                              vCahin [84]     弱          强               √

         4.1   一般查询处理
             LineageChain [84] 研究区块链环境下数据溯源查询的效率问题,并支持需要数据溯源的智能合约.
             LineageChain 针对每个数据,赋予其初始版本号.当一个事务对数据进行读写操作时,事务的输出可能是新
         的数据或者更新现有数据的版本.这钟情况下,如果一个区块内还有不同事务时,则可以视作一个区块的事务对
         前一区块数据库状态进行的修改.因此,数据版本号与区块同步递增.LineageChain 将这种递增关系建模成为一
         个无环图.当需要溯源查询时,利用无环图中点的拓扑序进行搜索.
             与文献[84]需额外构建图结构不同,文献[85]研究利用智能合约确定数据的关系,并对数据进行溯源查询.
         当一个数据的创建者创建一个文档时,创建者可在区块链中部署一个智能合约.该合约的功能包括更改数据拥
   288   289   290   291   292   293   294   295   296   297   298