《系统设计》课程学习笔记—SQL vs NoSQL

259 阅读2分钟

在数据库世界中,有两种主要的解决方案,SQL(关系)和NoSQL(非关系)数据库。它们在构建方式、存储的信息类型以及存储方式上都有所不同。关系数据库是结构化的,具有预定义的模式,而非关系数据库是非结构化的、分布式的,并且具有动态模式。

高层次区别

以下是SQL和NoSQL之间的一些高层次区别:

存储

SQL将数据存储在表中,其中每行表示一个实体,每列表示该实体的数据点。

NoSQL数据库具有不同的数据存储模型,如键值、图形、文档等。

模式

在SQL中,每个记录都符合一个固定的模式,这意味着在数据输入之前必须决定和选择列,并且每一行必须包含各个列的数据。稍后可以修改模式,但它涉及使用迁移修改数据库。

而在NoSQL中,模式是动态的。可以动态添加字段,并且每个记录(或等效的东西)不必包含每个字段的数据。

查询

SQL数据库使用SQL(结构化查询语言)来定义和操作数据,它功能非常强大。

在NoSQL数据库中,查询集中在一组文档上。不同的数据库具有不同的查询语法。

可扩展性

在大多数常见情况下,SQL数据库是垂直可扩展的,这可能会非常昂贵。可以跨多个服务器扩展关系数据库,但这是一个具有挑战性和耗时的过程。

另一方面,NoSQL数据库是水平可扩展的,这意味着我们可以轻松地将更多服务器添加到 NoSQL 数据库基础设施中,以处理大流量。任何廉价的商品硬件或云实例都可以托管 NoSQL 数据库,因此比垂直扩展更具成本效益。许多 NoSQL 技术也自动在服务器之间分发数据。

可靠性

绝大多数关系数据库都与 ACID 兼容。因此,当谈到数据可靠性和执行事务的安全保障时,SQL数据库仍然是更好的选择。

大多数NoSQL解决方案为了性能和可扩展性而牺牲了 ACID。

理由

一如既往,我们应该选择更适合需求的技术。因此,让我们看看选择SQL或NoSQL的数据库的一些理由:

对于SQL

  • 具有严格模式的结构化数据
  • 关系数据
  • 需要复杂连接
  • 事务
  • 按索引查找非常快

对于NoSQL

  • 动态或灵活模式
  • 非关系数据
  • 不需要复杂的连接
  • 数据非常密集的工作负载
  • 非常高的IOPS吞吐量