以数据库思维理解区块链

作为一个数据库行业的老兵,我看到在区块链技术的热潮下,传统的IT技术同学们保持了十分理性,甚至是排斥的态度。其实不管是热捧还是排斥,两极观点之下,我认为我们应该从IT人比较能够理解的角度探讨一下区块链技术。因为区块链这个东西的本质和数据库技术非常相像,很多机制使用数据库的理念去理解会非常直观准确。

对于区块链和传统数据技术,我认为区块链技术的未来发展,主题是“融合”。我们就从数据库这个角度来解读区块链技术体系中各个技术点,以及通过“去中心化数据库”这个概念,把区块链与数据库技术做一个比较好的整合。

一、区块链技术现状

当前的区块链世界有人号称1.0、2.0、甚至已经到了3.0时代,但是从一个产品或技术打磨的角度来看,我认为当前的区块链也就相当于数据库的80年代,处于百花争鸣各种思想层出不穷的时代。

对技术人来说,这是最好的时代,各种新鲜的想法和思路大量爆发,在沉闷的技术领域带来新鲜的突破;同时这也是最坏的时代,没有任何产品或方向肯定是未来的主流,任何新鲜的思路也许在几个月以后就被证明不可行。

所以,我们要正确认知当前区块链技术的变革和发展,那我们来对比当年数据库所走过的道路,看看未来区块链世界会怎样发展。

1、技术演进路程

首先我认为,区块链一定会从当前的专有化向通用化演进。现在基本所有做公链的产品都是针对某一个特定的场景来实现与优化,但是我认为未来一定不会是一个应用一条链,而是有一种通用的开发范式。就好像传统数据库一样,不管大家开发什么样的应用程序,都可以使用这么若干有限的几个通用性产品就能够满足大部分业务场景了。

第二,向标准化演进。对于区块链技术,现在每个链基本都有自己的开发范式,甚至很多公链还模仿以太坊尝试自己做一个编程语言出来,这实际上是一种行业处于原始时期的标志。怎样判断一个行业开始走向成熟?就是业务模式基本固定、开发方式基本固定,这样就能够对大量的程序人员进行推广了。

第三,产品化和模块化不断加强。当前不管是以太坊、比特币还是很多其它新的公链,大部分的体系结构都是非常紧耦合的。对比起我们在大数据领域的Hadoop,基本每个模块都可以作为独立插件进行可配置可定制的插拔。所以我认为,随着区块链技术的不断成熟和稳定,未来一定会出现一款成熟产品,能够通过可插拔配置与插件的方式满足多种共识算法、安全机制等。

最后,性能与可扩展性的提升。实际上这也是数据库所走过的路,当前区块链世界想在短短的时间之内通过侧链、分片等机制跨过当年数据库几十年来的变革。

接下来我会介绍,从数据库的角度看待区块链其最大的性能与扩展能力制约瓶颈在什么地方,以及应当如何优化。

2、发展现状

那我们回过头看看当前区块链行业的现状。

抛开区块链上层的一些应用与金融领域的创新,单独从技术角度来看,我一直认为其最大的革新在于对等数据存储机制的建立。

在数据库这个行业里,大家一直遵从着主-从架构,而完全“多活”的系统从几十年前的提出一直以来都是传说中的事情,从来没有任何产品真正做到多活。

而当我们以创新的多活数据库来看待当前区块链技术时,就会发现三个急需改进的问题:

  • 首先,区块链的体系结构现在非常混乱,大家还没有向传统数据库一样将其分类为事务、存储过程、鉴权、主从同步等模块,大部分人对区块链的认知还是停留在神秘的黑盒子阶段。
  • 第二,区块链的开发语言完全不成体系。数据库在经过开始的“战国时代”后,渐渐使用SQL做到了业界的大一统。而区块链当前明显还处于“战国时代”,还没有一个统一的标准开发和使用标准。
  • 第三,需求的多种多样,有些需求或白皮书的业务介绍是靠谱的,有些则是完全异想天开不知所云。实际上这个和区块链所带来全新的业务模式相关,很多人还在探索新的业务模型,从而导致需求没有形成标准范式。

二、区块链vs数据库技术:相同点

从数据库的角度对比,区块链技术即去中心化多活数据库技术,两者之间没有本质区别。

这里我列举了一些区块链里面比较重要的技术点,以及这些技术点在数据库领域中是以什么形式存在的。这些概念和数据库中的技术概念一一对应关系如下:

共识机制

一致性控制——共识机制

分布式数据库中叫做一致性控制,包括传统的主从复制、新一代的Raft、Paxos等算法。在区块链中为了解决额外的拜占庭问题,将算法改进为PBFT、PoW、PoS等协议。

存储机制

数据库日志——账本

区块链结构基本等价于数据库的事务日志,其主要新增的内容包括Merkle Tree结构用于快速验证数据的正确性,但是其本质与数据库的交易日志等价。同时数据库在日志中更会包括事务控制等企业级能力,是区块链数据结构所不具备的。

智能合约

智能合约——存储过程

智能合约与数据库存储过程一样,都是一段托管代码。本质上智能合约与数据库存储过程没有什么区别,都是通过外部调用或虚拟机执行一段代码,并可以将托管代码共享给其他用户进行调用。

分片

数据库分片机制早在MPP数据库时代就已经存在。通过将大量数据切分在不同分片中,达到限制每个分片数据总量,并提升总吞吐量和存储空间的目的。

应用开发接口

当前区块链还处于类似数据库当时的早期时代,接口没有统一标准化。根据区块链项目不同,其接口可以按照数据库、对象存储、API调用、甚至PaaS平台标准进行定义。

安全

区块链的安全机制与数据库安全机制具有相似之处。数据库安全一般分为鉴权与授权两个模块,分别代表用户登录以及访问权限。而区块链当前仅支持记录级写授权,但是对于读操作时完全共享的。因此,从安全策略上数据库比当前的区块链完善很多。

三、区块链vs数据库技术:不同点

数据库与区块链功能架构图

1、功能架构

黄色部分是区块链和数据库架构都拥有的功能。白色的部分是目前数据库独有的功能。

我们在上文也有提及数据库的SQL能力是实现其通用性的重要部分,SQL对于之后区块链的开发模式固定下来很重要。

索引管理这块,在数据库中主要是提升数据管理和数据查询的性能效率的,当具体的应用场景出现,性能将成为下一阶段需要提升的重要部分。因此,存储的数据的索引就成为很重要的组成了。

2、机制

在机制上,区块链和数据库的主要区别有如以下几点:

  • 一致性

区块链的设计思想,与传统数据库设计思想最大的不同就在于多活,也就是去中心化这个体系下所带来的一致性模型的区别。

传统的关系型数据库遵循ACID强一致模型,写入的记录立刻可以读到。而一些新型分布式数据库采用最终一致性,也就是BASE模型,写入的数据暂时不一定读到,但是最终一定会存在。

但是,区块链或者说去中心化数据库的设计思路就存在明显区别,也就是说任何操作不存在“永久确认”这个概念。即使类似比特币,从核心原理上来看6个块之前的内容也只是“基本不会被回退”。

举个极端的例子,如果中美之间广域网出于什么原因突然断了三天,之后恢复的话比特币一定会出现大规模分叉,这个期间如果有账号同时在中美进行大额消费的话,想要恢复一个主链则一定需要牺牲很大一部分人的交易才能实现回退。

那么,既然在对等架构中没有办法保障强一致,那么区块链体系中的一致性则和传统数据库存在本质上的区别,从而引发后续一系列设计上的不同。

归根结底,在任何传统主从架构的数据库模型中,人们会想尽一切方法防止集群内出现“脑裂”,也就是同一个集群里面两个节点都认为自己是主节点。

但是这个问题在对等数据库体系下时时刻刻都可能发生,而这种现象在区块链里面叫做分叉,这是和我们传统数据库一致性模型非常不同的地方。

  • 锁机制

其中,锁机制可以说是区块链与数据库在保障数据一致性方面最大的区别。

所有研究过数据库的同学不可能没听说过锁。当我们做一个事务的时候,提交之前所有该会话变更的记录都要被锁住,不能被其他会话所修改。

而去中心化数据库,由于每个账本节点操作本地数据,变更信息会异步地传输出去,因此根本不存在一个全局锁能够在记录变更的时候通知其他人。因此,在无锁的前提下,去中心化数据库,也就是区块链该怎样保障数据一致呢?

比特币使用的是UTXO结构,有点类似于数据库的“乐观锁”的思路,也就是操作的时候不进行锁定,只有在最后提交的过程中判断记录有没有变化。

比特币则是通过coin是否被花费的状态来判断是否存在交易冲突。而以太坊则是使用nonce作为每条记录的递增计数器来判断是否存在针对某一账户的重复交易,实际上也是一种变相实现的行级锁的机制。

  • 安全机制

另一个区块链业界大家谈论比较多的就是安全机制。

首先,我不是加密算法专家,因此我在这里不去讨论具体使用的加密算法,而是从整个存储体系的安全模型设计上,来讨论一下区块链技术中如何在全对等架构的体系下保障数据安全。

在我看来,区块链的安全体系分为三个级别,记录级、区块级以及链级。

记录级安全主要是判断某一条操作记录是否合法,在一些实现中还包括是否对不同用户有读可见和写可见。

而区块级则是当节点接收到另一个节点发送的区块时,如何判断这个区块本身没有被篡改过,那么通过默克尔树、挖矿的结果等机制都可以做到。

最后,怎样保证链的完整呢?比如每个数据块需要包含链中上一个数据块的校验,以及当分叉发生时如何进行回退等,都是保障整个链条结构的完整。

四、去中心化数据库架构

区块链技术和数据库技术的融合会形成怎么样的结果呢?

我们是否能够将现有的区块链以数据库的架构进行组织,分为内核、运行库、插件,以及SQL解析优化等不同模块呢?

既然数据库的核心本质依然是不可变更的事务日志,这一部分等同于区块链的链结构,那么如果我们通过将SQL引擎架设在state store,甚至让SQL引擎直接对链内的数据进行访问,是不是意味着我们就拥有了一个通用的编程和访问接口?

又例如:对于安全组件,我们是否可以做到列级行级表级以及节点级别的安全认证,同时可以通过配置指定哪些表需要进行数字签名,哪些表的一些字段是共享的,但其他字段是需要经过多重签名做加密的等。

另外,对于一致性来说,我们是否可以指定某些表是全局共享表,某些表则是本地表,这样就可以取代现在区块链与数据库混用的部署方式。

我认为,未来会出现两者融合而成的 “去中心化数据库”。

去中心化数据库基本功能

去中心化数据库的基本特性:

  • 去中心化:架构是完全的去中心化的,不存在中心的控制节点,每个节点都具备读写的功能,每个节点的数据都是一致的;
  • 无全局锁:由于采用广域网上的对等架构,去中心化数据库不可能实现全局锁,因此系统只能使用在某种程度上弱化锁与一致性,来满足高可用的需求;
  • 非固定节点生成日志:非固定节点生成日志,日志是整个数据库的日志,在去中心化的体系结构中任何节点都有权记录日志,这样就形成了去中心化没有主节点的架构,任何节点都有机会临时成为记账节点出块;
  • 异步事务确认:由于不存在全局锁,与传统数据库相比一些事务机制必须得到调整。将事务的提交回滚做到异步可能是一种比较可行的思路;
  • 一致性策略调整:在多活的区块链状态下,数据的一致性策略会与传统的数据库一致性机制有所不同;
  • 行级别安全性和触发器:对于数据安全,去中心化数据库将会保证到行级甚至列级的数据安全性。

五、区块链和数据库技术融合:中心化数据库

对于区块链和传统数据技术,我认为区块链技术的未来发展,主题是“融合”!

现在区块链的业务理念飞速发展,但是从技术本身来看,我认为当前区块链的技术仍然和上世纪“80年代”的数据库技术阶段类似,在技术的成长期。如我们上文所提到,区块链技术在通用性、标准化上还有很长的路要走。

而基于技术路线和架构设计的类似,数据库技术与区块链技术的融合其实是大势所趋。 而通过区块链技术和机制的引入,去中心化数据库,将可能是未来技术发展的一个重要方向。

原文地址:https://www.cnblogs.com/zourui4271/p/8969621.html

时间: 2024-10-07 22:55:02

以数据库思维理解区块链的相关文章

java 实例理解区块链的概念

区块链的核心是去中心化的存储,传统的数据库解决方案,包括关系型数据库,非关系型数据库,都是属于中心化的存储方式.去中心化的存储,就是数据没有中心,并且每个数据节点都包含了上一个数据节点的信息. 通过一个实例来理解区块链的数据存储形式: package com.weihua.blockchains.blackchain; import java.util.Date; public class BlockMan { public String hash; public String previous

第6讲 | 理解区块链之前,先上手体验一把数字货币

初次接触到区块链的你,肯定是一头雾水:“区块链是什么,这玩意到底怎么回事”. 其实对于区块链的原理,你大可不必着急,咱们可以直接上手体验一下目前区块链的第一大应用:数字货币. 本篇的内容面向所有区块链的小白,我会教你如何使用数字货币,来帮你从另外一个维度理解区块链技术. 本篇内容包括但不限于:数字货币钱包介绍.下载安装.转账.数字货币交易所充币.提币等等. 首次接触数字货币 区块链其实是从生产者的角度讨论一个抽象出来的概念.如果把区块链比作车辆设计图纸,那么数字货币就是正在跑的汽车.所以理解区块

通过7个python函数理解区块链

我想对于那里的很多人来说,区块链就是这种现象,很难不让你头脑发热.我开始观看视频和阅读文章,但对我个人而言,直到我编写自己的简单区块链,我才真正理解它是什么以及它的潜在应用价值. 我对区块链的看法是它是一个公开的加密数据库.如果你是亚马逊并且你想使用该技术来跟踪库存水平,那么使用区块链是否有意义?可能没有,因为你的客户不想花费资源来验证你的区块链,因为他们只顾看着网站说Only 1 left!. 我会让你考虑未来的应用.所以不用多说,让我们看看我们的7个函数! def hash_function

如何理解区块链技术

区块链技术涉及到的一些技术有:密码学.P2P.互联传输协议.数据库.分布式.经济学原理等,区块链技术是一种分布式记账技术(数据很难被篡改),我们可以理解为一种分布式数据库(因为需要同步每个节点数据,因为数据更新是比较缓慢的,目前也有一些技术可以增加同步速度,像off-chain(侧链技术)闪电网络项目.分片技术等) 关于公有链.私有链.联盟链,可以从节点特征来理解:公有链是由数量众多多节点构成:私有链构成可以理解为可控多单节点,常用来作为测试用:联盟链由达成协议被承认的多个联盟节点构成. 主要应

快速理解区块链

    区块链(英语:blockchain或block chain)是借由密码学串接并保护内容的串连交易记录(又称区块).每一个区块包含了前一个区块的加密散列.相应时间戳记以及交易数据(通常用默克尔树算法计算的散列值表示),这样的设计使得区块内容具有难以篡改的特性.用区块链所串接的分布式账本能让两方有效纪录交易,且可永久查验此交易. 网站:https://anders.com/blockchain/blockchain.html模拟实现过程 比特币严格意义上是第一个去中心化的app 分布式资料库

区块链在中国(1):IBM HyperLedger

在我看来,比特币就是现实中的V字仇杀队,当然现实是更残酷的世界政府,这场博弈关乎着人类文明.政治.社会属性.经济和人权. IBM HyperLeger 又叫 fabric,你可以把它想象成一个由全社会来共同维护的一个超级账本,没有中心机构拥揽权力,你的每一笔交易都是全网公开且安全的,信用由全社会共同见证.它与Bitcoin的关系就是,你可以利用fabric构建出一个叫Bitcoin的应用来帮助你change the world. 愿景是那么的牛X,貌似正合我们想改变世界的胃口,但是在残酷的现实和

从概念到底层技术,一文看懂区块链架构设计

转自:http://www.8btc.com/ebook-blockchain https://blog.csdn.net/lucky_greenegg/article/details/52821924 前言 区块链作为一种架构设计的实现,与基础语言或平台等差别较大.区块链是加密货币背后的技术,是当下与VR虚拟现实等比肩的热门技术之一,本身不是新技术,类似Ajax,可以说它是一种技术架构,所以我们从架构设计的角度谈谈区块链的技术实现. 无论你擅长什么编程语言,都能够参考这种设计去实现一款区块链产

区块链概念

一段视频了解一下: 知乎普及:https://www.zhihu.com/question/37290469 首先不要把区块链想的过于高深,他是一个分布在全球各地.能够协同运转的数据库存储系统,区别于传统数据库运作——读写权限掌握在一个公司或者一个集权手上(中心化的特征),区块链认为,任何有能力架设服务器的人都可以参与其中.来自全球各地的掘金者在当地部署了自己的服务器,并连接到区块链网络中,成为这个分布式数据库存储系统中的一个节点:一旦加入,该节点享有同其他所有节点完全一样的权利与义务(去中心化

Go语言与区块链——阶段性学习建议

2019年Go语言与区块链 链接: https://pan.baidu.com/s/1rtstZKws3t9L8bcFZmUd3Q 提取码: gx1r 阶段一:区块链主流语言:Go语言开发实战 本阶段需要掌握Linux和Windows双系统开发环境,建立面向对象思维,能对问题进行抽象归类.掌握基础的并发理论. 主要内容包括有:Go语言介绍及开发环境搭.基础类型.运算符.流程控制.函数.工程管理.复合类型.面向对象编程.异常处理.文本文件处理.案例:开发实战. 阶段二:区块链后端技术体系:Go语言