前言
区块链技术也被称为分布式账本技术,我认为他和传统分布式数据库的主要区别是“”“信任”,区块链是去中心化的,任何节点都不是leader,都不被充分信任(trustless),区块链内的任何节点都可以修改数据,修改完数据会向整个链内进行广播,其它节点接受到广播并不是立马同步修改记录数据,会对修改的数据保持怀疑,会根据共识机制,密码算法去验证这个数据的修改是否是合法的,如果不合法就丢弃掉,如果合法就记录下来,而一般传统的分布式数据库节点之间是相互信任的,数据复制(数据的修改同步)没有类似区块链的一套验证,讲究实时同步,所以类似银行,支付宝转账基本都是瞬间到账,而如比特币的买卖到账时间都不是实时的,区块链这套机制本质上是牺牲了一定的效率而换取了安全性。
扯些题外话,目前来看区块链技术的发展还处于早期,目前主要的应用场景就是各种发币,币圈也是越来越热,现在各国政府对区块链都是拥抱的态度,但是对比特币等数字火币应该还是没有想清楚如何应对和监管,各国对数字火币的态度也不尽相同。
另外一点,关于区块链去中心化这个事情,目前已经被很多人当成政治正确,一直被强调,我个人并不是很赞同。
去中心化看似是一个公平,普世的东西,但是在实际操作层面会有很多问题,比如在金融行业,金融体系对一个国家来说是命脉所在,去中心化如何监管,仅仅靠区块链的共识机制,制度设计是不是就不会出现问题?
这些都是需要回答的问题,尤其在当前的中国,中国改革开放40年来取得的经济奇迹和国家的体制有密切的关系,我们是民主集中式领导,强调中心,核心,从哲学思想上说,完全的去中心化在中国更难获得成功。总之个人认为去中心化和中心化需要有个最佳的妥协才能在现实世界发挥价值,任何技术和理念必须产生实际价值才有意义。
来源
分布式数据库
应对互联网条件下大规模数据的增删改查需求,解决传统数据库面临的通信开销大、性能差、容量可扩展性差和可靠性低的问题通信开销大:假设只有一个数据库,并且放在北京,那么纽约的用户就需要等待网络从纽约到北京的往返通信延迟
性能差:查不了——用户太多,大家都要查询数据库,自然性能就跟不上了
容量可扩展性差:存不下——数据太多,一台机子放不下,升级设备又太贵
可靠性低:丢不起——一个数据库挂掉,那么系统就宕了
区块链
在假设大部分成员可信的情况下,构建去中心化的可避免双花的数字货币
比特币是区块链的原型,最开始就是想构建一个去中心化的数字货币
在20世纪80年代后期,当密码学开始越来越广泛地使用并被理解时,许多研究人员开始尝试使用密码学来建立数字通货。这些早期的数字通货项目发行的数字货币,通常倚靠一种国家通货或像黄金一样的贵金属。
虽然这些早期的数字通货成型了,他们却是中心化的,因此,他们很容易遭受到政府和黑客的攻击。早期的数字通货使用了一个中央结算所来处理所有的定期交易,就像一个传统的银行系统。
为了坚定的抵制对手的介入,无论这些对手是合法的政府或是犯罪分子,去中心化的数字货币需要的是避免单节点攻击。比特币正是这样的系统,设计完全去中心化,不被任何中央政权或中央点控制,这样的货币系统是不会遭受攻击,也不会变得腐败。
(上述文字来自于《精通比特币》第1章 介绍 · 精通比特币-巴比特图书)
数据体系架构
数据体系架构有两个评判点,其一是数据在多节点间如何分配,其二是数据如何分片存储
数据分配
分割分配 每个节点只保存部分数据
分布式数据库:
全复制分配 每个节点都保存所有数据
混合结构 有分割,有冗余,一般都用这种区块链:全复制分配
数据分片
水平分片 对表按行拆分,每个分片都有完整字段
分布式数据库:
垂直分片 对表按列拆分,每个分片都有某字段完整数据
混合结构 有水平,有垂直区块链:无分片,所有节点都是完整数据
组件
全局数据字典 记录哪些数据存在哪个节点
分布式数据库:
全局数据库管理系统 控制总入口,管理各局部数据库
局部数据库管理系统 管理单个节点的数据库
共识机制 协调各节点更新区块链区块链: 局部数据库管理系统 管理单个节点的数据库
查询操作
- 分布式数据库:查询由全局数据库管理系统下发到各节点,结合各节点数据并计算
- 区块链:任何单点(全节点)均可独立完成查询
更新操作
在数据库中,对数据的一系列操作在逻辑上可以看成一个整体的操作,这个整体的操作就叫事务。更新操作即可以理解为由事务构成。
事务需要满足ACID特性,即Atomicity(原子性)Consistency(一致性)Isolation(隔离性)Durability(持久性)
为避免理解混乱,这里简单介绍一下其定义
Atomicity(原子性)
原子性要求每个事务中的所有操作要么全部完成,要么就像全部没有发生一样Consistency(一致性)
单点数据库的一致性:一致性确保了任何事务都会使数据库从一种合法的状态变为另一种合法的状态。
分布式数据库的一致性:在分布式系统中的所有数据备份,在同一时刻是否同样的值Isolation(隔离性)
隔离性保证了并发执行多个事务对系统的状态的影响和串行化执行多个事务对系统的状态的影响是一样的。Durability(持久性)
持久性保证了一个事务一旦被提交以后,其对系统的影响是永久的。
下面分别针对ACID特性对分布式数据库和区块链进行对比
Atomicity(原子性)
分布式数据库:由全局数据库管理系统控制,保证所有节点均完成或均失败区块链:由共识机制、分叉理论和最长链原则共同控制。
共识机制尽可能保证所有节点数据的原子性,但也会因为网络延迟和节点作恶导致部分节点更新失败。
如果出现有的节点更新数据成功,有的节点更新数据失败的情况,则发生分叉,各节点根据最长链原则更新自己的数据
Consistency(一致性)
分布式数据库:由业务层或全局数据库管理系统控制
区块链:共识机制控制各节点在一定时间窗口内“同步”更新,更新不成功即分叉
Isolation(隔离性)
分布式数据库:全局管理系统中维护事务序列号,根据序列号判定执行顺序
区块链:不存在隔离性问题。在共识机制控制下,单个时间点只有一个主体完成对区块链的更新操作,因此不存在并发事务操作。
Durability(持久性)
分布式数据库与区块链的单点都是传统的数据库,因此能保证持久性
篡改
分布式数据库:
单个节点能独立管理自己存储的数据;
已经提交的数据可以被修改或抹除,但修改或抹除会留下可删除的日志区块链:
单个节点无法独立管理数据,如果任意更新的话即成为“恶意节点”,此类节点可以通过与其他节点的数据比对发现
不可篡改,已经提交的数据会被永久保留,无法被修改或抹除
中心化控制程度
- 分布式数据库:由全局数据库管理系统统一控制,DBA(数据库管理员)有“生杀大权”;
- 区块链:去中心化,不存在DBA的角色
节点间的关系
- 分布式数据库各节点之间的关系是:信任,协作。
- 区块链各节点之间的关系是:怀疑,制约。
对比
结语
分布式数据库是在互联网背景下应对大数据量和分布式请求的需求下产生的,其在中心化控制下假设每个节点都诚实,从而由多节点共同维护一个具有逻辑整体性的分布式数据库。其主要解决的是节点宕机或节点间通信不可靠的问题
区块链由多个节点共同维护一个分布式账本,没有中心化控制机构。区块链假设任何一个单点均不可靠但系统内诚实节点占大多数,由此搭建起了一个无需信任的信任体系。其主要解决的是节点本身不可靠的问题。
区块链应该属于分布式数据库的一种,它以牺牲一致性为代价把CAP定理中的Availability(可用性)和Partition tolerance(分区容错性)落实到了极致。当然,虽然区块链读取速度很快,但是其写入速度一直有严重瓶颈,如何在多方需求间找到均衡点,应该就是区块链创业者的使命了
参考文献
https://sq.163yun.com/ask/question/126512025407713280
https://zhuanlan.zhihu.com/p/33995237