NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

区块链与数据库技术对比及融合展望

  • 2019-10-24
  • 本文字数:2727 字

    阅读完需:约 9 分钟

区块链与数据库技术对比及融合展望

10 月 19 日下午,由百度超级链学院与金色财经联合主办的百度超级链学院线下技术沙龙《区块链与数据库的融合碰撞》在北京科技寺创业空间滚石店顺利举行。百度超级链资深工程师孙君意进行了《区块链与数据库技术对比及融合展望》主题分享,以下为演讲整理


孙君意,百度超级链资深工程师,目前负责超级链的架构设计,对区块链的账本、事务模型有深入研究。在百度期间负责过万亿级网页链接库实时存储,Feed 统一内容池、垂搜多版本数据库等项目。


首先我们来思考一个问题,区块链和数据库在哪些维度上有共性,我自己有一个简单的定义,我认为区块链和数据库都是数据管理技术,数据管理并不高深,我们用一个 Excel 就可以进行。我们在实际项目实施过程中会被客户问到一个问题,为什么这个项目非得用区块链,区块链难以篡改,比如说有密码的支撑,比较方便实现多方共享。但是这些是不是足以说这个项目就可以用区块链,我认为如果在应用层做很多间接改造也可以实现大部分功能,但是其中有一部分很难实现,就是在参与管理数据的多方存在不信任的场景下,这种场景下是很难用传统数据库解决的。除非多方之间选出大家都公信的“盟主”,让它来管理这个数据库,这个时候业务用数据库就可以做,否则的话是行不通的。


我认为区块链的革命性就是实现了可信的数据管理,为什么说可信,有两个方面,第一个是存储的可信;第二个是数据处理过程的可信。通过区块链的共识算法实现了在去中心的网络环境下成百上千个节点维护着一致性的数据副本。并且,数据的变更都是公开透明和可审计的,每个节点都会验证,不管是密码验证还是合约执行结果的验证,都会在各个节点执行。


网络规模越大,公信力越强,事实上人们也愿意为可信带来的溢价买单。一个简单的例子,如果现在在亚马逊的 RDS,如果要存储 1GB 的数据,成本大概是每月 0.25 美元,但是同样如果存在以太坊上,大概需要三万两千个 ETH,有 7200 多个节点分布式地在全球存储其副本。区块链通过共识算法和智能合约,在实践层面真正实现了可信的数据管理,这是具有革命性的。


另外一方面,很多人也看到区块链有很多的局限性,出现了一些悲观的看法,比如认为区块链都是更慢的数据库,链式哈希不新鲜,Git 中早就有了;绝大多数场景用数据库就够了, 不是刚需——Nice to Have , Not must have,但是我认为这种看法是错误的。


我总结一下区块链适用的场景有三点:


  1. 数据的变更历史需要透明、可审计的应用场景;

  2. 数据的处理过程需要按照多方约定并公示后的规则来执行的场景;

  3. 数据的副本需要维护在多个不完全互信节点的场景。



本次分享内容会从三个关键的技术维度去对比:事务管理、共识算法和编程范式。从事务管理角度来看,区块链真的很慢吗?其实并不慢。为了性能,大多数数据库的默认事务隔离级别较弱,而 NUS 最新研究表明:当 Isolation Level 设置为最高级别(SERIALIZABLE)情况下,主流分布式数据库的性能和 HyperLedger Fabric 是一个数量级的(400 TPS 左右),单一的这种场景下,传统数据库和区块链相比并没有性能上的绝对优势。


再一个我们来看一下如何实现多版本并发控制,数据库一般有全局时间戳或者序号生成器,每个事务也有自己的序号,可以通过让事务只能读到序号比它序号小的数据版本实现不同事务的隔离。




由于要实现去中心化,区块链一般没有全局序号,而是通过显式的 Reference 关系表达事务之间的“顺序”。比如:比特币中,交易的 Input 指向了其他交易,表达了一种”Happen Before”的语意,HyperLedger Fabric 中,事务需要申明自己的“读写集”,其中,读集的版本是通过(区块高度, 块内序号)二元组引用。


在我们超级链里面的事务模型是 XuperModel,它是基于经典的 UTXO 模型演化而来, 经典的 UTXO 模型只能描述转账场景,而 XuperModel 创新之处在于可以描述更加通用的数据变更。




举个例子,这里有个“计数器”合约,调用一次,Counter 变量就会加一。从上图可以看到,每个事务的 Input 字段有个哈希指针指向其依赖的其他事务的 Output。也就是说,事务的 Input 描述了它读取的变量的旧版本,而 Output 体现了事务一旦成功后会赋予变量的新值。图中,T2 和 T2’这两个事务是冲突的,因为他们的 Input 引用了相同的变量的旧版本,但是输出是赋值同一个变量。最终,T2 和 T2’只能有一笔上链,另外一笔会回滚。



再一个,超级链底层的数据多版本机制实现也与数据库不同。 数据库的一般做法是将逻辑 Key+版本号拼接成物理 Key,但是这个方式只能保留有限个版本,一旦版本太多,就会导致区间查询迭代很慢,因为要 Scan 大量无用的老版本。超级链用了一种链式哈希的多版本接口,在状态树中 Key 对应的 Value 只是哈希指针,指向账本中事务的 Output 字段,要回溯之前的老版本也只需要通过事务的 Input 指针再往前回溯。当需要回滚事务或区块的时候,产生的 IO 开销也极低。



这里再举一个简单的例子,还是刚才那个“计数器”场景。假设 Alice 和 Bob 几乎同时发起合约调用。合约执行到 Get 调用,得到同样的值是 42, 版本也一样是 tx1。然后加一计算得到 43,再分别进行 Set 提交,Alice 先提交的就可以将值更新到 43,版本更新到 tx3,而对于 Bob,虽然运算过程是对的,但是最终提交时候的版本已经过期了,因为其依赖的版本等于 tx1 而现在最新的版本是 tx3,所以就会失败。



我们再看一下共识算法的详细对比,说到共识算法不得不提一下 FLP 原理,原论文发表于 1982 年,大概是说:在异步网络下,多个节点中就算只有一个错误节点,也无法找到确定性的算法保证同时满足 safety 和 liveness。这个 FLP 给大家提供了分布式系统设计的理论指导,而实践中,数据库的共识更多的是牺牲了 liveness 而确保 saftey, 比如 raft。相反地,区块链尤其是公链则是牺牲了 safety 而优先保证 liveness 比如,比特币的交易如果是刚刚上链,那是有一定概率因为分叉被回滚掉的,不够 safety,但是好处是整个系统一直可以提交交易,就算有分叉,最终会通过最长链原则达到一致性。


上面的表格详细对比了数据库 &区块链在容错、选主方式、日志复制、安全和活性等方面的差异,并且区分了公链和联盟链。


下面看一下编程范式对比。数据库领域已经有统一的编程范式,就是 SQL(Structured Query Language),具体实现上有一些方言的差别。区块链的编程范式是智能合约(Smart Contracts),然而其具体的实现千差万别,比较有影响力的是以太坊的 Solidity 语言。




最后来做一下两者未来融合展望。我认为区块链和数据库有融合的契机,我写出来了两种可能,有一种是把区块链作为引擎接入到数据库中, 相当于从底层改造存储引擎实现去中心化的数据库。另外一个方向,区块链借鉴一下数据库好的东西,比如像 SQL,将 SQL 语句翻译为智能合约代码,提升易用性。谢谢大家!


2019-10-24 16:073360

评论 1 条评论

发布
暂无评论
发现更多内容

华云大咖说 | 华云数据与数科网维携手共建国产云生态

华云数据

一文搞定 Flink Job 的运行过程

shengjk1

flink flink源码 flink源码分析

智汇华云 | ArSDN打通软件定义数据中心的“任督二脉”

华云数据

Redis为什么是单线程?高并发响应快?

Linux服务器开发

redis Linux服务器开发 网络io C++后端开发 单线程

2020年12月的面试经历:美团4面+字节4面(均已拿offer),面试真题分享

Java架构师迁哥

彻底搞懂ThreadLocal

千珏

Java 源码分析 多线程 ThreadLocal

如何深入的学习C语言

cdhqyj

编程 C语言 计算机 嵌入式

恒源云_Gpushare.com | 三步搞定GPU免费云端训练!

恒源云

人工智能 深度学习 gpu CV nlp

头条观察 | 从比特币的角度理解牛市暴跌

CECBC

比特币

家务活中的python协程

行者AI

协程 python学习

混搭的美感|靠谱点评

无量靠谱

Redis学习01

Hex

Redis 核心技术与实战

如何从零开始学Python:(6)如何创建模块并运行?

广之巅

Python 4月日更

聪明人的训练(二十二)

Changing Lin

4月日更

百度C++工程师的那些极限优化(内存篇)

百度Geek说

c++ C# 内存访问

新疆重点人员管控平台搭建,可视化大屏

GitHub惊现!JVM G1GC的算法+实现,90张图+33段代码,你的面试专属!

Java架构师迁哥

简简单单才是真,初试 Svelte

LeanCloud

恒源云_Gpushare.com | RTX 3090独家训练实录:MMDetectionV2 + ResNeSt

恒源云

人工智能 深度学习 gpu CV nlp

重磅来袭:Spring之RequestBody的使用姿势小结

学Java关注我

Java 编程 架构 技术 程序人生

一个诡异的MySQL查询超时问题,居然隐藏着存在了两年的BUG

CoderW

Java MySQL 数据库 程序员 互联网

打造创新模型,博睿数据首倡服务可达的数据链DNA

博睿数据

低代码与数字化校园应用案例:2周时间构建50+应用,直呼过瘾!

优秀

低代码 数字化校园

面向软件 IT 专业的高校大学生付费学习现状问卷调研

Albert

4月日更

浪潮云洲链接入“星火•链网”,走向工业互联网的星辰大海

浪潮云

云计算

拒绝假货!LVMH与普拉达、卡地亚联手推出区块链平台AURA

CECBC

0门槛成为“技术牛人”!星环科技线上分享课“星课堂”开播,快来报名,一探究竟

星环科技

人工智能 数据库 云计算 大数据 直播技术

软件测试——教育机构课程顾问常见黑话大全

程序员阿沐

程序员 软件测试 教育 机构 教育培训

肝了15000字性能调优系列专题(JVM、MySQL、Nginx and Tomcat),看不完先收藏

北游学Java

Java MySQL nginx tomcat JVM

2021年3月券商App行情刷新及交易体验评测报告

博睿数据

博睿数据携数据链DNA创新理念,闪耀金融科技应用发展研讨会四川站

博睿数据

区块链与数据库技术对比及融合展望_区块链_孙君意_InfoQ精选文章