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

java并发编程实战:第十六章----Java内存模型
一、什么是内存模型,为什么要使用它 如果缺少同步,那么将会有许多因素使得线程无法立即甚至永远看到一个线程的操作结果 编译器把变量保存在本地寄存器而不是内存中编译器中生成的指令顺序,可以与源代码中的顺序不同处理器采用乱序或并行的方…

子div超出父div_菜鸟学 react props 子到父
我们都知道在 vue 中可以使用事件将子组件的数据传递给父组件,也可以通过拿到父组件的实例直接调用父组件的方法先来个子组件class ChildCom extends React.Component {constructor(props) {super(props)this.state {msg: 这是子元素的数据 hello ChildCom}}sendCh…

Linux笔记:使用Vim编辑器
Vi编辑器是Unix系统上早先的编辑器,在GNU项目将Vi编辑器移植到开源世界时,他们决定对其作一些改进。 于它不再是以前Unix中的那个原始的Vi编辑器了,开发人员也就将它重命名为Vi improved,或Vim。 为了方便使用,几乎所有…

实现中心钱包系统
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 很多业务上去中心化的应用上,需要很多中心化的管理,例如交易所,每秒交易量非常大,这都是 比特币&…

南大算法设计与分析课程OJ答案代码(5)--割点与桥和任务调度问题
问题 A: 割点与桥 时间限制: 1 Sec 内存限制: 5 MB提交: 475 解决: 34提交 状态 算法问答 题目描述 给出一个无向连通图,找到所有的割点和桥输入 第一行:点的个数,如果点个数是n,他们的编号为0 ~ n-1 余下的行:每行…

小程序生命周期_来,简单说说小程序的生命周期?
简单说说小程序的生命周期?在小程序中生命周期分为三大类应用生命周期页面生命周期组件生命周期应用生命周期onLaunch(){ console.log(onLaunch监听小程序初始化);}onShow(){ console.log(onShow监听小程序显示);}onHide() { console.log(onLaunch监听小程序隐藏);}页面生命周…

模板引擎:VelocityFreeMarker(转)
Velocity,名称字面翻译为:速度、速率、迅速,用在Web开发里,用过的人可能不多,大都基本知道和在使用Struts,到底Velocity和Struts(Taglib和Tiles)是如何联系?在技术上Velocity要比Struts Struts(…

去中心化的尺度
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 摘要:有些人因为其底层技术而对区块链感兴趣, 另外一些人对它的商业可能性着迷, 还有一些人关心它的社会和政治影…

在tomcat中用jndi配置数据源启动java web程序
1.在web.xml中添加: <resource-ref> <res-ref-name>jdbc/MTSDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> 2.在tomcat的context.xml中配置数据源:…
centOS7.4服务器 yum安装 搭建lamp环境
// 红色加粗是linux命令安装gcc和gcc-cyum -y install gcc gcc-cyum list httpd*安装apcheyum -y install httpd.x86_64 httpd-devel.x86_64 httpd-tools.x86_64开启服务/bin/systemctl start httpd.service停止服务/bin/systemctl stop httpd.service设置Apache服务开机启动sy…

好想学python怎么猜人_学手艺我好想学个手艺哦可是脑子怎么想也想 – 手机爱问...
2009-03-25学点东西学什么好呢?我今年快40了建议:你以前一直当销售,销售这个职业最大的特点就是说、说、说,跟人打交道最多。那么:(1)如果你厌倦了跟人打交道,厌烦了每天不停跟陌生人说说说的,建…

用Python从零开始创建区块链
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 前言 如果你还没有听说过 3 点钟区块链群,说明你还不是链圈的人;如果你还没有加入 3 点钟区块链群,说明你还不是…

动态添加跨行表格_学会这2招,轻松搞定数据透视表动态更新,效率猛增一倍...
私信回复关键词【福利】,获取丰富办公资源,助你高效办公早下班!Hello,大家好,我是最近在研究数据透视表的小爽~最近,我收到了一个学员的求助:简单归纳一下,这个问题就是:…

alpha阶段个人总结(201521123031林庭亦)
一、个人总结 第一部分:硬的问题 第二部分:软的问题,在成长路上学到了什么? 1 当你看到不靠谱的设计、糟糕的代码、过时的文档和测试用例的时候,不要想 “既然别人的代码已经这样了,我的代码也可以随便一点…

python统计列表内元素个数
代码如下: list01 [a,b,c,a,c] set01 set(list01)print(set01)dict01 {}for item in set01:dict01.update({item:list01.count(item)}) print(dict01)结果: c, b, a} {c: 2, b: 1, a: 2}转载于:https://www.cnblogs.com/zhangyux/p/5999109.html

比特币的货币属性是什么?
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 作为比特币被设计之初的用意就是作为交易的一种支付手段。作为全新的货币形式,比特币本身的性质就是其去中心化的特性能够和传统的货币很…

病虫害模型算法_基于深度学习的目标检测算法综述
sigai 基于深度学习的目标检测算法综述导言目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一。由于各类物体有不同的外观,形状,姿态,加上…

windows 常用命令
一. 工具类 calc 启动计算器 mspaint 画图板 write 打开写字板 notepad 打开记事本 mstsc 远程桌面连接 regedt32 注册表编辑器 osk 打开屏幕键盘 magnify 放大镜 eudcedit 造字程序二. 系统和用户类 compmgmt.msc 计算机管理 devmgmt.m…

良好的用户体验应该...
这篇文章只有一个图片,原创的,谢谢! 转载于:https://www.cnblogs.com/saper/p/9064601.html

区块链知识点简解
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。 分布式存储:是一种数据存储技术,通…

laravel和dingoapi的结合使用
dingoapi是一个laravel的开源插件,可以在github上搜索到,现在在做一个项目,项目中总是会有后端跟前端的json数据交互,而这个dingoapi为json交互提供了很大的便利。 先安装dingoapi 1、在composer.json中的require中添加"ding…

uc的剪切板能关掉吗_关掉网络游戏,小孩就有美好的未来吗?
“关掉,关掉!一定要关掉!再不关掉那些网络游戏,小孩哪有美好的未来,哪有美好的前程,祖国哪有栋梁之才。”最近,一条魔性的小视频在网上刷屏。这条小视频里,一个小女孩用朗诵腔调大喊…

2017-2018-2 20165236 实验四《Android开发基础》实验报告
2017-2018-2 20165236 实验四《Android开发基础》实验报告 一、实验报告封面 课程:Java程序设计 班级:1652班 姓名:郭金涛 学号:20165236 指导教师:娄嘉鹏 实验日期&a…

区块链4.0DexChain是什么?
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 为了更好的理解Eos-DexChain,我们了解一下区块链4.0的标准。 1)零成本发token 零成本上交易所流通 3)去中心化交易所会借助…

Linux内核情景分析之异常访问,用户堆栈的扩展
情景假设:在堆内存中申请了一块内存,然后释放掉该内存,然后再去访问这块内存。也就是所说的野指针访问。当cpu产生页面错误时,会把失败的线性地址放在cr2寄存器.线性地址缺页异常的4种情况1.如果cpu访问的行现地址在内核态,那么很可能访问的是…

系统性能测试方案
转载:http://www.cnblogs.com/yunman/articles/5482134.html 1引言 1.1编写目的 编写本方案的目的是用于指导XXXX系统的性能测试,主要从测试环境、测试工具、测试策略、测试具体执行方法、任务与进度表等事先计划和设计。 1.2适用范围 XXXX系统性能测试组 XXXX系统开…

python跨行字符串 变量_在Python中有没有在多行字符串中使用变量的方法?
所以我把这个作为邮件发送脚本的一部分:try:content ("""From: Fromname To: Toname MIME-Version: 1.0Content-type: text/htmlSubject: testThis is an e-mail message to be sent in HTML formatThis is HTML message.This is headline."&q…

Python中的pickle模块
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 Pickle模块的作用 Pickle模块用于将python对象序列化为字节流,可存储在文件或数据库中,也可同通过网络进行传输。使用反序列…

pytorch python区别_pytorch源码解析:Python层 pytorchmodule源码
尝试使用了pytorch,相比其他深度学习框架,pytorch显得简洁易懂。花时间读了部分源码,主要结合简单例子带着问题阅读,不涉及源码中C拓展库的实现。一个简单例子实现单层softmax二分类,输入特征维度为4,输出为…

在vue中使用babel-polyfill
在 Vue.js项目中使用Vuex,Vuex 依赖 Promise,所以如果你的浏览器没有实现 Promise (比如 IE),那么就需要使用一个 polyfill 的库 我们可以通过babel-profill转译 1、安装 npm install --save-dev babel-polyfill 2、在main.js中引入 import b…