以数据库思维理解区块链,快来看看
 本文摘要:作为一个数据库行业的老兵,我看见在区块链技术的热潮下,传统的IT技术同学们维持了十分理性,甚至是敌视的态度.
 作为一个数据库行业的老兵,我看见在区块链技术的热潮下,传统的IT技术同学们维持了十分理性,甚至是敌视的态度.只不过不管是冷玉女还是敌视,两极观点之下,我指出我们应当从IT人较为需要解读的角度探究一下区块链技术.因为区块链这个东西的本质和数据库技术十分相似,很多机制用于数据库的理念去解读不会十分直观精确.
 对于区块链和传统数据技术,我指出区块链技术的未来发展,主题是"融合".我们就从数据库这个角度来理解区块链技术体系中各个技术点,以及通过"去中心化数据库"这个概念,把区块链与数据库技术做到一个较为好的统合.
 一,区块链技术现状 当前的区块链世界有人堪称1.0,2.0,甚至早已到了3.0时代,但是从一个产品或技术抛光的角度来看,我指出当前的区块链也就相等于数据库的80年代,正处于百花光明日报各种思想层出不穷的时代. 对技术人来说,这是最差的时代,各种新鲜的点子和思路大量愈演愈烈,在无趣的技术领域带给新鲜的突破;同时这也是最坏的时代,没任何产品或方向认同是未来的主流,任何新鲜的思路或许在几个月以后就被证明不不切实际.
 所以,我们要准确理解当前区块链技术的变革和发展,那我们来对比当年数据库所走到的道路,想到未来区块链世界不会怎样发展. 1,技术演变路程 首先我指出,区块链一定会从当前的专有化向通用化演变.现在基本所有做到公链的产品都是针对某一个特定的场景来构建与优化,但是我指出未来一定会是一个应用于一条链,而是有一种标准化的研发范式.
 就样子传统数据库一样,不管大家研发什么样的应用程序,都可以用于这么若干受限的几个通用性产品就需要符合大部分业务场景了. 第二,向标准化演变.对于区块链技术,现在每个链基本都有自己的研发范式,甚至很多公链还仿效以太坊尝试自己做到一个编程语言出来,这实质上是一种行业正处于完整时期的标志.怎样辨别一个行业开始南北成熟期?就是业务模式基本相同,开发方式基本相同,这样就需要对大量的程序人员展开推展了.
 第三,产品化和模块化不断加强.当前不管是以太坊,比特币还是很多其它新的公链,大部分的体系结构都是十分凸耦合的.对相比我们在大数据领域的Hadoop,基本每个模块都可以作为独立国家插件展开可配备可自定义的插拔.
 所以我指出,随着区块链技术的大大成熟期和平稳,未来一定会经常出现一款成熟期产品,需要通过可插拔配备与插件的方式符合多种共识算法,安全性机制等. 最后,性能与可扩展性的提高.实质上这也是数据库所走到的路,当前区块链世界想要在短短的时间之内通过侧链,分片等机制穿过当年数据库几十年来的变革.
 接下来我会讲解,从数据库的角度看来区块链其仅次于的性能与拓展能力制约瓶颈在什么地方,以及应该如何优化. 2,发展现状 那我们回来头想到当前区块链行业的现状. 充满著区块链上层的一些应用于与金融领域的创意,分开从技术角度来看,我仍然指出其仅次于的革新在于对等数据存储机制的创建.
 在数据库这个行业里,大家仍然遵守着主-从架构,而几乎"多活"的系统从几十年前的明确提出仍然以来都是传说中的事情,根本没任何产品确实做多活. 而当我们以创意的多活数据库来看来当前区块链技术时,就不会找到三个急需改良的问题: 首先,区块链的体系结构现在十分恐慌,大家还没向传统数据库一样将其分类为事务,存储过程,鉴权,主从实时等模块,大部分人对区块链的理解还是逗留在谜样的黑盒子阶段.
 第二,区块链的研发语言几乎不成体系.数据库在经过开始的"战国时代"后,慢慢用于SQL做了业界的君主专制.
 而区块链当前显著还正处于"战国时代",还没一个统一的标准研发和用于标准. 第三,市场需求的多种多样,有些市场需求或白皮书的业务讲解是靠谱的,有些则是几乎异想天开不知所云.实质上这个和区块链所带给全新的业务模式涉及,很多人还在探寻新的业务模型,从而造成市场需求没构成标准范式. 二,区块链vs数据库技术:相同点 从数据库的角度对比,区块链技术即去中心化多活数据库技术,两者之间没本质区别.
 这里我列出了一些区块链里面较为最重要的技术点,以及这些技术点在数据库领域中是以什么形式不存在的.这些概念和数据库中的技术概念一一对应关系如下: 共识机制 一致性掌控 -  - 共识机制 分布式数据库中叫作一致性掌控,还包括传统的主从复制,新一代的Raft,Paxos等算法.
 在区块链中为了解决问题额外的拜占庭问题,将算法改良为PBFT,PoW,PoS等协议. 存储机制 数据库日志 -  - 账本 区块链结构基本等价于数据库的事务日志,其主要追加的内容还包括MerkleTree结构用作较慢检验数据的正确性,但是其本质与数据库的交易日志等价.同时数据库在日志中更加不会还包括事务掌控等企业级能力,是区块链数据结构所不具备的.
 智能合约 智能合约 -  - 存储过程 智能合约与数据库存储过程一样,都是一段托管地代码.本质上智能合约与数据库存储过程没什么区别,都是通过外部调用或虚拟机继续执行一段代码,并可以将托管地代码分享给其他用户展开调用.
 分片 数据库分片机制早在MPP数据库时代就早已不存在.通过将大量数据重复在有所不同分片中,超过容许每个分片数据总量,并提高总吞吐量和存储空间的目的.
 应用于研发模块 当前区块链还正处于类似于数据库当时的早期时代,模块没统一标准化.根据区块链项目有所不同,其模块可以按照数据库,对象存储,API调用,甚至PaaS平台标准展开定义. 安全性 区块链的安全性机制与数据库安全机制具备相似之处.
 数据库安全一般分成鉴权与许可两个模块,分别代表用户指定以及采访权限.而区块链当前仅有反对记录级写出许可,但是对于读书操作者时几乎分享的.因此,从安全策略上数据库比当前的区块链完备很多. 三,区块链vs数据库技术:不同点 数据库与区块链功能架构图 1,功能架构 黄色部分是区块链和数据库架构都享有的功能.
 白色的部分是目前数据库独特的功能. 我们在上文也有提到数据库的SQL能力是构建其通用性的最重要部分,SQL对于之后区块链的研发模式相同下来很最重要. 索引管理这块,在数据库中主要是提高数据管理和数据查找的性能效率的,当明确的应用于场景经常出现,性能将沦为下一阶段必须提高的最重要部分.
 因此,存储的数据的索引就沦为很最重要的构成了. 2,机制 在机制上,区块链和数据库的主要区别犹如以下几点: 一致性 区块链的设计思想,与传统数据库设计思想仅次于的有所不同就在于多活,也就是去中心化这个体系时所带给的一致性模型的区别.
 传统的关系型数据库遵循ACID强劲完全一致模型,载入的记录马上可以读书到.而一些新型分布式数据库使用最后一致性,也就是BASE模型,载入的数据继续不一定读书到,但是最后一定会不存在. 但是,区块链或者说去中心化数据库的设计思路就不存在显著区别,也就是说任何操作者不不存在"永久证实"这个概念.
 即使类似于比特币,从核心原理上来看6个块之前的内容也只是"基本会被重设". 荐个极端的例子,如果中美之间广域网出于什么原因忽然折断了三天,之后完全恢复的话比特币一定会经常出现大规模末端,这个期间如果有账号同时在中美展开大额消费的话,想完全恢复一个主链则一定必须壮烈牺牲相当大一部分人的交易才能构建重设. 那么,既然在对等架构中没办法确保强劲完全一致,那么区块链体系中的一致性则和传统数据库不存在本质上的区别,从而引起先前一系列设计上的有所不同.
 归根结底,在任何传统主从架构的数据库模型中,人们不会想方设法一切方法避免集群内经常出现"脑裂",也就是同一个集群里面两个节点都指出自己是主节点. 但是这个问题在对等数据库体系下时时刻刻都有可能再次发生,而这种现象在区块链里面叫作末端,这是和我们传统数据库一致性模型十分有所不同的地方.
 锁住机制 其中,锁住机制可以说道是区块链与数据库在确保数据一致性方面仅次于的区别. 所有研究过数据库的同学不有可能没听说过锁住.当我们做到一个事务的时候,递交之前所有该会话更改的记录都要被锁,无法被其他不会话所改动.
 而去中心化数据库,由于每个账本节点操作者本地数据,更改信息不会异步地传输过来,因此显然不不存在一个全局锁住需要在记录更改的时候通报其他人.因此,在无锁的前提下,去中心化数据库,也就是区块链该怎样确保数据完全一致呢? 比特币用于的是UTXO结构,有点类似于数据库的"悲观锁住"的思路,也就是操作者的时候不展开瞄准,只有在最后递交的过程中辨别记录是不是变化.
 比特币则是通过coin否被花费的状态来辨别否不存在交易冲突.而以太坊则是用于nonce作为每条记录的递减计数器来辨别否不存在针对某一账户的反复交易,实质上也是一种变相构建的行级锁住的机制. 安全性机制 另一个区块链业界大家谈论较为多的就是安全性机制.
 首先,我不是加密算法专家,因此我在这里不去辩论明确用于的加密算法,而是从整个存储体系的安全性模型设计上,来讨论一下区块链技术中如何在全对等架构的体系下确保数据安全. 在我看来,区块链的安全性体系分成三个级别,记录级,区块级以及链级. 记录级安全性主要是辨别某一条操作者记录否合法,在一些构建中还包括否对有所不同用户有读可见和写出可见.
 而区块级则是当节点接管到另一个节点发送到的区块时,如何辨别这个区块本身没被伪造过,那么通过默克尔树根,挖矿的结果等机制都可以做. 最后,怎样确保链的原始呢?比如每个数据块必须包括链中上一个数据块的校验,以及当末端再次发生时如何展开重设等,都是确保整个链条结构的原始.
 四,去中心化数据库架构 区块链技术和数据库技术的融合不会构成怎么样的结果呢? 我们否需要将现有的区块链以数据库的架构展开的组织,分成内核,运行库,插件,以及SQL解析优化等有所不同模块呢? 既然数据库的核心本质仍然是不能更改的事务日志,这一部分等同于区块链的链结构,那么如果我们通过将SQL引擎架设在statestore,甚至让SQL引擎必要对链内的数据展开采访,是不是意味著我们就享有了一个标准化的编程和采访模块? 又例如:对于安全性组件,我们否可以做列级行级表级以及节点级别的安全性证书,同时可以通过配备登录哪些表格必须展开数字签名,哪些表的一些字段是分享的,但其他字段是必须经过多重亲笔签名做到加密的等. 另外,对于一致性来说,我们否可以登录某些表是全局分享表格,某些表则是本地表,这样就可以代替现在区块链与数据库混用的部署方式. 我指出,未来不会经常出现两者融合而出的"去中心化数据库".
 去中心化数据库基本功能 去中心化数据库的基本特性: 去中心化:架构是几乎的去中心化的,不不存在中心的掌控节点,每个节点都不具备读取的功能,每个节点的数据都是完全一致的; 无全局锁住:由于使用广域网上的对等架构,去中心化数据库不有可能构建全局锁住,因此系统不能用于在或许上弱化锁住与一致性,来符合低能用的市场需求; 非相同节点分解日志:非相同节点分解日志,日志是整个数据库的日志,在去中心化的体系结构中任何节点都有权记录日志,这样就构成了去中心化没主节点的架构,任何节点都有机会临时沦为记账节点出块; 异步事务证实:由于不不存在全局锁住,与传统数据库比起一些事务机制必需获得调整.将事务的递交回滚做异步有可能是一种较为不切实际的思路; 一致性策略调整:在多活的区块链状态下,数据的一致性策略不会与传统的数据库一致性机制有所不同; 行级别安全性和触发器:对于数据安全,去中心化数据库将不会确保到行级甚至列级的数据安全性. 五,区块链和数据库技术融合:中心化数据库 对于区块链和传统数据技术,我指出区块链技术的未来发展,主题是"融合"! 现在区块链的业务理念飞速发展,但是从技术本身来看,我指出当前区块链的技术依然和上世纪"80年代"的数据库技术阶段类似于,在技术的成长期.
 如我们上文所提及,区块链技术在通用性,标准化上还有很长的路要回头. 而基于技术路线和架构设计的类似于,数据库技术与区块链技术的融合只不过是大势所趋.
 而通过区块链技术和机制的引进,去中心化数据库,将有可能是未来技术发展的一个最重要方向.