链客,专为开发者而生,有问必答!java
此文章来自区块链技术社区,未经容许拒绝转载。sql
前几日有好友询问我关于数据库和区块链的异同,我以为这个问题很是好,今天恰好有空把当时的聊天状况回忆了一下,可能不少人都有这个困惑,今天就结合相关资料来聊聊,本文存在不少我的倾向性意见,仅供参考。
大部分关于这种命题,通常会用比较两项技术的优缺点来进行,我认为这是和稀泥的方法,首先我认为把区块链和数据库做比较是毫无心义的,这根本就是两种彻底不一样的技术,应用场景、设计思想、实现方式、业务模型都彻底不一样;惟一能沾上边的是如今流行的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数据库显的更为合适。
这些数据库中,其实实现大部分都比较简单,除了一些共性外,很大一部分都是针对某些特定的应用需求出现的,所以,对于该类应用,具备极高的性能。依据结构化方法以及应用场合的不一样,主要分为如下几类:spa
面向高性能并发读写的key-value数据库:key-value数据库的主要特色即便具备极高的并发读写性能,Redis,Tokyo Cabinet,Flare就是这类的表明。
面向海量数据访问的面向文档数据库:这类数据库的特色是,能够在海量的数据中快速的查询数据,典型表明为MongoDB以及CouchDB。
面向可扩展性的分布式数据库:这类数据库想解决的问题就是传统数据库存在可扩展性上的缺陷,这类数据库能够适应数据量的增长以及数据结构的变化。
看过了NOSQL的特色,最有意思的ACID原则,其实仔细分析区块链仍是遵循ACID原则的,相信不用我多说,朋友们本身就应该有结论了,区块链真的彻底也不像NOSQL,固然若是硬要说区块链是为不可修改存证设计的一种特殊的分布式NOSQL数据库,我也无话可说(珍惜生命远离杠头)理解了数据库和区块链的定位其实为咱们设计业务和应用颇有帮助,区块链真的不是万能的,仍是“上帝的归上帝,凯撒的归凯撒”的好,将来必定是结合二者(或RDS、NOSQL、区块链三者)优点的应用才有真正价值!提个简单的醒,供你们思考,若是使用区块链来替代传统的文件日志或数据库日志会是什么样的呢?