学习RDBMS| 青训营笔记

117 阅读3分钟

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

数据库管理系统(DBMS)

DBMS:按照某种数据模型来组织、存储和管理数据的仓库, 通常按照数据模型的特点将传统数据库系统分成网状数据库、层次数据库和关系数据库三类

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

RDBMS事务ACID

事务是由一组SQL语句组成的一个程序执行单元(Unit),它需要满足ACID特性(原子性、一致性、隔离性、持久性)

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

关键技术

一条SQL语句的一生

UPDATE account_table SET balance = balance - '小目标' WHERE name = '抖音'

上面这条语句传到后台,首先由parser解析SQL语句,生成语法树AST;语法树传递到optimizer,由optimizer生成plan tree,决定SQL语句到底怎么执行;plan tree传到executor,操作数据文件,写入日志,将结果返回RDBMS。

SQL引擎

Parser

主要分为词法分析、语法分析、语义分析三个步骤

词法分析将sql语句拆分为关键字、表列名、常量、运算符、结束符

语法分析把关键词生成语法树,转化成机器能看懂的语言

语义分析是合法性校验,例如检查常量类型是否合法

Optimizer

基于规则的优化(RBO,rule base optimizer)

  • 条件化简
  • 表连接优化 总是小表先进行连接
  • scan优化 唯一索引、普通索引、全表扫描 基于代价的优化(CBO,cost base optimizer)
  • 代价:时间 io cpu net mem
  • 一个查询有多种执行方案 cbo会选择其中代价最低的方案去执行

Excecutor

火山模型

image.png

  • 优点:每个算子独立抽象实现,相互之间没有耦合,逻辑结构简单
  • 缺点:每计算一条数据有多次函数调用开销,函数调用涉及到栈的切换,导致cpu效率不高