这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
深入理解RDBMS
RDBMS(关系型数据库)是目前使用最为广泛的数据库之一,同时也是整个信息化时代的基石。本节课程通过生活中常见的场景向大家介绍RDBMS的作用、发展历程及其核心技术,最后以字节为例,展示了RDBMS的企业级实践。
经典案例
从抖音红包雨活动入手:
抖音账户扣除小目标,给用户账户加上小目标
事务(Transaction):是由一组SQL语句组成的一个程序执行单元(Unit),它需要满足ACID特性。
原子性(Atomicity):事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。
一致性(Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
持久性(Durability):在事务完成以后,该事务所对数据库所做的更改便持久的保存在数据库之中,并不会被回滚
发展历史
人工管理-文件系统-DBMS时代
网状模型
层次模型
层次数据模型,即使用树形结构来描述实体及其之间关系的数据模型。
关系模型
关键技术
sql
语法风格接近自然语言;高度非过程化; 面向集合的操作方式;语言简洁,易学易用。
sql引擎
- parser:解析器(Parser)一般分为词法分析( Lexical analysis )、语法分析 ( Syntax analysis )语义分析(Semantic analyzer)等步骤。
-
Optimizer:根据Parser产生的语法树,根据规则或者代价产生执行计划树。
-
Executor:根据计划树进行执行,常见的执行方式是火山模型。
每个Operator调用Next操作,访问下层Operator,获得下层Operator返回的一行数据,经过计算之后,将这行数据返回给上层。
存储引擎-InnoDB
存储引擎负责了数据的底层存储、管理和访问工作。
- Buffer Pool:存储引擎位于内存中的重要结构,用于缓存数据,减少磁盘IO的开销。
- Page:数据存储的最基本单位,一般为16KB。
- B+u Tree:InnoDB中最常用的索引结构。
事务引擎
事务引擎实现了数据库的ACID能力,
-
原子性:在Innodb 由 undo log 日志保证事务的原子性,它在执行更新操作前会将旧值写入 undo log 日志文件,可根据该文件回滚,mysql服务器内部可以依赖binlog日志
-
一致性: 保证了原子性、隔离性和持持久性就可以保证了
-
隔离性: 由MVCC多版本控制保证的
-
持久性: 由 buffer pool + redo log 日志保证的
- mysql在执行修改操作将数据写到内存后,会将数据写入写redo log 日志文件
- 如果事务提交成功,但buffer poll的数据还没来得及写入磁盘就宕机了,那么可以用redo log 里面的数据恢复buffer pool里的缓存数据