> For the complete documentation index, see [llms.txt](https://cnwangzhou.gitbook.io/grokking-system-design/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cnwangzhou.gitbook.io/grokking-system-design/ch24.md).

# 24. SQL 与 NoSQL

在数据库领域，有两种主要类型的解决方案：SQL 和NoSQL（或关系数据库和非关系数据库）。在构建方式、存储的信息类型以及使用的存储方法方面，它们存在很大差异。

关系数据库是结构化的，并具有预定义的模式，如存储电话号码和地址的电话本。 非关系型数据库是非结构化、分布式、并具有动态结构，如文件夹保存的是从一个人的地址和电话号码到他们的所有信息，这些信息包括但不限于Facebook“likes”和在线购物偏好。

## 1. SQL

关系数据库将数据存储在行和列中。 每行包含所有关于一个实体的信息，每一列包含所有单独的数据点。 一些最流行的关系数据库是 MySQL、Oracle、MS SQL Server、SQLite、Postgres 和 MariaDB。

## 2. NoSQL

以下是最常见的 NoSQL 类型：

**键值存储**

数据存储在键值对数组中。 “key”是一个链接到“value”的属性名称。著名的键值存储包括 Redis、Voldemort 和 Dynamo。

**文档数据库**

在这些数据库中，数据存储在文档中（而不是表格中的行和列）并且这些文档被分组。每个文档可以有完全不同的结构体。文档数据库包括 CouchDB 和 MongoDB。

**宽列数据库**

区别于“表”，在列式数据库中，列族它们是行的容器。与关系数据库不同，不需要预先知道所有的列，也不需要每一行具有相同的列数。列式数据库最适合分析大型数据集，知名的产品包括 Cassandra 和 HBase。

**图形数据库**

这些数据库用于存储其关系的数据适合用图表表示的。数据保存在带有节点的图形结构中（实体）、属性（有关实体的信息）和线（连接实体之间）。图数据库的例子包括 Neo4J 和InfiniteGraph。
