SQL的全称是Structured Query Language,结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库。
SQL数据库指关系型数据库,如MYSQL、oracle等,NoSQL(not only SQL)数据库指非关系型数据库,如MangoDB、Redis等。
两者主要有如下一些区别:
1.类型
SQL数据库主要称为关系数据库; 而NoSQL数据库主要称为非关系数据库或分布式数据库。
2.语言
SQL数据库定义和操作基于数据的结构化查询语言(SQL)。从侧面看这种语言是非常强大的。SQL是最通用和最广泛使用的选项之一,使其成为安全的选择,尤其适用于复杂的查询。但从另一方面来说,它可能是限制性的。SQL要求您在使用之前使用预定义模式来确定数据的结构。此外,您的所有数据都必须遵循相同的结构。这可能需要大量的前期准备,这意味着结构的变化既困难又对整个系统造成破坏。
NoSQL数据库具有非结构化数据的动态模式。数据以多种方式存储,这意味着它可以是面向文档,面向列,基于图形或组织为KeyValue存储。这种灵活性意味着可以在没有首先定义结构的情况下创建文档。每个文档也可以有自己独特的结构。语法因数据库而异,您可以随时添加字段。
3.可伸缩性
SQL数据库都是可垂直扩展的。可以通过增加RAM,CPU或SSD等功能来增加单个服务器的负载。NoSQL数据库可以横向扩展。可以通过分片或在NoSQL数据库中添加更多服务器来处理更多流量,因此NoSQL数据库更适用于大数据存储中。
4.结构
SQL数据库是基于表的,另一方面NoSQL数据库是键值对,基于文档的,图形数据库或宽列存储。这使得关系SQL数据库成为需要多行事务的应用程序(如会计系统)或为关系结构构建的遗留系统的更好选择。
5.遵循的属性
SQL数据库遵循ACID属性(atomicity原子性, consistency一致性, isolation隔离性和durability持久性),而NoSQL数据库遵循Brewers CAP定理(Consistency一致性,Availability可用性和Partitiontolerance分区容差)。
ACID和CAP具体介绍可以参考https://cloud.tencent.com/developer/article/1165624
6.支持
来自其供应商的所有SQL数据库都提供了很好的支持。此外,还有很多独立咨询可以帮助使用SQL数据库进行大规模部署,但对于某些NoSQL数据库,仍然需要依赖社区支持,并且只有有限的外部专家可用于设置和部署大规模NoSQL部署。
SQL数据库的一些示例包括PostgreSQL,MySQL,Oracle和Microsoft SQL Server。NoSQL数据库示例包括Redis,RavenDB Cassandra,MongoDB,BigTable,HBase,Neo4j和CouchDB。
7.适用场景
适合使用 SQL 开发的项目:
- 数据库模式,结构可以预先规定的,或者可以相对固定的项目
- 要求数据一致性
- 具有良好的开发者经验和技术支持的标准的成熟技术
适合使用 NoSQL 开发的项目:
- 不相关,不确定和逐步发展的数据需求
- 更简单或者更宽松的能够快速开始编程的项目
- 速度和可扩展性至关重要的