区块链与分布式数据库的比较


随着限制一些数据库开始支持版本控制和校验,而区块链开始能存储更多类型数据,数据库和区块链这两种技术是否正在相互融合?
这是来自thenewstack的一篇文章,文试图调解这两者之间的对立矛盾,从相互学习角度比较它们,但是通过仔细比较以后,你会发现,区块链和数据库虽然都是数据存储,真的是两种完全不同思维世界下的存储,数据库只是IT边界内一个解决方案,而区块链是从业务产品的战略高度解决问题的大道至简技术,区块链和数据库的区别仅仅在于一个假设前提的错误:数据库提供者将自己假设在IT技术边界内,对业务上下文根本不关心,试图提出一套解决方案适合所有或大部分上下文场景,这是典型的心理上认知谬论:舍基原则
 
数据库和区块链相似的地方:
假设我们在区块链的定义中包括物化的世界状态:

  • 这两种技术都支持读写数据值。
  • 两者都提供了某种风味的 "交易、事务 "和排序;可能通过一点工作,应用程序可以安排一个更新在另一个之前或之后发生,并且可以知道一个更新何时完成。
  • 两者都是持久耐用的存储:数据库被设计成可以在机器崩溃后不丢失数据,如果你在可用性相关的位置有足够的节点机器;区块链甚至可以在任何单独副本的永久移除或丢失中幸存下来。

 
区块链的能力
区块链有一些通常在普通数据库中找不到的属性:
  1. 在用户可见的能力中包含一个账本,这意味着它们可以支持版本(访问历史信息)和脉络、轨迹或旅程(你可以确定数据何时被改变,以及由谁改变)。
  2. 区块链通常还提供某种味道的不变性和 "防篡改":有可能知道以前存在的任何东西是否已经消失或被破坏。

一些数据库提供自动备份,但这与完整的历史或完整性验证不完全一样。
公共区块链通常也有一个终端用户身份的全局概念,直接连接到交易事务模型和语义中,而这不是数据库的传统特征,可能除了一些内置的日志支持外。

区块链有另一个决定性的特征:去中心化。
传统的数据库,即使是基于云的现代化身,也被设计成由单一实体拥有、保障和管理。
事实上,你可以说,将数据的控制权隔离给其所有者是现代云数据库的一个决定性特征,其中数据安全、隔离和治理被认为是关键的设计原则。

相比之下,区块链是去中心化的账本:不是分布在云供应商数据中心的机器之间,以保证耐用性,而是分布在多方。
这些多个当事方可能是商业关系,但他们通常不 是彼此"信任 "的IT:

  • 他们每个人通常都有自己的数据副本
  • 他们各有自己的硬件和软件系统,
  • 他们各自有自己的安全团队和协议,等等。

随着去中心化的到来,我们倾向于将各种能力与区块链联系起来:
一致的、不可改变的、完全有序的、不可抵赖的数据复制,可以跨越公司、云、地区、账户和技术堆栈。
用更简单的话说。一个单一的真相来源,在所有各方之间自动维护,无论他们居住在哪里。
这是一个令人难以置信的强大机制,通常不会出现在你的典型数据库供应商的功能列表中。
 
数据库的能力
数据库也有一套大多数区块链所不具备的能力。
为了保持我们的比较在某种程度上是对等的,我们在这里将 "数据库 "的定义限制在广泛采用的云托管SQL和NoSQL数据库,如谷歌Spanner、Azure CosmosDB、AWS的Amazon Aurora和Amazon DynamoDB。 这些服务有一些特点,是它们在构建可扩展的企业级应用时的基础,这些应用可以在关键任务的商业应用中存储和操作实时数据。

  • 查询语言(包括连接和事务):

数据库和区块链之间最明显的区别之一是,数据库中的数据可以以强大的方式进行原子分组和访问;
最常见的是使用SQL。
"连接Join"是数据库本身搜索和分组它所持有的数据的能力,这是区块链上不容易获得的强大功能,在区块链上,每个单独的项目通常必须被孤立地检索,然后在应用逻辑中处理,以执行相当于连接、联合、嵌套查询或任何其他非琐碎的访问模式。
同样,ACID(原子性、一致性、隔离性、持久性)事务,允许用户在应用层面将更新的内容原子化地组合在一起,这在区块链中不一定适用,但在现代云数据库中是必然的。
  • 高度可用

虽然区块链创造了 "链级 "的持久存储,如果有许多区域和云隔离的各方使用它,每个单独的节点通常运行在一台机器上,因此对服务器故障没有弹性:一个服务器的崩溃会导致该节点100%的中断。
相比之下,像DynamoDB或CosmosDB这样的服务中的表对单个机器甚至是区域性的故障具有高度的弹性。
因此,数据库与区块链的区别在于提供99.99%或更高的可用性,而其所有者不需要付出任何努力或部署复杂性。

(banq注:从数据库思路看如此,但是跳出这个思路局限看,区块链本身的账本复制就是保持高可用,任何一个服务器完全崩溃都一点关系没有,去除了中心化的概念,就像众多神经细胞中一个死了,不会影响整个神经网络计算的准确性和可用性)

  • 高吞吐量和低延时

像以太坊这样依靠工作证明的公共链可能需要很多分钟才能达到 "最终性"(即数据在未来的所有时间里都是有效的不可改变的,没有机会被改变)。即使是私有的、经过许可的区块链,如Hyperledger Fabric,也需要几秒钟才能达到最终状态。以太坊的吞吐量约为每秒15个交易(TPS),适用于所有用户的总量。Hyperledger Fabric的吞吐量取决于其部署细节,但很难在没有错误的情况下实现优于每秒几百笔交易的持续性能。
相比之下,亚马逊的DynamoDB可以实现8900万TPS,延迟为个位数毫秒,而这只是他们数百万客户中的一个,总的总容量,虽然AWS没有公布,但无疑要高得多。
 
(banq注:数据库的优点也是屁股坐在数据库边界内做出的心理安慰判断,区块链不是只有一个账本,而是可以大账本里嵌套小账本,这种树形结构扩展就无限了,不是所有底层的交易都要同步到高层上,可以通过汇总Rollup等技术同步到公共链,将区块链看成一个账本,还是出于单个中心化思路,区块链是一个名词,一个事物,但不代表它只是一个账本,这在传统领域理所当然的假设在去中心化挑战中就不存在,亚马逊是一个事物,一个公司,一套系统,大家同时在这个系统交易可实现8900万TPS,但是如果你将区块链的树形结构中大小分层交易数加起来,比这个数字多得多。
因为区块链是业务商业和技术自然融合的,而亚马逊平台只是局限在IT技术这个边界范围内,它把所有交易都看成一种事务,都是相同的,不用去区分很多交易不需要共享使用一套技术底层,而区块链自然将业务和IT技术结合,区块链A边界内的交易只在这个边界内建立和复制账本即可,不需要复制到区块链B边界中,只有两者需要交易时,才会提高到更高一层交易复制)
  • 每笔交易成本低

由于基于云的高度多租户的实施,像我们在这里讨论的数据库在每笔交易的基础上是非常经济的。在2022年1月,最低的以太坊单笔交易日均成本为25.83美元(最高的大约是这个数字的两倍),而在us-east-1地区按需写入亚马逊DynamoDB的数据库成本为0.00000125美元,这使得以太坊比传统数据库的成本至少高出20,664,000倍。
SaaS/Zero ops/Built-in scaling。在Coinbase这样的公司以生产规模部署区块链,需要生产级的区块链基础设施,需要一个庞大的、知识渊博的团队,需要非同小可的基础设施支出来手动管理区块链存储并通过备份创建本地化的冗余,还需要对基础设施和运行在上面的区块链软件进行复杂的、持续的监控。
相比之下,像谷歌Spanner或Azure CosmosDB这样的数据库是 "免提 "的--开发者从未见过底层服务器、操作系统、数据库软件部署、机器级的扩展操作等。因此,无论一个数据库表变得多大,底层存储都会自动扩展。对于一个没有高级工程师的公司来说(或支付他们的大笔费用),这是所有权成本的巨大差异--特别是当加上数据库与区块链的每笔交易成本较低,以及需要将区块链部署扩展到24x7x365的峰值容量。
(banq注:交易成本制约新技术的主要因素,只有成熟技术更便宜,新技术不便宜,这是基本市场经济概念)
 
两者能融合吗? 
显然,区块链和数据库从足够不同的源头出现,无论是在用例要求还是实施技术方面,目前看起来都相当不同。但这些差异注定会继续存在吗?让我们看看一些可能预测未来状态的有趣趋势线。

虽然还没有拥抱多方去中心化,但云数据库正在获得一些能力,使其向区块链式的能力迈进了一步。

  • 谷歌Spanner让一个所有者(账户)拥有一个跨越多个地理区域的表,每个区域都可以进行更新,让所有其他区域看到。
  • Snowflake允许一个云上的表所有者与不同云上的另一个公司的读者分享该表。
  • 亚马逊QLDB和甲骨文区块链表支持ledgering--一种不可改变的、有序的更新日志,可以帮助建立一个变化的脉络,并提供版本查询,可以检索过去存在的数据,而不仅仅是现在。

同样地,区块链也开始具有数据库的一些特征:
  • 像Infura和Alchemy这样的公司现在提供 "区块链即服务",试图创造更高的可用性,完全管理("无服务器")的解决方案,更像传统的云服务,而不像单独的自我部署、容易出错的区块链节点。(当然,纯粹主义者可能会抱怨说,由一个中心化的机构提供区块链能力,会破坏其一些去中心化的性质)。
  • 像IPFS这样的协议正试图扩大区块链所支持的狭窄的数据类型范围,包括作为一个 "网络文件系统 "运行,也可以将大型、非结构化或半结构化的数据视为 "链上"。
  • 众多研究人员、从业人员和企业正在研究如何通过批处理和其他所谓的 "L2"(第二层)解决方案来模拟更低的交易成本。作为一个具体的例子,Coinbase通过将许多用户的购买行为批量化为一个单一的复合交易,解决了以太坊等区块链的吞吐量限制和高额的每笔交易成本。

有许多方法可以将众所周知的区块链账本格式,如以太坊,转换为更传统的数据库;有效地使SQL等查询语言可以在其中使用,尽管以太坊的基本协议不直接支持这种功能。
像Vendia这样的公司(作者是其联合创始人兼首席执行官)正在发挥积极的研究作用,将经典的数据库功能,如避免脏读和ACID交易,与区块链和分布式账本技术相结合。

简而言之,我们将看到数据库和区块链技术继续向彼此发展。在区块链方面,原因是显而易见的:数据库功能集和企业对这些用例的操作和成本期望已经出现了几十年,有充分的理由,而且这些理由不会消失。商业区块链解决方案将不得不满足这些商业期望,否则就会死掉。

数据库采用区块链功能的压力要更微妙一些。这其中有一点是健康的竞争:

  • 哪个客户不希望能够通过旧版本的数据进行时间旅行,知道他们的数据是防篡改的,或者通过将世系直接整合到数据模型本身来消除应用日志的开销?
  • 金融和其他法规要求比以往任何时候都更仔细地跟踪任何涉及金钱或信用的东西,包括能够审计什么被改变,什么时候,以及由谁改变。
  • 政府机构越来越注重公平性和透明度,他们不可能对那些容易 "忘记 "旧数据副本或不能轻易与审计人员、其他机构或消费者共享的数据存储解决方案感到满意。

 
banq注:事件溯源+数据库 = 区块链,这是我一直坚持的观点,上述三点需求可以使用EventSourcing实现,但是事件溯源是将事件账本保存在一家组织或平台内,依靠一个中心的权威或自觉维护其数据完整性,而区块链是将事件账本公开复制到多家组织或平台,以信息公开化客观上保证数据完整性不变性。这两者是完全不同的思路。