我们如何将区块链的功能整合到数据库中?


数据库已经存在了很长时间,虽然从开发人员的角度出现了一些重大变革 - 例如关系数据库的出现和随后的NoSQL反革命 - 数据库操作几乎保持不变。

通常,应用程序会创建数据记录,将其读回,可能会对其进行更新并最终将其删除。此创建 - 读取 - 更新 - 删除循环已被赋予方便的首字母缩写词“CRUD”。CRUD说明了数据库存储的短暂性 - 创建,修改和删除数据。更新销毁旧版本的数据,一旦删除,数据库记录(除非我们完全恢复旧版本的数据库)永远消失。
此外,我们已经非常习惯数据库提供有关交易完整性的有限保证。特权开发人员几乎总是可以覆盖数据记录,甚至可以将记录时间戳设置为他们选择的任何内容。数据库技术中没有固有的方法来保证数据元素没有被覆盖。

区块链数据存储区

区块链支持完全不同的范例。在最初的比特币区块链中,需要防止硬币的双重支出是至关重要的,每个交易的记录永远保存是绝对必要的。

因此,Blockchain提供了一个仅附加的不可变分类帐 - 一个相对简单的数据库,可以在其中添加数据元素,但永远不能删除或修改。比特币的工作证明算法和连续区块链条目之间的加密链接使得篡改变得不可能。

因此,在计算历史中,我们首次拥有一个数据存储区,在该数据存储区中,我们可以绝对确定数据项的创建日期,并且可以绝对确定该项目尚未被修改。那是一场真正的革命!

不幸的是,我们不能将区块链用作通用数据存储 - 与传统数据库相比,它简单,太慢,昂贵且难以处理。例如,比特币区块链每10分钟只生成一个新块,每秒只能处理大约27个事务,如果用作传统数据存储,每千兆字节将花费数百万美元。

如何整合区块链功能

如果我们确实希望将区块链功能集成到现有的数据库应用程序中,我们有两条前进的路线:

  1. 构建集成区块链概念的新数据库技术,但仍可提供经济性能。
  2. 在数据库和现有区块链之间创建集成层。

早期尝试构建基于区块链基础的新数据库系统。不幸的是,它们不是“两全其美”,而是冒着“两全其美”的风险:比现有数据库更难使用和功能更少,并且没有像以太坊和比特币这样的公共区块链提供的强大完整性保证。

目前,我们只能通过集成层获得两全其美的解决方案。

幸运的是,有一些技术模式允许我们维护数据库记录的不可变副本,并将它们锚定到区块链。

记录结构化合并树和Merkle树

首先,我们可以将数据结构化为Log Structured Merge Tree(LSM)。在日志结构化合并树中,所有数据(包括删除和更新)都作为插入处理到树中。删除插入“逻辑删除”记录,记录数据项已被删除。更新使旧记录保持不变,只需插入新版本即可。

我们可以使用的第二个数据结构是Merkle Tree。Merkle树是一种哈希树,其中连续的哈希对本身被散列,直到获得单个根哈希。此哈希可用于验证数千个任意大小的数据元素的完整性。如果我们将此根哈希存储在区块链中,则该根哈希可用于证明单个区块链事务中任意数量的数据库元素的完整性。

因此,如果我们将数据库模式实现为Log Structured Merge Tree,我们可以使用Merkle树将数据库状态锚定到区块链。然后,我们将拥有区块链不变性的所有优势以及我们选择的任何数据库的强大功能。

如果这听起来像很多工作,那你就是对的。但是,不要绝望。在ProvenDB中,我们已经将这个集成层构建到MongoDB中。使用ProvenDB,您可以像往常一样使用MongoDB,但我们正在维护LSM结构,并允许您访问区块链完整性和时间戳证明。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。