区块链+数据库,底层技术融合是否带来更大爆发? - 王涛 | JTalk 第五期

编者按:本文系区块链专家王涛讲师,在掘金技术社区主办的《给开发者的区块链技术指南 | JTalk 掘金线下活动第五期》 活动上的分享整理。掘金 JTalk 目前已举办5期,每期 JTalk 会邀请垂直行业的优秀工程师来分享优秀的实践经验,技巧方法。旨在为开发者提供线下技术交流互动机会,帮助开发者成长。前端

4月22日,在掘金技术社区主办的沙龙上, 王涛以《区块链技术VS数据库技术:颠覆仍是融合》为题作了分享。如下是JTalk演讲实录:

如今区块链所说的“3.0阶段”,实际上更多的是偏向于业务,从数据库角度来看,如今区块链底层技术有不少能够提高的余地。刚开始你们只是作一个数字货币,随着合规的加入,你们能够在上面跑一些业务。 但区块链底层链,包括性能、处理能力、通用功能,离商业化还有很大的距离。若是把区块链技术将来畅想成一个10分的东西,咱们认为如今区块链功能只是在1分到2分的级别,还有很是长的路要走。 从技术角度理解,其实区块链技术就是一个特殊的分布式多活数据库。算法

区块链技术具体有什么样的演进方向?

方向1:从专业化向通用化演进。 如今玩以太坊和比特币,都是为了专门目的设计的一套软件,比特币是专门为转帐设计的,以太坊是转帐+智能合约,通用方面,可使用JAVA、C+ +程序,写任何逻辑。如今区块链基本是为专有系统定制的一套软件,而不是一个通用的软件。数据库

方向2:各自为政向标准化演进。 搞区块链最重要的是协议,而不是软件,你们只要知道比特币之间交互协议,可使用专为比特币设计的矿机,也能够本身写一套东西,只要有协议就行。如今不少人作公链,每一个公链都是独立的通讯协议,这就会形成链与链中间通讯受到影响,能够用跨链机制、侧链机制打破这些壁垒。相信将来在整个协议层可能会有更多通用化、标准化东西。后端

方向3:产品化与模块化不断增强。 如今基本上大部分数据库模块化作的很是好,好比但愿用一种特殊的加密算法,就把这个加密的库替换原来库就能够,这是将来区块链须要提高的地方,就是框架可以作到更好的模块化。安全

方向4,性能与可扩展性。 针对分片、内存计算、磁盘结构等进行优化,从单点磁盘结构到多分片对等多活架构,从而使得性能发挥到极致。这一块须要技术上继续突破才能实现性能的提高。服务器

区块链技术行业现状:

  1. 区块链体系结构没有被统一。
  2. 区块链开发语言极其混乱。
  3. 需求多种多样,无标准使用范式。 你们在学习区块链技术时,成本很高,搞一个链要学一套新的开发语言,这个东西可能不流行了就要换新的语言,这会有很大的问题。作传统大数据库的,你们用的都是SQL,比较标准化。 另外,如今区块链基本尚未一个真正的杀手项目,没有出现哪个业务必须用区块链来完成,这样你们都想尝试,用区块链在这块玩一玩,在那块玩一玩,试试医疗、试试物流、试试IoT,哪一个行业真正能用区块链颠覆,核心价值在哪,怎么用区块链作这个事情,这些问题是将来一段时间行业里须要去回答的,这几点暂时是薄弱环节。

1、区块链与数据库相同点

特性:共识机制、存储机制、智能合约、分片、应用开发接口、安全。这些实际上都是区块链底层老生常谈的一些模块,对应到数据库,有没有一些对应的点? 共识机制。在过去数据库架构里,所谓一致性控制都是有一个主节点,全部写操做会被复制到另一个存节点作高可用配置。区块链上,能够把这个体系扩展,假设主节点并非固定的,而是每10分钟换一次,在主节点MySQL,10分钟换一次主节点,某种程度上是相通的。无论是POW、POS所谓共识机制,真正本质是到底在一段时间以内以谁的信息为准,这个数据库里是以主节点为主,当它挂了之后,怎么选出一个新的节点,这些都不重要,只是实现问题。网络

存储机制。在区块链里,存储说的都是链自己这个事,你们有兴趣看一下比特币、以太坊,除了链自己,还有相似于状态存储,好比链很长,可能有100GB,涉及到某个帐户屡次修改,链自己其实是交易日志,记录每一条记录修改方式,展示形式要归到一个数据库里,都是要内嵌一个小型数据库,把最终结果放到里面。这一套体系对应到数据库里,无外乎就是数据库的存储+事务日志。架构

智能合约。是用户自定义的托管程序,在数据库里托管程序叫存储过程,在区块链里,本质是同样的,最大不一样点在于安全性方面。在数据库里调存储过程,记录最终结果,可是在区块链里,由于不可信任,记录调用。 分片。大部分区块链项目里作得还不太成熟、不稳定,数据库分片是很是成熟的东西,区块链行业,因为分片之间交易很难保障,大部分区块链公链项目很难作好的分片。框架

应用开发接口。在MySQL或Oracle用SQL,无外乎写一段应用程序,扔到系统里,别人调用。而区块链技术也须要一个统一的访问方式,才能更好实现通用化应用。异步

安全机制。在数据库里,一个表单,到底谁能读、谁能写,有一套定义,但在区块链里,安全是行级的安全,好比在比特币里,至关于全局可读,只有输入可写的安全配置。 从这几块来看,区块链和数据库的世界有不少相通之处。

数据库共识方式。全部读写操做都是主节点,主节点会把信息传给两个从节点。在区块链里,它的主节点是随时会变化的,好比比特币每10分钟作一次出块,这是POW自我验证,谁先算出那个数,你们广播一把,我算出数,你们跟我看齐。这是你们竞争主节点的过程。在区块链的世界,主节点是随时跳跃的,当每个节点本身认为本身变成主节点之后,会把一段时间以内接收到新的信息,经过区块方式传送给其余节点,这个传输过程和咱们以前从主节点发送到从节点的方式基本也是很相似的,涉及到P2P的东西,核心本质都是同样的。

事务日志。数据库里事务日志和区块链的链自己就是一个事情,在区块链里,每个区块对应到数据库,能够认为对应的就是一个日志文件。最本质的区别是在于区块链同步标准以区块为单位,每一次主节点要把交易信息打包成区块,这个区块做为交易日志。当有任何信息之后,马上就能够把数据同步给其余节点。

共识机制。

POW本质是一种自我证实的方法,就是每个节点你们都想让别人跟本身同步,本身想成为主节点,怎么成为主节点?POW方式是给你们很难的题本身去算,算完了之后,告诉你们算出来了,让你们来验证,若是验证是对的,跟我看齐。好处是你们会把大部分时间花在计算过程中,而对于网络没什么太大压力。

POS正好相反,POS没有过多自我计算的过程,至关于一大屋子人都想成为主节点,你们经过某种方式进行投票,这种机制不须要本身去搞,但对网络压力很大,由于每一次投票都要设计上万个节点竞选,网络压力很大,因此为何POS也不可以彻底真正解决高性能问题,由于当节点数太多,POS效率很是低。 DPOS,就是一屋子人选几个表明,你们跟几个表明看齐,从某种程度上是减小了网络压力。但怎么信这个表明,这个表明是否是表明广大人民的利益,是否是靠谱,这又是一个问题。

DAG,这跟咱们一直说了POW、POS是本质的区别,无论是POS仍是POW,作得都是跟我看齐的事,本质是当某一我的在一段时间以内成为一个基准,你们跟基准点看齐。但DAG的思路是一帮菜市场大妈去传播谣言,没有一个基准点,当在DAG网络里,全部传输都是异步的,好处是不须要任何人成为这个基准出块的节点,坏处是没有办法作时序控制,由于每一个人讨论东西顺序不同。DAG惟一能作的事情就是转帐,后面涉及到操做无外乎是加和减,若是菜市场大妈互相传播方式,作一些高阶操做,A和B两我的先作加法再作乘法,C和D两我的先作乘法再作加法,两个结果不同。DAG算法里暂时很难突破排序的问题。传统区块链链式结构没有这个问题,这个节点先作加作作乘,不要紧,只要说好了,他说先加就是先加,他说先乘就是先乘,这块是DAG网络和传统区块链方式最大的区别。

区块链链式结构和数据库日志结构是什么样的?

数据库日志结构。在一个事务里先作一个加法操做,再作乘法操做,两个操做之间一样有一套指针或连接,在数据库的日志结构和区块链结构有不少共同之处。 区块链用UTXO的形式,这个并非最关键的点,UTXO只是一种协议的表示,在底层彻底可使用数据库把它表示出来。对于一个数据库里面的结构体和区块链的结构体,二者之间有不少相通的地方,彻底能够有互换的关系。
典型区块链帐本结构。区块链涉及到交易活动日志、数据状态库,在状态库基础上增长索引。对应到数据库里也是如出一辙的,包括数据库Ctransaction、数据管理部分、索引,从结构来看,看待区块链底层结构和上层数据库结构都是很是相通的。 区块链与数据库功能模块对应关系。
区块链是数据库交易日志,区块链State Store对应数据库的数据存储,区块链共识算法对应的是数据库一致性算法,区块链智能合约对应的是数据库存储过程等等。

2、区块链与数据库的不一样

最大的不一样是一致性。 对于数据库来说,通常都是强一致,好比Oracle,写入一条记录之后,确保数据必定是存在的,而且这条数据在数据库日志里确保不能被更改。在分布式数据库里则是最终一致性,当写一条记录之后,不必定可以马上看到这个东西,可是可以确保在将来一段时间以内这个记录必定存在。无论强一致仍是最终一致,自己要求是写入成功的数据必定会存在在数据库里某一时刻。 但区块链不必定,区块链可能会出现分叉,分叉完了还要作合并。好比某一我的帐户里有10个比特币,在同一个时刻,在中国和美国两个不一样帐户里作交易,由于在中国和美国服务器不同,一个服务器接收我给A作交易是成功的,在第二个美国服务器接收一样消息,转给B的也是成功的,但这两我的不能同时成功。在区块链必定有交易成功确认过程,这在数据库里是没有交易确认,只要在数据库里写的东西必定能够成功。若是在中国向A转10个比特币,在美国向B转10个比特币,假设因为中美开战了,中美之间网络忽然断掉了,可能断了三天,三天以内,中国大陆全部比特币交易没有办法通畅,这样就会超过比特币6块的问题,当两个网络合并时就会产生分叉,若是将来去作合并时,在中国作交易,给10个比特币,把一堆东西卖给我,在美国也同样,这样在线下收到20个比特币,最后当作比特币合并时,其中一方确定会被损失。在极端状况下,在比特币体系里没有办法真正保证强一致,去中心化存储里和中心化存储最大的区别,就是在于一致性。 为了确保一致性,在数据库里用锁,由于全部操做在主节点执行,几个并行操做里,结构没有提交时会锁住,其余操做过来之后,必定要保证这套交易成功才能释放这个锁,保证继续。 区块链没有锁的机制,好比在中国作一笔交易之后,不可能在毫秒级或微秒级以内就把交易信息传到美国去,若是美国对一样记录作操做时,就会面临这样问题,二者有冲突,在去中心化或多活、多主节点写入里,没法保证全局锁,这个时候怎么确保这个东西,Oracle最终确认时,谁先提交谁成功,后面发现记录变了,从新作一个。相对于区块链,以太坊使用NAS,确保每个帐户更有顺序化,这时候从某种策略选出其中一个正确的。若是顺序错了,会把错误继续。

从安全级别来说,区块链有不少机制确保安全性。对于数据库你们的想法是这个东西是跑在数据中内心的,区块链基本上有一个笔记本就能够了,因此除了确保本地安全之外,更重要的是协议层面确保其余对等节点、相邻节点有没有做恶的坏人。在三个层面上确保安全,对于记录级安全,属于交易数字签名、智能合约数字签名,就是当作一笔交易时,必定要经过数字签名来验证账号是否有权利修改这套记录,经过加密,从记录级确保修改这条记录的人必定是本人。区块级的安全机制,当收到块之后怎么确保这个块是正确的,这个块包括默克尔树、挖矿校验,这是对于区块安全的保障。对于链级安全机制,怎么确保这个链是靠谱的,利用前一个区块生成校验码、分叉解决方案。

分片机制。传统数据库分片很容易,都在一个数据中心以内,若是作两个分片之间的操做,先问全部参与交易的人是否是都准备好了,能够提交了,确保你们都在同一个状态下。但有一个问题,没有办法在多个分片之间作控制。在区块链里除非有某种机制确保不会分叉,不可能确保其中某个操做在在另外一个链里将来会不会被退掉,没有技术确保,由于链不具有这个功能。不是技术上操做不了,是理论上行不通。若是这么作也会有一些方法,找到第三方中介作这个事,他来背锅是有可能的,或者用侧链机制、跨链机制。

3、区块链技术和数据库技术融合的形式

而在底层技术上,我认为经过二者的技术融合,可能会出现“去中心化数据库”这么一种产品形态。 对于去中心化数据库,其主要的技术点有一下几个:

  1. 百分之百去中心化,是一个区块链的数据库。
  2. 没有全局锁。
  3. 非固定节点生成日志,每一个节点都有可能成为出块的节点。
  4. 异步事务确认。
  5. 一次性策略调整。
  6. 行级安全性与触发器。 应用场景,包括电商、金融、信用、物联网,这些都有可能,这个形式很是好。如今的商业模式是中间商把全部人资源整合,利用整个资源提供便利性,赚中间差价,若是是区块链机制,或者叫作去中心化的数据库的机制,被广泛应用的话,从整个商业模式上来说,不太须要资源密集型中间商,可能会把这些行业现有的商业模式解耦。 对于将来区块链商业模式来讲,区块链将来毫不仅仅被局限于交易这么一个简单的操做,咱们认为将来会是一个去中心化的协做组织。 例如,携程是中心化的旅游网站,有各类各样的资源,包括酒店、机票、旅游景点资源,会把这些资源打包卖给要出行的各位。将来会不会有一个区块链携程或携程区块链,它的作法是统一一套体系,可让希尔顿和长城饭店直接连到链里,另外能够找某一我的或某一个组织,专门是作网站的,专门把这个链里全部资源整合起来,作成网站挂出去,至关于去中介化,不须要用携程这样的组织把全部的资源统一块儿来卖差价,而是让全部的人都自发参与到去中心化组织里,来达到商业目的。 咱们认为区块链将来是去中心化协做,而不只仅只是交易这么一套东西。 基本就是这些,谢谢!

以上是《给开发者的区块链技术指南 | JTalk 掘金线下活动第五期》 讲师王涛的分享,若是你对掘金的 JTalk 线下活动感兴趣,能够关注掘金活动页面的 JTalk 活动报名。掘金 JTalk 目前已举办5期,每个月一期的 JTalk 会邀请垂直行业的优秀工程师来分享优秀的实践经验,技巧方法。旨在为开发者提供线下技术交流互动机会,帮助开发者成长。

JTalk 预告

JTalk 第六期即将在杭州举办。

  • 主题:从前端到“后端”
  • 时间:5.20
相关文章
相关标签/搜索