NoSQL 是一个用于描述高性能的非关系数据库的术语。NoSQL 数据库利用各种数据模型,包括文档、图形、键值和列式。NoSQL 数据库因具备开发简便性、可扩展的性能、高可用性以及恢复能力而受到广泛认可。下面提供了多种资源,可帮助您开始使用 NoSQL 数据库。
| 关系数据库 | NoSQL 数据库 | |
| 数据模型 | 关系模型对数据进行了规范化,使之成为一种表格结构,也叫做表。这类表由多个行和列组成。采用一种架构来严格定义表、列、索引、各个表之间的关系及其他数据库元素。 | 非关系 (NoSQL) 数据库一般不会实施任何架构。一般使用分区键来检索值、列集或半结构化 JSON、XML 或其他包含相关项目属性的文档。 |
| ACID 属性 | 传统关系数据库管理系统 (RDBMS) 支持由 ACID(原子性、持续性、隔离性和一致性)定义的一组属性。原子性表示“全有或全无”,即完全执行或完全不执行某项事务。一致性表示事务提交之后,数据必须符合数据库架构。隔离性要求并发事务应分别执行,互不干扰。持续性即能够从意外系统故障或断电情况中恢复到上一个已知状态。 | 为了获得更为灵活的可水平扩展的数据模型,NoSQL 数据库通常会放弃传统关系数据库管理系统 (RDBMS) 的部分 ACID 属性。凭借这些特性,NoSQL 数据库成了传统 RDBMS 在面临架构方面的挑战时的最佳选择。它可用来克服一系列问题,包括性能瓶颈、可扩展性、运营复杂性和不断增加的管理和支持成本。 |
| 性能 | 性能一般取决于磁盘子系统。要获得最佳性能,就需要优化查询、索引和表结构。 | 性能通常由底层硬件集群大小、网络延迟以及调用应用程序来决定。 |
| 扩展 | 进行纵向扩展最简单的方式是利用运行更快的硬件。 要获得跨分布式系统的关系表,就需要追加更多投资。 | 旨在利用低成本硬件的分布式集群进行横向扩展,从而在不增加延迟的前提下提高吞吐量。 |
| API | 对存储和检索数据的请求由符合结构化查询语言 (SQL) 的查询来传达。这些查询由关系数据库管理系统 (RDBMS) 来解析和执行。 | 借助基于对象的 API,应用开发人员可以轻松存储和检索内存数据结构。通过分区键,应用可以查找键值对、列集或包含序列化应用对象和属性的半结构化文档。 |
| 工具 | SQL 数据库一般会提供一组丰富的工具,用于简化数据库驱动型应用程序的开发流程。 | 而 NoSQL 数据库一般会提供多种工具来管理集群和扩展。应用程序是底层数据的主要接口。 |

| SQL |
MongoDB | DynamoDB | Cassandra | Couchbase |
| 表 | 集合 | 表 | 表 | 数据存储桶 |
| 行 | 文档 |
项目 | 行 | 文档 |
| 列 |
字段 | 属性 | 列 | 字段 |
| 主键 |
对象 ID |
主键 | 主键 | 文档 ID |
| 索引 | 索引 | 二级索引 | 索引 |
索引 |
| 视图 | 视图 | 全局二级索引 | 具体化视图 | 视图 |
| 嵌套表或对象 |
嵌入文档 | 映射 | 映射 | 映射 |
| 数组 |
数组 | 列表 | 列表 | 列表 |




