Go语言上手-基础语言 | 青训营笔记

103 阅读4分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记

RDBMS(关系型数据库)是目前使用最为广泛的数据库之一,同时也是整个信息化时代的基石。本节课程通过生活中常见的场景向大家介绍 RDBMS 的作用、发展历程及其核心技术,最后以字节为例,展示了 RDBMS 的企业级实践。本节课程主要包含以下内容: 4. 企业实践

RDBMS 有相关的数据和材料都非常多,这里主要给大家提供几篇经典论文,从经典的论文中,能够更有效的帮助大家理解 RDBMS。

  1. A Relational Model of Data for Large Shared Data Banks

这篇论文是 RDBMS 的奠基之作,由 RDBMS 之父 E.F.Codd 博士于1970年发表。在这篇论文中,E.F.Codd 首次提出了用于管理数据的关系模型,并将数据独立于硬件来存储,用户使用一个非过程语言来访问数据。

  1. Readings in Database Systems(Fifth Edition)

这本书被称为数据库领域的“红宝书”,由著名的图灵奖获得者,数据库领域专家,Michael Stonebraker 撰写。其中介绍了数据库的基本概念,传统的 RDBMS 以及新的数据库架构等等,是一本非常棒的数据库领域入门文章。

通过抖音红包雨的案例,介绍 RDBMS 中 ACID 的概念:

  • 原子性(Atomicity):事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。
  • 一致性(Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
  • 隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
  • 持久性(Durability):在事务完成以后,该事务所对数据库所做的更改便持久的保存在数据库之中,并不会被回滚。

发展历史

数据库发展最初过程中,诞生过3种数据模型,最终关系型模型成为了应用最为广泛的数据库模型。

  • 网状模型:用有向图表示实体和实体之间的联系的数据结构模型称为网状数据模型。
  • 层次模型:层次数据模型是用树状<层次>结构来组织数据的数据模型。
  • 关系模型:使用表格表示实体和实体之间关系的数据模型称之为关系数据模型。
网状模型层次模型关系模型
优势能直接描述现实世界 存取效率较高结构简单 查询效率高 可以提供较好的完整性支持实体及实体间的的联系都通过二维表结构表示 可以方便的表示 M:N 关系 数据访问路径对用户透明
劣势结构复杂 用户不易使用 访问程序设计复杂无法表示 M:N 的关系 插入、删除限制多 遍历子节点必须经过父节点 访问程序设计复杂关联查询效率不够高 关系必须规范化

在 SQL 执行过程中,需要经历 SQL 引擎、存储引擎、以及事务引擎等模块。而其中 SQL 引擎又分为Parser、Optimizer、Executor 几个部分:

SQL 引擎包括了:

  • Paser:经过词法分析、语法分析生成语法树,然后对语法树进行合法性校验。

  • Optimizer:根据 Parser 产生的语法树,根据规则或者代价产生执行计划树。

  • Executor:根据计划树进行执行,常见的执行方式是火山模型。

存储引擎负责了数据的底层存储、管理和访问工作。各大 RDBMS 存储引擎的设计都有不少的差异,这里选择 MySQL 的 InnoDB 存储引擎来向大家做一个介绍:

  • Buffer Pool:存储引擎位于内存中的重要结构,用于缓存数据,减少磁盘 IO 的开销。

  • Page:数据存储的最基本单位,一般为 16KB。

  • B+u Tree:InnoDB 中最常用的索引结构。

事务引擎实现了数据库的 ACID 能力,这里还是以 MySQL 的 InnoDB 为例来介绍数据库内部是通过哪些技术来实现 ACID:

  • Atomicity:InnoDB 中通过 undo 日志实现了数据库的原子性,通过 Undo Log,数据库可以回滚到事务开始的状态;

  • Isolation:通过 Undo Log 实现 MVCC(多版本并发控制),降低读写冲突。

  • Durability:通过 Redo Log(一种 WAL 实现方式)来保证事务在提交后一定能持久化到磁盘中。

  • Consistency:一致性本质上是一种业务层的限制。