SQL 和 NoSQL 的区别

作者: 大大灰灰狼 | 来源:发表于2016-03-15 00:02 被阅读8645次

概念

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的。

相关文章

  • SQL 和 NoSQL 的区别

    https://www.jianshu.com/p/b32fe4fe45a3 http://blog.51cto....

  • SQL 和 NoSQL 的区别

    概念 SQL (Structured Query Language) 数据库,指关系型数据库 - 主要代表:SQL...

  • NoSQL的了解

    NoSQL简介和基础概念 NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,指的是非...

  • 大数据开发系列之Redis

    nosql和sql的区别 Redis概念 Redis特点 Redis的优势 Redis的适用场景 Redis的安装...

  • 【DB 精选】什么是 NoSQL?

    本文开始之前,提出几个问题:① NoSQL 是什么,能解决什么问题;② NoSQL 与 SQL 的区别;③ 目前有...

  • mongodb读书笔记

    一、NoSQL NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。 NoSQL,指...

  • SQL与NOSQL区别

    云计算背后的秘密:NoSQL诞生的原因和优缺点 我本来一直觉得NoSQL其实很容易理解的,我本身也已经对NoSQL...

  • MongoDB学习(一)

    什么是NoSQL? NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。 NoSQL...

  • 架构师之路-互联网架构模板

    NoSql不是No Sql,而是Not Only SQL,即NoSql是SQL的补充。 NoSql发展到一定规模后...

  • Redis在windows安装启动

    Redis在windows安装启动。简介一 Redis属于NoSQL,与SQL区别 适用场景不同:sql数据库适合...

网友评论

本文标题:SQL 和 NoSQL 的区别

本文链接:https://www.haomeiwen.com/subject/oguflttx.html