SQL 和 NoSQL 的区别

一、概念

  SQL (Structured Query Language) 数据库,指关系型数据库。主要代表:SQL Server,Oracle,MySQL(开源),PostgreSQL(开源)。

  NoSQL(Not Only SQL)泛指非关系型数据库。主要代表:MongoDB,Redis,CouchDB。

二、区别

1、存储方式

  SQL数据存在特定结构的表中;而NoSQL则更加灵活和可扩展,存储方式可以省是JSON文档、哈希表或者其他方式。SQL通常以数据库表形式存储数据。举个栗子,存个学生借书数据:

而NoSQL存储方式比较灵活,比如使用类JSON文件存储上表中熊大的借阅数据:

2、表/数据集合的数据的关系

  在SQL中,必须定义好表和字段结构后才能添加数据,例如定义表的主键(primary key),索引(index),触发器(trigger),存储过程(stored procedure)等。表结构可以在被定义之后更新,但是如果有比较大的结构变更的话就会变得比较复杂。在NoSQL中,数据可以在任何时候任何地方添加,不需要先定义表。例如下面这段代码会自动创建一个新的"借阅表"数据集合:

NoSQL也可以在数据集中建立索引。以MongoDB为例,会自动在数据集合创建后创建唯一值_id字段,这样的话就可以在数据集创建后增加索引。

从这点来看,NoSQL可能更加适合初始化数据还不明确或者未定的项目中。

3、外部数据存储

  SQL中如何需要增加外部关联数据的话,规范化做法是在原表中增加一个外键,关联外部数据表。例如需要在借阅表中增加审核人信息,先建立一个审核人表:

再在原来的借阅人表中增加审核人外键:

这样如果我们需要更新审核人个人信息的时候只需要更新审核人表而不需要对借阅人表做更新。而在NoSQL中除了这种规范化的外部数据表做法以外,我们还能用如下的非规范化方式把外部数据直接放到原数据集中,以提高查询效率。缺点也比较明显,更新审核人数据的时候将会比较麻烦。

4、SQL中的JOIN查询

  SQL中可以使用JOIN表链接方式将多个关系数据表中的数据用一条简单的查询语句查询出来。NoSQL暂未提供类似JOIN的查询方式对多个数据集中的数据做查询。所以大部分NoSQL使用非规范化的数据存储方式存储数据。

5、数据耦合性

  SQL中不允许删除已经被使用的外部数据,例如审核人表中的"熊三"已经被分配给了借阅人熊大,那么在审核人表中将不允许删除熊三这条数据,以保证数据完整性。而NoSQL中则没有这种强耦合的概念,可以随时删除任何数据。

6、事务

  SQL中如果多张表数据需要同批次被更新,即如果其中一张表更新失败的话其他表也不能更新成功。这种场景可以通过事务来控制,可以在所有命令完成后再统一提交事务。而NoSQL中没有事务这个概念,每一个数据集的操作都是原子级的。

7、增删改查语法

8、查询性能

  在相同水平的系统设计的前提下,因为NoSQL中省略了JOIN查询的消耗,故理论上性能上是优于SQL的。

三、补充

  目前许多大型互联网项目都会选用MySQL(或任何关系型数据库) + NoSQL的组合方案。

关系型数据库适合存储结构化数据,如用户的帐号、地址:

  1)这些数据通常需要做结构化查询(嗯,好像是废话),比如join,这时候,关系型数据库就要胜出一筹

  2)这些数据的规模、增长的速度通常是可以预期的

  3)事务性、一致性

NoSQL适合存储非结构化数据,如文章、评论:

  1)这些数据通常用于模糊处理,如全文搜索、机器学习

  2)这些数据是海量的,而且增长的速度是难以预期的,

  3)根据数据的特点,NoSQL数据库通常具有无限(至少接近)伸缩性

  4)按key获取数据效率很高,但是对join或其他结构化查询的支持就比较差

  基于它们的适用范围不同,目前主流架构才会采用组合方案,一个也不能少。目前为止,还没有出现一个能够通吃各种场景的数据库,而且根据CAP理论,这样的数据库是不存在的。

转 :https://www.cnblogs.com/jeakeven/p/5402095.html

原文地址:https://www.cnblogs.com/Tanghongchang/p/9352920.html

时间: 2024-11-06 16:02:24

SQL 和 NoSQL 的区别的相关文章

数据库系统原理:SQL与NoSQL的比较

SQL和NoSQL的区别 SQL NoSQL 采用关系型的表来存储数据,具有严格的数据模式约束,因此存储数据很难出错 采用类JSON格式的文档来存储键值对信息,更加灵活,但也会导致数据不一致问题的发生 使用表之前需要先定义表的模式 存储数据不需要特定的模式 使用规范化来减少数据冗余 使用非规范化的标准存储信息,以保证一个文档中包含一个条目的所有信息 支持JOIN操作,使用一条SQL语句从多张表中取出相关的数据 不支持JOIN操作 满足数据完整性约束 不满足完整性约束,允许数据不用通过验证就可以存

SQL与NoSQL(关系型与非关系型)数据库的区别

永远正确的经典答案依然是:具体问题具体分析. 数据表VS.数据集 关系型和非关系型数据库的主要差异是数据存储的方式.关系型数据天然就是表格式的,因此存储在数据表的行和列中.数据表可以彼此关联协作存储,也很容易提取数据.与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起.非关系型数据通常存储在数据集中,就像文档.键值对或者图结构.你的数据及其特性是选择数据存储和提取方式的首要影响因素. 预定义结构VS.动态结构 关系型数据通常对应于结构化数据,因为数据表都有预定义好的结构(列的

SQL VS NoSQL

(关系型与非关系型)数据库的区别: 关系型和非关系型数据库的主要差异是数据存储的方式 1.1 数据表 VS 数据集 关系型数据天然就是表格式的,因此存储在数据表的行和列中.数据表可以彼此关联协作存储,也很容易提取数据.与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起.非关系型数据通常存储在数据集中,就像文档.键值对或者图结构 1.2 预定义结构 VS 动态结构 关系型数据通常对应于结构化数据,因为数据表都有预定义好的结构(列的定义),结构描述了数据的形式和内容.这一点对数据

大数据入门级学习:SQL与NOSQL数据库

这几年的大数据热潮带动了一激活了一大批hadoop学习爱好者.有自学hadoop的,有报名培训班学习的.所有接触过hadoop的人都知道,单独搭建hadoop里每个组建都需要运行环境.修改配置文件测试等过程.对于我们这些入门级新手来说简直每个都是坑.国内的发行版hadoop那么多,似乎都没有来填这样的坑?不知道是没法解决,还是没有想到?安装运行环境这样的坑,那些做国产大数据底层开发的,如果不能解决这个问题的话,我觉得不是一个合格的大数据底层开发机构.不过比较幸运的是,三月的时候申请拿到了一个DK

SQL or NoSQL? 从存储的架构演进看数据库选型

一.前言 你是否在为系统的数据库来一波大流量就几乎打满CPU,日常CPU居高不下烦恼?你是否在各种NoSQL间纠结不定,到底该选用哪种最好?今天的你就是昨天的我,这也是写这篇文章的初衷. 这篇文章是我好几个月来一直想写的一篇文章,也是一直想学习的一个内容,作为互联网从业人员,我们要知道关系型数据库(MySQL.Oracle)无法满足我们对存储的所有要求,因此对底层存储的选型,对每种存储引擎的理解非常重要.同时也由于过去一段时间的工作经历,对这块有了一些更多的思考,想通过自己的总结把这块写出来分享

SQL vs NoSQL 没有硝烟的战争!

声明:本文译自SQL vs NoSQL The Differences,如需转载请注明出处. SQL(结构化查询语言)数据库作为一个主要的数据存储机制已经超过40个年头了.随着web应用和像MySQL.PostgreSQL和SQLite这些开源项的兴起,SQL使用量大大增加. NoSQL数据库在20世纪60年代就已经出现了,但最近因为MongoDB.CouchDB,Redis和Apache Cassandra等才受到广泛的关注. 你会发现很多教程都会解释如何根据你的兴趣选择去使用SQL还是NoS

SQL VS NoSQL 如何选择数据库

在前一篇文章中我们主要的讨论了SQL与NoSQL数据库之间的主要的差别.接下来,我们将会利用上一篇中的知识来确定在特定的场景中如何确定比较好的选择. 首先我们先来总结一下: SQL数据库: ?使用表存储相关的数据 在使用表之前需要先定义标的模式 鼓励使用规范化来减少数据的冗余 支持使用JION操作,使用一条SQL语句从多张表中取出相关的数据 需要满足数据完整性约束规则 使用事务来保证数据的一致性 能够大规模的使用 使用强大的SQL语言进行查询操作 提供大量的支持,专业技能和辅助工具 NoSQL数

SQL与NoSQL的CRUD对比

SQL与NoSQL的CRUD对比 flyfish 2015-7-21 Create, Read, Update and Delete (CRUD) SQL方式 查 SELECT 列名称 FROM 表名称 SELECT * FROM 表名称 SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 增 INSERT INTO 表名称 VALUES (值1, 值2,....) INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

sql和nosql区别

数据库分类 一,sql数据库:mysql sql弊端: 1,很多情况下,及时存取,并不是必要的. 2,特别多的事物需求 3,消耗性能. 二,nosql数据库:redis,mongodb 放弃了3点 1,实时一致性. 2,事物 3,多表联合查询. mongodb特色1,无数据结构限制 a,没有表结构的概念,每条记录可以有完全不同的结构b,业务开发方便快捷.c,sql数据库需要实现定义表结构再使用. 2,完全的索引支持单件索引,数组索引,全文索引,地理位置索引 3,方便扩展复制集保证数据安全分片扩展