ForkBase:结合区块链实现高效存储引擎

摘要:现有的数据存储系统提供了多种的功能,以适应多样化的应用程序。然而,新的应用程序类型已经出现,例如区块链和协作分析,featuring data versioning, fork semantics, tamper-evidence或它们的任意组合。它们为存储系统提供了新的机会,通过将上述需求嵌入到存储中来有效地支持此类应用程序。ForkBase,一个为区块链和分叉应用程序设计的存储引擎。通过将核心应用程序属性集成到存储中,ForkBase不仅提供了高性能,还减少了开发工作。该存储管理多版本数据并支持两种不同的fork语义,从而支持不同的fork工作流。ForkBase速度快,空间效率高,因为它有一个新的索引类,支持高效的查询以及跨数据对象、分支和版本的重复内容的有效检测。我们使用三个应用程序演示了ForkBase的性能:区块链平台、wiki引擎和协作分析应用程序。我们针对各自的最新解决方案进行了广泛的实验评估。结果表明,ForkBase在显著降低开发工作量的同时,取得了较好的性能

关键词:区块链和协作分析;区块链和分叉应用程序设计;for语义;wiki引擎和协作分析应用程序

ForkBase: Implementing an Efficient Storage Engine with Blockchain

Zou Wenzhe

(Nanchang Aviation University)

Abstract: Existing data storage systems provide multiple functions to adapt to diverse applications. However, new application types have emerged, such as blockchain and collaborative analysis, feature data versioning, fork semantics, tapper provision, or any combination of them. They provide new opportunities for storage systems to effectively support such applications by embedding the aforementioned requirements into storage. ForkBase, a storage engine designed for blockchain and forked applications. By integrating core application attributes into storage, ForkBase not only provides high performance but also reduces development work. This storage manages multiple versions of data and supports two different fork semantics, thereby supporting different fork workflows. ForkBase is fast and spatially efficient because it has a new index class that supports efficient queries and effective detection of duplicate content across data objects, branches, and versions. We demonstrated the performance of ForkBase using three applications: blockchain platform, wiki engine, and collaborative analysis application. We conducted extensive experimental evaluations on our respective latest solutions. The results indicate that ForkBase achieves good performance while significantly reducing development workload

Keywords: blockchain and collaborative analysis; Blockchain and fork application program design; For semantics; Wiki engine and collaborative analysis application

区块链是一个不可变的记录链,称为块,可促进交易,有助于跟踪资产并记录数据和文件。所有包含信息的块都用哈希链接在一起。从头开始开发区块链应用程序及其实施需要大量时间和深入研究。开发从寻找和选择最适合您要求的正确区块链协议开始。

创新者正在寻找在金融服务、供应链、政府、医疗保健、零售和许多其他行业实施区块链以转变商业模式的方法。区块链通过提供以下服务为企业增加价值:

  1. 透明度
  2. 可追溯性
  3. 提高速度
  4. 降低成本

随着区块链的实施,交易历史变得更加透明。由于区块链是分布式账本,所有网络成员共享同一个更新的账本。网络中的共识验证账本,这意味着每个人都必须同意它。

更改单个记录将导致修改所有后续记录。因此,保存在区块链上的数据是:

更安全

准确的

透明的

仅对具有访问权限的成员可用

可追溯性

区块链的核心理念:一个分布式数据库,其基本单元为区块,取款用来存储数据,区块之间前后关联,通过时间排序,基于PKI、摘要算法实现集体验证、维护。区块链提供了一个分布式总账,让用户对总账的数据实现共同治理,因而建立互信。

区块链基本逻辑

区块链有两个核心场景:

1、创建新的区块Create:创建的区块与前序区块关联,并按时间排序;

2、填充数据到区块VoteAndSignAndFillData:填充数据到区块需要住民集体共识,并有基于PKI的签名;

区块链分类

区块会因为使用场景的不同,而分组,用来记录不同场景的数据。这些分组也因为面向的用户群不一样而又所区别,有一些区块链面向所有人,所有人的权利一样,这就成了公有链;有一些区块链只面向特定的人群,这就成了私有链;公有链、私有链之间会有协作,相互之间按照特定规则实现数据互信,则成了联盟链。

几种分类

公有链主要以建立基础设施为主,例如比特币基于工作量证明来实现稀缺性,以太坊通过智能合约提供共识机制的基础实现。私有链是真实有价值的领域,可以在一个领域形成共识,例如供应链SRM;当多个私有链所在一个领域且有互通有无的需求时,联盟链就诞生了。

针对多版本数据的重复数据消除

减少存储开销

在数据集版本控制系统中最常用的方法,
Decibel and OrpheusDB, is record-level
delta encoding.
在这种方法中,新版本只存储从前一个版本修改的记录。因此,当连续版本之间的差异很小时,它是非常有效的。但是需要组合多个增量以重构版本的内容。
OrphusDB通过将增量平铺成记录引用的完整列表来优化重构。但是,对于大型表来说,这种方法不能很好地扩展。
Delta encoding增量编码存在的问题是,无论何时修改版本,都会创建新的副本,即使新内容与某些较旧版本的版本或不同版本的版本相同安奇。换言之,对于非连续版本、发散分支或数据集而言,增量编码不是有效的。例如,在像DataHub这样的多用户应用中。

基于块的重复检测和删除

与增量编码不同,此方法应用于独立对象。
file systems , and is a core feature of git. 在这种方法中,文件被划分为称为块的单元,每个单元都被赋予一个唯一的标识符用于检测相同的块。基于块的去重对于很少被修改的大型文件来说是非常有效的。当更新导致更改现有块时,可以使用基于内容的切片,避免昂贵的重切问题,即边界偏移问题。

在本工作中,我们对结构化数据集(如关系表)采用基于块的去重复。我们不像在增量编码中那样对单个记录进行重复数据消除,而是在主索引中的data pages上应用重复数据删除。好处我们不再需要从记录中重建它,并且可以直接访问索引和数据页,以便快速查找和扫描。

DESIGN

SIRI Indexes

Structurally-Invariant Reusable Indexes (SIRI)
数据库中现有的主要索引侧重于提高读写性能。它们不考虑数据页共享,这使得页面级数据无法去重。提出了一类新的索引,结构不变可重用索引(SIRI),它便于不同索引实例之间的页面共享。
定义一个索引结构 I ,具有以下特性

除了以上SIRI的特性之外还包含一下3个特征:

  1. it is a probabilistically balanced search tree;
  2. it is efficient to find differences and to merge two instances;
  3. it is tamper evident.

类似于B+树和Merkle树的组合,定义节点(页)边界为从包含的条目中检测到模式,以避免结构上的差异。具体来说,为了构造一个节点,我们扫描目标条目直到出现预定义的模式,然后创建一个新的节点来保存被扫描的条目。由于叶节点和内部节点的特点不同,我们为它们定义了不同的模式。
类似于B+树,索引节点包含每个子节点的一个条目。每个条目都由一个子节点的标识符id和相应的拆分键key组成。pos-Tree也是Merkle树,因为子节点的标识符是子节点的加密散列值而不是存储器或文件指针。

SYSTEM IMPLEMENTATION

在本节中,我们将介绍ForkBase的实现细节。系统既可以作为嵌入式存储运行,也可以作为分布式服务运行。
下图显示了由四个主要组件组成的ForkBase群集的结构:master, dispatcher, servlet and chunk storage.主服务器、分派程序、服务程序和区块存储。

主服务器维护集群运行时信息,而请求分派程序则接收请求并将请求转发给相应的servlet。每个servlet管理由路由策略确定的密钥空间的不相交子集。servlet还包含三个子模块,用于执行请求:
1.access controller:访问控制器在执行前验证请求权限;
2.branch table : 分支表维护标记和未标记分支的分支头;
3.object manager : 对象管理器处理对象操作,将内部数据表示形式隐藏在主执行逻辑中。
chunk storage 区块存储给数据块提供访问,所有块存储实例都形成一个共享存储池,远程servlet可以访问它。实际上,每个servlet都与本地块存储共存,以支持快速数据访问和持久性。当使用ForkBase作为嵌入式存储时,例如在块链节点中,只实例化一个servlet和一个块存储。

Internal Data Representation

数据对象以数据块的形式存储。原始对象由单个块组成,而块对象则包含多个块。
Chunk and cidchunkForkBase中存储的基本单元,它包含一个字节序列。每个块有唯一标识cid,它是根据块中的字节序列使用加密散列函数计算出来的。
FNode and POS-tree一个FNode被序列化并存储为一个meta chunk uid == cid 存储在索引条目中的子节点id是相应块的cid
Data Types对于原始对象,它的值嵌入meta chunk的数据字段中,以便快速访问。对于块状对象,数据字段包含一个cid,它指向相应POS-Tree的根。按需求访问对应的POS-Tree节点,而不是直接获取整棵树。

Chunk Storage

块存储保存数据块并支持使用cid检索,它公开了一个键值接口,其中密钥是所提交的cid。当请求包含现有块时,存储将检测它并立即返回。

Branch Management

每个键都有一个分支表,用于保存所有分支的。分支表包含两个分别用于标记和未标记分支的结构。
TB-table标记的分支保留在TB-table的映射结构中,其中每个条目由标记和头cid组成。
UB-table未标记的分支保留在UB-table的集合结构中,其中每个条目只是冲突分支的头ID。其中每个条目只是一个冲突分支的头部cid
Conflict Resolution在合并(M7-M9)操作中使用了一种三路合并策略。如果合并失败,则返回冲突列表,要求解决冲突。这可以在应用层处理,合并的结果会返回到存储。另外,简单的冲突可以使用内置的解析函数(such as append, aggregate and choose-one)来解决。在发生冲突时,ForkBase还允许用户挂起定制的解析函数。

Cluster Management

ForkBase作为分布式服务部署时,它使用基于哈希的两层分区,在集群中的节点之间均匀地分配工作负载:
Request dispatcher to servlet调度器接收的请求并划分发送到相应的servlet(划分依据: keys’ hash)。
Servlet to chunk storageservlet中创建的块根据cid进行分区,然后转发到相应的块存储。

个人观点:

比特币-原理

可以把区块链想象成比特币网络的数据库

• 这个数据库以文件形式存放在互联网的各个比特币节点上,每个节点都有一份完整的备份。

• 这个数据库记录着自比特币诞生以来的所有比特币转账交易。

• 这个数据库是一块一块存储的,每一块包含一部分交易记录。

• 当要发起一笔比特币交易的时候只需要把交易信息广播到网络中,矿工把交易信息记录成一个新的区块连接到原来区块链上,交易就完成了。

比特币不能作为货币应用于经济:因为比特币总量只有2100万,螺旋式通缩最后会导致经济逐步停滞

今日,区块链是过去几十年来最激动人心的协议和技术集合。因为区块链使得无需许可的价值贮藏、价值汇聚和价值交易成为可能。

万维网协议使得信息成为可编程的。区块链则准备让所有类型的资产都变为可编程的。去中心化存储是存储技术发展的必然趋势,在大数据时代来临时可以满足人们对于数据存储容量和数据持久性的更高要求。

区块链与分布式存储尽管在有些方面存在联系,但他们代表完全不同的概念和功能。

区块链是一种分布式账本技术,它通过将数据分布在网络中的多个节点上,并使用密码学算法确保数据的安全性和完整性。区块链的核心特点是去中心化和不可篡改性,它可以用于创建可信任的交易记录、数字资产管理以及构建去中心化应用。

分布式存储是一种数据存储技术,它将数据分布在网络中的多个节点上,以提高数据的可靠性和可用性。分布式存储系统将数据划分为多个部分,并将这些部分存储在不同的Q节点上,通过冗余备份和数据复制来保证数据的安全性和可恢复性。

总的趋势还是利用ForkBase(结合区块链实现高效存储引擎),才可以将区块链的潜力全面挖掘。

References:

  1. Hardening Distributed and Encrypted Keyword Search via Blockchain | CYW
    2017 | The IEEE Symposium on Privacy-Aware Computing(PAC) (EI) |Hall T, Beecham S, Bowes D, Gray D, Counsell S. A systematic literature review on fault prediction performance in software engineering. IEEE Trans. on Software Engineering, 2012,38(6):12761304.
  2. Yu SS, Zhou SG, Guan JH. Software engineering data mining: A survey. Journal of Frontiers of Computer Science and Technology, 2012,6(1):131 (in Chinese with English abstract).
  3. A Searchable Symmetric Encryption Scheme using Blockchain | LZHT
    2017 | arXiv |Akiyama F. An example of software system debugging. In: Proc. of the IFIP Congress. 1971. 353359.
  4. Searching an Encrypted Cloud Meets Blockchain-A Decentralized, Reliable and Fair Realization | HCWW
    2018 | IEEE INFOCOMMcCabe TJ. A complexity measure. IEEE Trans. on Software Engineering, 1976,2(4):308320.
  5. Chidamber SR, Kemerer CF. A metrics suite for object oriented design. IEEE Trans. on Software Engineering, 1994,20(6): 476-493.
  6. Blockchain based searchable encryption for electronic health record sharing | CLCC
    2019 | Future Generation Computer Systems (FGCS)Subramanyam R, Krishnan MS. Empirical analysis of CK metrics for object-oriented design complexity: Implications for software defects. IEEE Trans. on Software Engineering, 2003,29(4):297310.
  7. Zhou YM, Xu BW, Leung H. On the ability of complexity metrics to predict fault-prone classes in object-oriented systems. Journal of Systems and Software, 2010,83(4):660-674.
  8. Zhou YM, Leung H, Xu BW. Examining the potentially confounding effect of class size on the associations between object- oriented metrics and change-proneness. IEEE Trans. on Software Engineering, 2009,35(5):607-623.
  9. Zhou YM, Xu BW, Leung H, Chen L. An in-depth study of the potentially confounding effect of class size in fault prediction. ACM Trans. on Software Engineering and Methodology, 2014,23(1):10:1-10:51.
  10. Zhao YY, Yang YB, Lu HM, Zhou YM, Song QB, Xu BW. An empirical analysis of package-modularization metrics: Implications for software fault-proneness. Information and Software Technology, 2015,57:186-203.
  11. Yang YB, Zhou YM, Lu HM, Chen L, Chen ZY, Xu BW, Leung H, Zhang ZY. Are slice-based cohesion metrics actually useful in effort-aware post-release fault-proneness prediction? an empirical study. IEEE Trans. on Software Engineering, 2015,41(4): 331-357.

附中文参考文献:

[1] 《区块链技术指南》 (唐宇飞、冯晓静 编著,清华大学出版社,2016年)

[2] .《区块链:从数字货币到信任机器》(唐骏、王峰、周志华、林伟 编著,人民邮电出版社,2018年)

[3] 《区块链技术原理与应用》(黄浩涛、邓长清、吴钧璋 编著,电子工业出版社,2018年)

[4] 《区块链技术与应用》(李鹏 编著,科学出版社,2017年)

[5] 《区块链技术发展与趋势》 (黄小娜、李立军 编著,机械工业出版社,2018年)

[6] 《区块链技术及其应用》 (杨帆 编著,电子工业出版社,2018年)