RDBMS 关系数据库管理系统的理解 | 青训营笔记

60 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

事务与RDMNS

事务满足以下特性

  • 原子性(Atomicity):事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。两个操作要么同时成功,要么同时失败,不存在中间状态。
  • 一致性(Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。每个操作都必须是合法的,账户信息应该从一个有效的状态变为另一个有效的狀态。
  • 隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。两个操作在对同一个账户并发进行操作时,应该是相互不影响,表现的像是串行操作。
  • 持久性(Durabilty):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。操作更新成功之后,更新的结果应该永久性的保留下来,不会因为宕机等问题而丢失。

除此之外,还需要

  • 高并发
  • 高可靠

DBMS的发展历史

文件系统 网状模型 层次模型 关系模型

SQL语句

SQL引擎

  • 查询解析:SQL 语言接近自然语言,入门容易。但是各种关键字、操作符组合起来,可以表达丰富的语意。因此想要处理SQL命令,首先把文本解析成结构化数据,也就是抽象语法树 (AST)
  • 查询优化:SQL 是一门表意的语言,只是说要做什么,而不说怎么做。所以需要一些复杂的逻辑选择如何拿数据,也就是选择一个好的查询。优化器的作用根据AST优化产生最优执行计划 (Plan Tree)
  • 查询执行:根据查询计划,完成数据读、处理、写入等探作。
  • 事务引擎:处理事务一致性、并发、读写隔离等
  • 存储引擎:内存中的数据缓存区、数据文件、日志文件

事务引擎

事务引擎是如何保证ACID特性的

原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样需要记录数据修改前的状态,在事务失败时进行回滚。 undo log逻辑日志,记录的是数据的增量变化,它的作用是保证事务的原子性和事务的并发控制。可以用于事务回滚,以及提供多版本机制 (MVCC)解决读写冲突和一致性读的问题。

Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止当多个事务并发执行时由于交叉执行导致数据的不一致。 如果多个并发事务访问同一行记录,就需要锁机制来保证了。

MVCC的意义:

  • 读写互不阻塞;
  • 降低死锁概率;
  • 实现一致性读。

持久化:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丟失,

实现方案-:事务提交前页面写盘

优点:系统故障不会丢失。缺点:随机IO,写放大

实现方案二:WAL

修改井不直接写入到数据库文件中,而是写入到另外一个称为 WAL 的文件中,如果事务失败, 优点:只记录增量安化,没有写放大append only,没有随机IO redo log是物理日志,记录的是页面的变化,它的作用是保证事务持久化。如果数据写入 磁盘前发生故障,重启MySQL后会根据redo log重做。