这篇论文主要分为9部分,其中1 2节介绍BlockchainDB要解决的问题,3 4 5 6四节介绍了BlockchainDB的架构和技术细节,7节对其性能进行评估,最后总结展望。
这篇文章很长,可以直接到最后查看结论~
问题及挑战
区块链技术的兴起催生了很多新的应用场景,一个非常重要的场景是:互不信任的多方实现数据共享读写
,比如供应链上的货物追踪。但是,原生区块链存在如下缺陷:
1.区块链的性能和扩展性存差:区块链的事务处理能力在10-100 tx/s2.缺少易于使用的抽象层:区块链没有提供像数据库那样简单方便的查询接口、一致性等功能
上面两个主要缺陷极大阻碍了区块链在数据共享读写
场景的使用和推广。为了解决上面的问题,这篇论文基于区块链开发了BlockchainDB,它主要有以下优势:
1.把区块链作为存储层(Storage Layer),不需要修改底层区块链代码,同时充分利用其去中心化、tamper-proof log等原生技术优势2.提供易用的查询接口和一致性保证3.提高区块链的性能、降低使用复杂度
具体实现
架构
上图是BlockchainDB的架构图,自下而上分为存储层和数据库层,数据存储在底层区块链上,通过Client提供简单易用的put/get/verify接口。
peer指区块链里面的多个节点,常用于区块链场景,类比分布式数据库中的node。分为fully peer和thin peer,前者存储数据、资源要求高,后者不存储数据,资源要求低。
需要注意的是,每个party在加入BlockchainDB网络时需要进行认证并且做到彼此知晓,认证通过后才能加入。
约定
为了方便后续讨论,这里做如下约定:
1.加入BlockchainDB网络的peer需要认证,认证通过后才能加入2.peer可以代表本地所有的client进行验证操作3.peer信任本地读写的数据4.通过大多数进行认证,如果大多数peer上的数据是可信的,那么数据是可信的
基于上述约定,在进行验证时,主要验证下面两个方面:
1.put操作是否被恶意丢弃2.get得到的数据真假
Database Layer
数据库层为用户提供client,封装了put/get/verify接口:
•get(t, k) --> v,返回表t对应主键k的值•put(t, k, v) --> void 所有数据被编码到v中,作为文档插入表t中,主键为k•verify() --> bool 该方法用于在线验证,put/get后调用verify()
•put:插入操作(事务)是否commit•get:返回的结果是否正确、真实
如图3所示:client读写请求先到off-chain verifer,然后放到请求队列中。由事务管理(Tx Mgr)和分片管理(Shard Mgr)处理后转发到对应的底层区块链上,最后返回结果。
需要注意,Backend Connector用于连接底层不同的区块链。
一致性
针对目前提供的功能,论文介绍了get
和put
的一致性保证,put操作的事