《系统设计》课程学习笔记—SQL 数据库

91 阅读2分钟

SQL(或关系)数据库是具有预定义的关系的数据项的集合。这些项被组织为一系列具有列和行的表。表用于保存有关数据库中要表示的对象的信息。表中每一列都包含某种数据和一个字段存储属性的实际值。表中的行表示一个对象或实体的相关值的集合。

表中的每一行都可以用一个称为主键的唯一标识符进行标记,并且可以使用外键将多个表中的行关联起来。可以通过多种不同的方式访问这些数据,而无需重新组织数据库表本身。SQL数据库通常遵循 ACID 一致性模型。

物化视图

物化视图(materialized view)是从查询规范导出并存储以供以后使用的预计算数据集。因为数据是预先计算的,所以查询物化视图比对视图的基表执行查询更快。当查询频繁运行或足够复杂时,这种性能差异会非常显著。

它还支持数据子集,并提高在大型数据集上运行的复杂查询的性能,从而减少网络负载。物化视图还有其他用途,但它们主要用于性能和复制。

N+1查询问题

当数据访问层执行 N 条额外的 SQL 语句以获取执行主SQL查询时可能检索到的相同数据时,就会出现 N+1 查询问题。N值越大,执行的查询越多,性能影响越大。

这在 GraphQL 和 ORM(对象关系映射)工具中常见,可以通过优化 SQL 查询或使用数据加载器来解决,数据加载器可以批量处理连续请求,并在后台发出单个数据请求。

优点

让我们看看使用关系数据库的一些优点:

  • 简单准确
  • 可访问性
  • 数据一致性
  • 灵活性

缺点

以下是关系数据库的缺点:

  • 维护费用昂贵
  • 困难的模式演变
  • 性能命中(连接、非规范化等)
  • 由于水平可扩展性差,难以扩展

例子

以下是一些常用的关系数据库: