SQL和NoSQL对比
本文最后更新于:8 个月前
SQL和NoSQL对比
一、概念解析
- SQL,全称:Structured Query Language(结构化查询语言),本质是一门数据库语言,这里用来代表「关系数据库」
- NoSQL,代表「非关系数据库」,对不同于传统的关系数据库的数据库管理系统的统称
下面以 MySQL 和 MongoDB 中的术语为代表,对比两种类型数据库的术语差异
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
column | field | 数据字段/域 |
row | document | 数据记录行/文档 |
index | index | 索引 |
primary_key | _id | 主键 |
table joins | populate | 表连接 |
两者最主要的区别是:数据的组织形式
- SQL关系型数据库,采用表格的形式组织数据,数据之间存在明确的关系,结构清晰。适合大规模事务性应用。
- NoSQL非关系型数据库,使用不同的数据结构来组织数据,包括:文档、键值对、图形等,数据之间的关系不如前者明确。优势在于处理海量数据和高并发访问。
所以,SQL适用于数据结构简单明确的场景;NoSQL适用于数据结构较复杂或不能一次性明确、并且需要高效处理的场景。
二、SQL
1、数据库代表
- SQL server
- MySQL
- Oracle
2、优点
- (1)事务一致性
- (2)几乎没有数据冗余
3、缺点
(1)读写性能瓶颈,系统逻辑比较复杂,当数据量很大时,为了维护一致性,容易发生死锁等并发问题,读写速度下滑严重
(2)表结构在定义之后很进行较大的更新
数据库中的数据之间存在着复杂的关联关系,例如外键约束、索引等,修改一个表的结构可能会对其他表的结构产生影响。不仅需要修改本表的结构,还需要对受到影响的其他表进行相应的修改,这些修改需要非常小心谨慎地进行,否则会引起数据异常等问题。
(3)不适合大数据量、高并发场景,读写和查询效率都较低
三、NoSQL
1、数据库代表
- MongoDB(面向文档的数据库)
- Redis(永久性键值数据库)
- HBase(面向列的数据库)
2、优点
不同类型的非关系型数据库有各自突出的优点
- key-value键值对数据库,高性能的并发读写,如Redis
- 面向文档数据库,海量数据下的快速查询效率,如MongoDB
- 分布式数据库,支持分布式扩展,如HBase
除此之外,还有一些共性优点:
- 支持的储存格式丰富,而SQL只支持基础类型
- 读写性能,NoSQL数据库不使用SQL语言,所以不经过SQL层解析
- 横向扩展性,很多支持集群部署
3、缺点
- 不支持复杂的事务
4、适用场景
(1)数据库表结构经常变化,eg: 电商产品,属性会经常发生变化
(2)字段包含复杂类型,因为NoSQL可以使用JSON方式储存,所以对复杂对象提供了原生的支持,效率更高
(3)高并发数据库请求 + 对数据一致性没有严格追求
(4)海量数据
四、MongoDB
特点
- 灵活的模型,适合迭代开发,数据模型多变的情况
- JSON数据结构,读写简单,支持原生复杂对象
- 学习成本低、文档完善
适用场景
(1)应用不需要事务和复杂的join连接操作
(2)新应用,需求会变,数据模型无法一次性定型
(3)需要大量的文本查询、地理位置查询
参考链接
SQL和NoSQL对比
http://timegogo.top/2023/05/10/后端/SQL与NoSQL对比/