物化视图介绍
- 如何维护物化视图仍旧是一个开放问题.在关系数据库中,增量刷新的物化视图维护策略可划分为立即维护和延迟维护两大类.
- 立即维护策略的优点是实现较为简单,在单数据源下不 存在一致性问题;然而该策略将物化视图维护过程嵌入到更新事务之中,延长了更新事务的提交时间,这在高并发的情况下易发生死锁.
- 延迟维护策略解耦合视图维护和更新事务,在 OLTP 场景下,可以通过合并无关更新的方法缩短视图维护时间;但是此策略存在一致性问题,若视图未更新完毕则不可使用.在延迟维护策略的诸多实现方法中,按需维护较为常见,即:等待查询到来之后,只维护与查询相关的物化视图.
将物化视图应用到区块链的可行性分析
-
在关系语义的区块数据,采用关系数据库,普遍使用物化视图的方式来提升查询的性能。在区块链中,系统需要查询某张表的时候需要扫描所有的数据块,当数据量庞大的时候,即使采用扫描索引也会造成巨大的查询开销,因此将物化视图应用到区块链上,可以优化查询的处理效率。
问题与挑战
- 因为区块链和关系数据库系统的存储模型和更新系统不一样,比如,区块链以区块为单位进行更新,单个区块包含多条交易,并且内部的交易需要通过共识来完成。因此,在区块链条建立、维护物化视图将面临以下的挑战
- (1)如何选择物化视图的写入时机.区块链的写入性能受到分布式共识、智能合约执行限制,而物化视图的维护开销对系统的性能带来额外影响.因此,如何合理选择视图维护的时机来降低视图维护对系统 整体性能的影响,是一个需要考虑的问题
- (2)如何以区块为单位维护视图.区块是区块链的基本数据追加单位,各区块包含多种类型的交易,对于 一个区块可能需要同时维护多个视图.因此,设计的方案必须支持批量的物化视图维护,并且使得物 化视图维护的开销尽可能小
- (3)如何确保查询结果的可信性.由于数据上链需要经过较为昂贵的共识过程,为了提升查询效率,物化视图并不保存在区块链上.与此同时,将物化视图保存在本地会面临数据被篡改的风险,需要实施相应措施来确保查询结果可信
本文的成果
- 首次将物化视图运用于区块链,提出了一种视图维护和共识过程并行的方法,降低物化视图的维护开销.
- 区块链的共识过程主要消耗网络带宽,在此期间,CPU 和 I/O 资源消耗相对较少,而视图维护过程却主要消耗 CPU 和 I/O 资源.因此,将视图维护和共识过程并行执行可减少视图维护对写入性能的影响.
- 提出了基于字典树的方法,以区块为单位批量维护视图,并且支持多种维护策略.本文使用字典树作为索引加快查找不同表名的更新记录,可对相同表名的更新记录只进行一次视图维护操作.并且本文支持闲时维护和按需维护的维护策略.
- 提出了基于默克尔树的查询结果验证方法,确保结果可信.为物化视图构造默克 尔树.当查询使用物化视图时,系统扫描物化视图建立默克尔树,并与预先保存的默克尔树根进行比较,以此确保物化视图的正确性与完整性
系统架构
- 本文原型系统架构如图所示,包括应用层、查询层、存储层、共识层和网络层:应用层包括查询 API、访问控制和智能合约;查询层具有查询引擎,负责对查询的解析、优化、执行,包括物化视图的维护;存储层包括区块链和链下数据(物化视图、索引等);共识层负责交易的共识,运用的协议为 PBFT[8];最后,网络层采用 Gossip协议.本文专注于查询层、存储层和共识层:物化视图的更新记录来自于共识返回的结果,查询层负责物化视图的维护工作,并将更新后的物化视图存于存储层.此外,查询的结果来源于存储层的区块数据或物化视图.
- 在此架构下,面向添加了关系语义的联盟链,我们首次提出一种高效的物化视图维护方法以提高查询的效率,并且提出一种验证方法来确保查询结果的正确性.当系统应用层接收到客户端发来的智能合约调用请求时,查询层处理请求,然后调用智能合约产生一条新的交易,交易通过共识后被打包进区块保存在区块链中.另一方面,查询层获取共识成功的交易进行视图维护,视图维护完毕后,将更新后的物化视图存于存储层的磁盘中.而当系统接收到客户端的查询请求时,查询层判断该请求是否可以运用物化视图:若可以,则获取物化视图数据返回给应用层;若不能使用物化视图,则需扫描区块链查找结果.接下来我们将回答 3 个问题:何时进行物化视图的维护、如何进行物化视图的维护以及如何保证物化视图结果的正确性