数据库
首页 > 数据库> > MySQL:30 阶段总结:MySQL存储模型以及数据读写机制

MySQL:30 阶段总结:MySQL存储模型以及数据读写机制

作者:互联网

目前为止,初步学了MySQL存储模型以及对应的读写机制。可以知道的是MySQL的数据最终是放在磁盘文件里的。

而数据在存储到磁盘文件的机制中,在逻辑层面是将数据插入一个一个的表中的;而在物理层面上,表对应的是表空间这个概念。也就是说数据在物理层面是存储到表空间的某个结构里了。

他们的对应关系为,表空间对应着磁盘文件,在磁盘文件里就存放着数据。

由于数据库存储的数据的复杂性,不只是多种字段类型的问题,还有索引这个概念的存在。

所以实际上在磁盘文件里存放数据的时候,它从最基本的角度来看的话,就是被拆分为一个一个的 数据区(extent)分组,每个extent组中包含256个extent,然后每个extent里包含了64个数据页!然后每个数据页里都包含了一行一行的数据!

在实际存储中,每个数据行还包含了很多附加的信息,在数据页、数据区里,都有很多特殊的附加信息。各种各样的特殊信息的存在,可以让我们在简简单单的磁盘文件里实现B+树索引、事务之类的非常复杂的机制。

当我们在数据库执行CRUD的时候,必须先把磁盘文件里的一个数据页加载到内存的Buffer Pool的一个缓存里去,然后我们增删改查都是针对缓存页里的数据来执行的。

假设此时我们要插入一条数据,会先看看往哪个表里插入数据?然后再根据表找到一个表空间。找到表空间之后,就可以定位到对应的磁盘文件!有了磁盘文件之后,就可以从里面找一个extent组,找一个extent,接着从里面找一个数据页出来!这个数据页可能是空的,也可能已经存储了一些数据了。

然后就可以把这个数据页从磁盘里完整加载出来,放入Buffer Pool的缓存页里了。

由于一个数据页的大小是固定的,所以一个数据页固定就是在一个磁盘文件里占据了某个开始位置到结束位置的一段数据,此时将缓存页写回去的时候也是一样的,选择好固定的一段位置的数据,直接把缓存页的数据写回去,就覆盖了原来的那个数据页了。

标签:文件,存储,缓存,读写,30,extent,MySQL,磁盘,数据
来源: https://blog.csdn.net/weixin_42405670/article/details/119491510