RDBMS | 青训营笔记 (一)

44 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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

红包雨:在抖音账户扣一亿;给杨老师加一亿;

  1. 抖音扣除一亿之后,服务器挂了,没给老师加——不满足A(原子性;
  2. 抖音账户只有0.5亿,但是扣一亿成功了——每个操作必须是合法的,不满足C(一致性
  3. 在抖音抢了一个亿,在另一个也抢了一个亿,但是最后只得到一个亿——两个事务不能相互影响,不满足I(隔离性
  4. 抖音账户扣了一亿,老师账户加了一个亿,但是都没有写到磁盘,这时服务器挂了——更新后应该永久的保留下来,不满足D(持久性
  5. 高并发
  6. 高可靠

二、发展历史

1、人工管理

2、 文件系统

3、 DBMS

数据库管理系统(DBMS)——按照某种数据模型来组织、存储和管理数据的仓库。

3.1DBMS——网状模型

image.png

3.2DBMS——层次结构(类似于一个树的结构

image.png 与网状模型相比区别:在层次模型中的节点只有一个父节点

3.3DBMS——关系型数据库

image.png

三种DBMS的优劣势: image.png

4、 SQL语言

sql语言是结构化语言。 过程化语言——比如python,C语言等。

三、关键技术

先看一下,一条sql的一生, 手机先发起请求——后台路由服务器收到请求并发送一条sql语句给数据库——数据库收到后需要解析sql语言——将sql语句通过Parser(语法解析器)生成一个语法树——语法树(AST)传给Optimizer(优化器),Optimizer根据语法树生成这条语句到底怎么执行(Plan)——Plan传给Executor(执行器),真正的执行(读取数据,同时也会写入数据,并写入日志)——最后将结果返回给用户。

image.png

其中,Parser(语法解析器)、Optimizer(优化器)、Executor都是sql引擎。DataFile、LogFile都是存储引擎。

3.1sql引擎

3.1.1Parser

解析器(Parser)一般分为词法分析(Lexical analysis)、语法分析(Syntax analysis)、语义分析(Semantic analyzer)等步骤。

image.png

3.1.2Optimizer

为什么需要一个优化器(Optimizer)?——选择如何达到最优。比如,三个表做连接,可以选择先做哪两个的连接。

基于规则的优化(RBO Rule Base Optimizer)

  • 条件化简

image.png

  • 表连接优化 总是小表先进行连接

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

执行器的几种模型—— 火山模型:

image.png

每个Operator(算子)调用Next操作,访问下层Operator, 获得下层,Operator返回的一行数据,经过计算之后,将这行数据返回给上层。

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

image.png

image.png