这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天。
RDBMS
1、DBMS时代
传统的文件系统不能满足人们的需要的时候数据库管理系统(DBMS)应运而生。DBMS是按照某种数据模型来组织、存储和管理数据的仓库。
按照数据模型的特点可以将传统数据库系统分成网状数据库,层次数据库,关系数据库。
网状数据库所基于的网状数据模型建立的数据之间的联系,能反应现实世界中信息的关联,是许多空间兑现的自然表达形式。
层次数据模型使用树形结构来描述实体及其之间关系的数据类型。
网状模型能直接描述现实世界,存取效率高,但结构复杂,用户不易使用,访问程序设计复杂。
层次模型结构简单,查询效率高,可以提供较好的完整性支持,但无法表示多对多关系,插入、删除限制较多,遍历子节点必须经过父节点,访问程序设计复杂。
关系模型实体及实体的联系都通过二维表结构表示,可以方面的表示多对多关系,数据访问路径对用户透明,但关联查询效率不够高,关系必须规范化。
2、SQL引擎
查询解析:处理SQL命令,首先将文本解析成结构化数据,也就是抽象语法树(AST)。
查询优化:优化器的作用是根据AST优化产生最优执行计划。
查询执行:根据查询计划完成数据读取、处理、写入等操作。
事务引擎:处理事务一致性,并发、读写隔离等。
存储引擎:内存中的数据缓存区,数据文件,日志文件。
解析器(Parser)一般分为词法分析,语法分析,语义分析等步骤。
数据库可以使用Undo log将数据库回退到修改之前的状态,undo log是逻辑日志,记录是数据的增量变化,可以进行事务回滚,从而保证事务的原子性,同时也实现了多版本并发控制(MVCC)解决读写冲突和一致性读的问题。
MVCC的意义:读写互不阻塞,降低死锁概率,实现一致性读。Undo log 在MVCC的作用:
每个事务有一个单增的事务ID,数据页的行记录中包含了DB_ROW_ID,DB_TRX_ID,DB_ROLL_PTR,DB_ROLL_PTR将数据行的所有快照记录都通过链表的结构串联了起来。
如何保证事务结束后,对数据的修改永久保存?
1、事务提交前页面写盘; 2、WAL(write-ahead logging)red0 log 是物理日志,记录的是页面的变化,它的作用是保证事务持久化,如果数据写入磁盘前发生故障,重启MySQL后根据redo log重做。
总结
本文接上文,是参加青训营学习中关于数据库和存储系统的笔记。