RDBMS简介 | 豆包MarsCode AI刷题

92 阅读4分钟

前言

课程学习过程中的总结,有点水,求轻喷。

一、ACID特性与案例

1.RDBMS事务ACID特性

事务(Transaction) 是由一组SQL语句组成的一个程序执行单元(Unit), 它需要满足ACID特性。

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

2.案例

我们可以设想一个例子,A给B转100元,需要执行的操作是A的账户减100元,B的账户加100元,如果我们的转账行为要满足ACID:

  • 原子性要求:假如A账户已经扣款,我们必须要保证B的账户加上100元,不能在A扣款后,B收不到钱,即A扣款和B加钱要么同时成功要么同时失败。
  • 一致性要求:加入A账户余额小于100,我们要保证A的转账操作不会发生,即每个操作必须是合法的(A账户转账金额大于余额是不合法的),应该由一个有效状态到另一个有效状态。
  • 隔离性要求:假如A和C同时给B转账,需要保证B能够同时接收到A和C的钱,即两个操作并发操作时,应该互不影响。
  • 持久性要求:数据更新成功后,结果应该永久保留(即保存到非易失性介质中),不能因为宕机等情况丢失。

总的来说,ACID是事务的基本性质,必须要满足ACID特性,才能够保证事务的执行是正确的,不会发生意想不到的错误,也即ACID特性是事务正确性的前提。

二、发展历史

人工->文件->DB

1.DBMS模型

  • 网状模型:用有向图表示实体和实体之间的联系的模型
  • 层次模型:用树形结构表示实体与实体的层次关系
  • 关系模型(关系型数据库):将关系用二维表形式表示

三、关键技术

1.SQL引擎——Parser

主要包括词法分析、语法分析、语义分析等过程 词法分析主要是将SQL语句拆分为关键字、目标表、列名、常数、运算符等部分,语法分析分析出SQL语句各个部分的构成,再通过语义分析是否合法。

2.Optimizer

为什么使用Optimizer:可以有效简化计算和执行路径,有效提高SQL语句的执行性能。 (1)RBO(基于规则的优化器) 条件化简:通过数据流和执行流分析表达式最简单的形式,如a = 5 and b > a可以化简为a = 5 and b > 5。 表连接优化:总是小表先连接 Scan优化 (2)CBO(基于代价的优化器) 选择代价最低的执行方案

3.Executor

(1)火山模型:思路是向下访问(每个Operator访问下层Operator),向上求解(每个Operator求解出结果后返回上层) 优点:低耦合,逻辑简单 缺点:函数调用多,效率低 (2)向量化:一次计算一批数据,向上层返回一个向量 优点:性能更好(Cache命中率高、可以利用SIMD机制等) (3)编译执行

4.存储引擎:InnoDB(MySQL常用)

存储引擎负责了数据的底层存储、管理和访问工作。5.6之后的的版本MySQL默认存储引擎为Innodb,它具有支持事务,支持外键,支持行级锁以及崩溃恢复等特性,是目前比较优秀的存储引擎。

  • Buffer Pool:存储引擎位于内存中的重要结构,用于缓存数据,减少磁盘IO的开销。在实际使用过程中采用了冷热分离机制,减少了热数据频繁切入切出的开销。
  • Page:存储基本单位(类似于操作系统中的页机制)
  • B+树:索引结构

5.事务引擎

  • UndoLog:保证原子性,当原子操作未完成时,依赖Log进行回滚
  • 锁:保证隔离性
  • MVCC:保证隔离性,读写不阻塞,可以防止死锁
  • 持久性:一是在事务提交前写入磁盘,二是维护Redo Log,若写入前发生故障,MySQL会根据Log重做事务。