这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天。
📜📜📜今天学习的是RDBMS(关系型数据库)——第一部分。
一、🎊引入——经典案例
1.1RDBMS事务ACID
- 事务 ·事务(Transaction):由一组SQL语句组成的一个程序执行单元(Unit),它需要满足ACID特性。
BEGIN;
UPDATE account_table SET balance = balance - ‘小目标’WHERE name =‘抖音';
UPDATE account_table SET balance = balance +小目标’WHERE name =‘杨洋';
COMMIT;
ACID:
- 原子性(Atomicity):事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。
- 一致性(Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性,合法性。
- 隔离性(solation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
- 持久性(Durability):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
1.2红包雨与ACID
红包雨:在抖音账户扣一亿;给杨老师加一亿;
- 抖音扣除一亿之后,服务器挂了,没给老师加——不满足A(原子性;
- 抖音账户只有0.5亿,但是扣一亿成功了——每个操作必须是合法的,不满足C(一致性
- 在抖音抢了一个亿,在另一个也抢了一个亿,但是最后只得到一个亿——两个事务不能相互影响,不满足I(隔离性
- 抖音账户扣了一亿,老师账户加了一个亿,但是都没有写到磁盘,这时服务器挂了——更新后应该永久的保留下来,不满足D(持久性
- 高并发
- 高可靠
二、发展历史
1、人工管理
2、 文件系统
3、 DBMS
数据库管理系统(DBMS)——按照某种数据模型来组织、存储和管理数据的仓库。
3.1DBMS——网状模型
3.2DBMS——层次结构(类似于一个树的结构
与网状模型相比区别:在层次模型中的节点只有一个父节点
3.3DBMS——关系型数据库
三种DBMS的优劣势:
4、 SQL语言
sql语言是结构化语言。 过程化语言——比如python,C语言等。
三、关键技术
先看一下,一条sql的一生, 手机先发起请求——后台路由服务器收到请求并发送一条sql语句给数据库——数据库收到后需要解析sql语言——将sql语句通过Parser(语法解析器)生成一个语法树——语法树(AST)传给Optimizer(优化器),Optimizer根据语法树生成这条语句到底怎么执行(Plan)——Plan传给Executor(执行器),真正的执行(读取数据,同时也会写入数据,并写入日志)——最后将结果返回给用户。
其中,Parser(语法解析器)、Optimizer(优化器)、Executor都是sql引擎。DataFile、LogFile都是存储引擎。
3.1sql引擎
3.1.1Parser
解析器(Parser)一般分为词法分析(Lexical analysis)、语法分析(Syntax analysis)、语义分析(Semantic analyzer)等步骤。
3.1.2Optimizer
为什么需要一个优化器(Optimizer)?——选择如何达到最优。比如,三个表做连接,可以选择先做哪两个的连接。
基于规则的优化(RBO Rule Base Optimizer)
- 条件化简
- 表连接优化 总是小表先进行连接
SELECT * FROM A, B, C WHERE A.a1 = B.b1 and A.a1 = C.b1;
- Scan优化
唯一索引 | 普通索引 | 全表扫描
数据库索引:是数据库管理系统中辅助数据结构,以协助快速查询、更新数据库表中数据。目前数据库中最常用的索引是通过B+树实现的。
基于代价的优化(CBO Cost Base Optimizer) 一个查询有多种执行方案,CBO会选择其中代价最低的方案去真正的执行。代价是时间。
3.1.3executor
执行器的几种模型—— 火山模型:
每个Operator(算子)调用Next操作,访问下层Operator, 获得下层,Operator返回的一行数据,经过计算之后,将这行数据返回给上层。
- 优点:每个算子独立抽象实现,相互之间没有耦合,逻辑结构简单。
- 缺点:每计算一条数据有多次函数调用开销,导致CPU效率不高。