---
url: /doc/Databases/xq9c73qe/index.md
---
> 著作权归 JavaGuide(javaguide.cn)所有 基于 MIT 协议 原文链接：https://javaguide.cn/database/nosql.html

## Cue

* NoSQL 是什么？
* SQL 和 NoSQL 的区别？
* NoSQL 数据库的优势？
* NoSQL 数据库的类型？
* 举例说明 NoSQL 数据库的应用场景？
* 解释键值数据库的特点？
* 对比文档数据库和关系数据库的数据存储方式？
* 图形数据库的典型使用案例有哪些？
* 宽列存储数据库的优势？

## Main

### NoSQL 是什么？

NoSQL 是非关系型数据库的统称，主要针对键值、文档、图形等非传统结构化数据存储，天生支持分布式，具备数据冗余和分片特性，旨在提供可扩展、高可用、高性能的数据存储方案。==NoSQL 数据库可以存储关系型数据==，只是存储方式与关系型数据库不同。常见的 NoSQL 数据库有 HBase、Cassandra、MongoDB、Redis。

![img](./02-NoSQL.assets/sql-nosql-tushi.png)

### SQL 和 NoSQL 的区别

| 特性         | SQL 数据库                                                 | NoSQL 数据库                                                                                                 |
| ------------ | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| 数据存储模型 | 结构化存储，有固定行和列的表格                             | 非结构化存储，如文档型的 JSON 文档、键值型的键值对、宽列型的动态列表、图型的节点和边                         |
| 发展历程     | 开发于 1970 年代，注重减少数据重复                         | 开发于 2000 年代后期，注重提升可扩展性、降低大规模数据存储成本                                               |
| 例子         | Oracle、MySQL、Microsoft SQL Server、PostgreSQL 等         | 文档：MongoDB、CouchDB，键值：Redis、DynamoDB，宽列：Cassandra、 HBase，图表：Neo4j、 Amazon Neptune、Giraph |
| ACID 属性    | 提供 ACID 属性                                             | 通常不支持 ACID 事务，为了可扩展、高性能部分如 MongoDB 有支持但与 MySQL 有区别                               |
| 性能         | 性能依赖磁盘子系统，需优化查询、索引和表结构               | 性能由底层硬件集群大小、网络延迟以及调用应用程序等因素决定                                                   |
| 扩展         | 通过垂直扩展（性能更强的服务器）或读写分离、分库分表等方式 | 通过横向扩展（增加服务器，基于分片机制）实现                                                                 |
| 用途         | 用于普通企业级项目数据存储                                 | 用途广泛，如图数据库用于分析关系、键值数据库用于处理大量数据                                                 |
| 查询语法     | 使用结构化查询语言                                         | 数据访问语法因数据库而异                                                                                     |

### NoSQL 数据库的优势

* 灵活性：提供灵活架构，适合快速迭代开发，是半结构化和非结构化数据的理想选择。
* 可扩展性：通过分布式硬件集群横向扩展，而非纵向添加昂贵服务器。
* 高性能：针对特定数据模型和访问模式优化，相比关系数据库性能更高。
* 强大功能：提供针对各自数据模型构建的强大 API 和数据类型。

### NoSQL 数据库的类型

* 键值数据库：简单灵活，每个项目含键和值，应用可完全控制值内容，如 Redis、DynamoDB。
* 文档数据库：数据存储在类似 JSON 对象的文档中，字段值类型多样，结构与代码中对象一致，如 MongoDB。
* 图形数据库：适合构建和运行与高度连接数据集的应用，如社交网络、推荐引擎，如 Neo4j、Giraph。
* 宽列数据库：适合存储大量数据，如 Cassandra、HBase。

![NoSQL 数据模型](./02-NoSQL.assets/types-of-nosql-datastores.png)

## Summary

NoSQL 数据库作为非关系型数据库，与传统 SQL 数据库在存储模型、发展历程、ACID 属性、性能、扩展性、用途和查询语法等方面存在显著差异。NoSQL 数据库具有灵活性、可扩展性、高性能和强大功能等优势，主要分为键值、文档、图形和宽列四种类型，适用于不同应用场景，满足现代应用程序对数据存储的多样化需求。

参考：

NoSQL 是什么？- MongoDB 官方文档：https://www.mongodb.com/zh-cn/nosql-explained

什么是 NoSQL? - AWS：https://aws.amazon.com/cn/nosql/

NoSQL vs. SQL Databases - MongoDB 官方文档：https://www.mongodb.com/zh-cn/nosql-explained/nosql-vs-sql
