深入理解 RDBMS | 青训营笔记

69 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天

MySQL - 深入理解 RDBMS

RDBMS

ACID

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

高可靠和高可用

SQL语言

1974年IBM的Ray Boyce和Don Chamberlin将Codd关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了SQL(Structured Query Language)语言。
语法风格接近自然语言;
高度非过程化;
面向集合的操作方式;
语言简洁,易学易用。

发展历史

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

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

关键技术

SQL 执行流程

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

SQL 引擎

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:一致性本质上是一种业务层的限制。

大流量 - Sharding

问题背景: 单节点写容易成为瓶颈 单机数据容量上限 解决方案: 业务数据进行水平拆分 代理层进行分片路由 实施效果: 数据库写入性能线性扩展 数据库容量线性扩展