1.mysql做为一个关系型数据库,并且支持多线程,在用户刚连入数据库的时候,首先要验证用户的有效信息,接受用户的并发请求,并且限定求情的最大连接数,如果超过一定的连接数就拒绝访问等功能.所以在数据库的入口有一个连接管理器

image

2.当用户连接进来的时候,就要开始处理SQL语句了所以需要一个查询求解引擎,SQL语句有三种:DDL,DML,DCL,数据库要分析用户发来是哪种查询语句,就需要有分析器,分析结束后,选择一条合适的路径,做优化,然后可以开始准备执行语句了

image

3.如果执行的语句是涉及到表修改的,就需要I/O的读写,就需要和磁盘交互,查询求解引擎不能直接操作磁盘,所以需要有文件访问接口,也就是文件存储方法

image

4.如果每次读写操作都由文件存储方法和磁盘直接打交互,会很慢,因为I/O本来就很慢,所以需要一个缓存管理器来临时存放磁盘上的常用数据,所以需要缓存管理器,缓存管理器会定期往磁盘上同步数据

image

5.为了实现持久存储,缓存中的数据最终还是要写回磁盘的,如何写?写成何种格式,写成多少个文件?所以需要一个磁盘空间管理器

image

6.对于一个关系型数据库来说,最关键的问题是ACID问题;A:原子性;C数据的一致性;I:数据的隔离性;D:数据的持久性.以及锁..这里有点不理解事务的隔离性和锁的概念了

image

7.如果数据在写入的过程中断电了,数据不是丢失了?所以需要日志管理器,当数据需要写入磁盘的时候,先写入事务日志,事务日志是可以replay的.所以当突然断电,也不用太担心.为了提高用户体验,日志管理器通常是一段连续的磁盘空间(顺序读写),并且一般有两个.

image

8.如果在写入数据库的时候,写入操作执行了一半,突然断电了,虽然有日志记录着,但是我们只知道是怎么回事,还不能处理啊,那这些不完整的数据怎么办?所以不完成的数据就不能让他存储,应该返回断电之前的状态,所以需要一个恢复管理器

image