RDBMS | 青训营笔记

129 阅读5分钟

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

引言

今天的课程中老师从一个经典案例(抖音红包雨)讲述了在这个案例中关系型数据库所作的操作,并结合案例分析RDBMS的ACID原则——原子性,一致性,隔离性和持久性。


一、本堂课重点内容

本堂课的知识点

  • 经典案例
  • 发展历史
  • 关键技术-SQL引擎
  • 企业实际

二、详细知识点介绍

RDBMS的ACID原则?

事务通常是由一个或一组SQL组成的,组成一个事务的SQL一般都是一个业务操作,例如前面聊到的下单:「扣库存数量、增加订单详情记录、插入物流信息」,这一组SQL就可以组成一个事务。

ACID是关系型数据库在实现事务机制时必须遵守的原则

ACID主要涵盖四条原则,即:

  • A/Atomicity:原子性 要么完整的被执行,要么完全不执行

好比事务A①、②、③SQL组成,那这一个事务中的三条SQL必须全部执行成功,只要其中任意一条执行失败,例如执行时出现异常了,此时就会导致事务A中的所有操作全部失败。

  • C/Consistency:一致性

一致性的含义是指:在这个事务执行前,数据库中的数据是处于一致性状态的,而SQL执行完成之后事务提交,数据库中的数据依旧处于一个“一致性”状态,也就是库存数量+订单数量永远是等于最初的库存总数的,比如原本的总库存是10000个,此时库存剩余8888个,那也就代表着必须要有1112条订单数据才行。

  • I/Isolation:独立性/隔离性

多个事务之间都是独立的,相当于每个事务都被装在一个箱子中,每个箱子之间都是隔开的,相互之间并不影响,

  • D/Durability:持久性

持久性是指一个事务一旦被提交,它会保持永久性,所更改的数据都会被写入到磁盘做持久化处理,就算MySQL宕机也不会影响数据改变,实现这一原则主要是通过Redo日志来实现的。

发展历史

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

  • 网状模型:用有向图表示实体和实体之间的联系的数据结构模型称为网状数据模型。
  • 层次模型:层次数据模型是用树状<层次>结构来组织数据的数据模型。
  • 关系模型:使用表格表示实体和实体之间关系的数据模型称之为关系数据模型。

一条SQL语言的执行过程

什么是SQL

SQL是一个标准的数据库语言,是面向集合的描述性非过程化语言。它功能强,效率高,简单易学易维护。

SQL在RDBMS的执行过程:

image.png

一般来说,当执行一条SQL会首先根据Hash值,查找对应此条SQL的缓存,若无缓存开始执行下述步骤

  • 第一步:SQL交给解析器Parser处理,这个过程中会做词法分析(挑选出关键字,表/列名,常量,运算符等),语法分析(把词法分析的结果转化为语法树),语义分析(对语法树中的信息进行合法性校验)
  • 第二步:优化器Optimizer ,对于这条SQL,会根据语法树制定出多个执行计划,然后从多个执行计划中选择出一个最好的计划,也就是告诉工作线程怎么执行效率最高、最节省资源以及时间。
  • 第三步:执行Executor,三种方式:火山模型,向量化,编译执行

存储引擎

存储引擎负责了数据的底层存储、管理和访问工作。有许多种存储引擎如InnoDB、MyISAM等

MySQL的InnoDB存储引擎

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

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

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

事务引擎

事务引擎实现了数据库的ACID原则:

  • Atomicity:原子性要求事务中所有操作要么全部成功,要么全部失败,这点是基于undo-log来实现的,执行失败时会利用该日志来回滚所有写入操作。
  • Isolation:通过Undo Log实现MVCC(多版本并发控制),降低读写冲突。
  • Durability:持久性要求的是所有SQL写入的数据都必须能落入磁盘存储,确保数据不会丢失,这点则是基于redo-log实现的
  • Consistency:实现一致性原则本质上是一种业务层的限制。

MVCC知识补充

MVCC机制的全称为Multi-Version Concurrency Control,即多版本并发控制技术,主要是为了提升数据库并发性能而设计的,其中采用更好的方式处理了读-写并发冲突,做到即使有读写冲突时,也可以不加锁解决,从而确保了任何时刻的读操作都是非阻塞的

三、实践练习例子

企业实践

  • 处理大流量问题-Sharding:进行分库分表

  • 解决流量扩展-扩容DB物理节点数量,采用代理连接池,

  • 保证稳定性和可靠性:ha服务监管,切换宕机节点,代理支持配置热加载

四、课后个人总结

今天这堂课程学习到了关系型数据库RDBMS的知识,了解到RDBMS的发展历史,加深了对RDBMS中事务的理解,整体上理解了一条SQL在RDBMS的执行过程,知道了数据库是如何保证事务的ACID原则,MVCC机制,日志undo-log,redo-log相关。

五、引用参考

[1] 青训营课程资料 【后端专场 学习资料六】第五届字节跳动青训营 - 掘金 (juejin.cn)

[2] 课件 ‍⁢⁣深入理解RDBMS.pptx - 飞书云文档 (feishu.cn)