(大鱼)数据库和区块链的异同

链接:2017-04-11 大鱼(Bigfish) 数据库和区块链的异同(从零开始学区块链 126)
作者:大鱼(Bigfish)

前几日有好友询问我关于数据库和区块链的异同,我觉得这个问题非常好,今天刚好有空把当时的聊天情况回忆了一下,可能很多人都有这个困惑,今天就结合相关资料来聊聊,本文存在很多个人倾向性意见,仅供参考。

大部分关于这种命题,一般会用比较两项技术的优缺点来进行,我认为这是和稀泥的方法,首先我认为把区块链和数据库作比较是毫无意义的,这根本就是两种完全不同的技术,应用场景、设计思想、实现方式、业务模型都完全不同;唯一能沾上边的是现在流行的k/v数据库,在数据结构上应用了类似默克尔树和区块链部分结构类似,如果仅凭这一点就说两则类似是不负责任的,首先“树”是基础数据结构的一种,几乎稍微复杂一点软件系统都会使用到“树”,我正在打字的输入法都是通过“树”实现文字索引的。

为了说清楚这个问题,还是分别谈谈关系型数据库和NOSQL非关系型数据库的特点,就知道区块链到底是什么技术了

关系型数据库

(一)首先数据库的诞生非常久远,现在所说的数据库大部分特指”关系型数据库“。关系模型 是在1970年由IBM的研究员E.F.Codd博士首先提出的,在之后的几十年中,关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型。

简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织(简称ER模型)

关系型数据库的特点:

  • 容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解
  • 使用方便:通用的SQL语言使得操作关系型数据库非常方便;
  • 易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率
  • 操作完备:支持完备的数据操作(增加、删除、修改、查询);复杂的关系型数据库还支持存储过程和事务;

由以上内容可见区块链技术和关系型数据库几乎完全风马牛不相及,光是ER模型就够区块链吃一壶的了,另外区块链强调的是不可篡改和存证特性,没有删除和修改操作

(一)另外有一个误区是,数据库容易遭受篡改,诚然相比区块链这种基于密码学的数据记录方式来说,数据库是容易遭受人为恶意篡改的,但是,如果熟悉关系型数据库的人都知道(DBA),如果严格按照第三范式设计的关系型数据库在保障数据一致性上具有天然的优势,从原理上讲完全可以通过关系型数据库模拟出类似比特币的UTXO模型,经过严格设计的关系型数据库对于部分数据的篡改是可以察觉和审计的。数据库技术虽然很老了,但是目前看来还是不可被代替的。

注:由于以java语言为代表的ORM开发模型的普及弱化了关系型数据库功能,在应用层维护数据关系造成大批持久层数据库安全问题,这不能怪数据库。

NOSQL非关系型数据库

NoSQL一词首先是Carlo Strozzi在1998年提出来的,指的是他开发的一个没有SQL功能,轻量级的,开源的关系型数据库。这个定义跟我们现在对NoSQL的定义有很大的区别,它确确实实字如其名,指的就是“没有SQL”的数据库。但是NoSQL的发展慢慢偏离了初衷,我们要的不是“no sql”,而是“no relational”,也就是我们现在常说的非关系型数据库了。

2009年初,Johan Oskarsson举办了一场关于开源分布式数据库的讨论会(后来简称NoSQL大会),Eric Evans在这次讨论中再次提出了NoSQL一词,用于指代那些非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统(数据库事务必须具备ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性)。Eric Evans使用NoSQL这个词,并不是因为字面上的“没有SQL”的意思,他只是觉得很多经典的关系型数据库名字都叫“**SQL”,所以为了表示跟这些关系型数据库在定位上的截然不同,就是用了“NoSQL“一词。

非关系型数据库提出另一种理念,例如,以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,用户可以根据需要去添加自己需要的字段,这样,为了获取用户的不同信息,不需要像关系型数据库中,要对多表进行关联查询。仅需要根据id取出相应的value就可以完成查询。但非关系型数据库由于很少的约束,他也不能够提供像SQL所提供的where这种对于字段属性值情况的查询。并且难以体现设计的完整性。他只适合存储一些较为简单的数据,对于需要进行较复杂查询的数据,SQL数据库显的更为合适。

这些数据库中,其实实现大部分都比较简单,除了一些共性外,很大一部分都是针对某些特定的应用需求出现的,因此,对于该类应用,具有极高的性能。依据结构化方法以及应用场合的不同,主要分为以下几类

  1. 面向高性能并发读写的key-value数据库:key-value数据库的主要特点即使具有极高的并发读写性能,Redis,Tokyo Cabinet,Flare就是这类的代表。
  2. 面向海量数据访问的面向文档数据库:这类数据库的特点是,可以在海量的数据中快速的查询数据,典型代表为MongoDB以及CouchDB。
  3. 面向可扩展性的分布式数据库:这类数据库想解决的问题就是传统数据库存在可扩展性上的缺陷,这类数据库可以适应数据量的增加以及数据结构的变化。

看过了NOSQL的特点,最有意思的ACID原则,其实仔细分析区块链还是遵循ACID原则的,相信不用我多说,朋友们自己就应该有结论了,区块链真的完全也不像NOSQL,当然如果硬要说区块链是为不可修改存证设计的一种特殊的分布式NOSQL数据库,我也无话可说(珍惜生命远离杠头)

理解了数据库和区块链的定位其实为我们设计业务和应用很有帮助,区块链真的不是万能的,还是“上帝的归上帝,凯撒的归凯撒”的好,未来一定是结合两者(或RDS、NOSQL、区块链三者)优势的应用才有真正价值

提个简单的醒,供大家思考,如果使用区块链来替代传统的文件日志或数据库日志会是什么样的呢

编者注:如,比特众享PeerSafe的ChainSQL产品。

    原文作者:大圣2017
    原文地址: https://www.jianshu.com/p/6bd757ef228d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞