这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记
在参加青训营之前我对于数据库的了解仅仅停留在RDBMS关系型数据库Mysql的简单SQL语句使用,并没有去真正了解过RDBMS的原理是怎么样的。青训营的这节课让我收获了很多。
事务
什么是事务?
事务是一组SQL语句组成的单个逻辑工作,要么完全地执行,要么完全地不执行。
事务需要满足ACID特性
事务的四个特性
ACID
原子性(Atomicity):事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。
一致性(Consistency): 数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
隔离性(isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
持久性(Durability):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
DBMS数据库管理系统
什么是DBMS?
DBMS是按照某种数据模型来组织,存储和管理数据的仓库。
DBMS数据模型
DBMS主要分为三类 分别是
1. 网状模型
2. 层次模型
3. 关系模型
关键技术
关键技术分为三大类分别是SQL引擎和事务引擎以及存储引擎
其中与日常工作关联性高的主要是SQL引擎和事务引擎,下面主要对SQL引擎进行介绍
SQL引擎工作原理
1.解析器Parser对SQL语句进行查询解析,效果类似于对代码的解析编译过程。
解析流程包括:
1.词法方析: 先将一条SQL语句分割为一个个token,可以进行简单分类(关键字类型 表列名 常量 运算符 结束符 等等)
2.语法分析: 把词法分析的结果转换成语法树(AST) ,根据不同的token匹配不同的语法规则 比如词法分析中提取的关键字token是update那么匹配的就是update的语法规则。
3.语义分析:对语法树中的信息进行合法性校验。
2. Optimizer优化器进行优化产生执行路径交给执行器执行
优化器有两种优化方案 1.基于规则的优化RBO(Rule Base Optimizer) 2.基于代价的优化CBO(Cost Base Optimizer)
3.执行器Executor执行
执行器执行方式也分为几种模型
以火山模型为例
函数栈一层层向下执行,最后访问存储引擎
执行产生的数据结果一层层向上进行返回
外形像一座火山
优点:每一个算子Operator独立进行工作比如Filter就执行过滤,Table Scan就进行表扫描,相互之间没有耦合,逻辑独立。
缺点:计算一条数据有多次函数调用开销 , 导致CPU效率不高