知识卡片
存储引擎的四模块分工
内容
存储引擎不是一个笼统的黑盒,而是拆成四个职责边界清晰的模块协同 工作。文件管理模块封装操作系统的文件功能,把数据字典、数据文件、 索引文件、回滚文件、日志文件等组织成表空间对应的文件组,并把逻辑 数据块与物理磁盘文件块对应起来——它是所有上层模块与操作系统之间 的唯一接口。缓冲区管理模块负责把近期或频繁使用的数据块缓存在内存 里,让上层模块发出读写命令时不需要关心数据到底在内存还是磁盘上, 直接从缓冲区读写即可,从而减少磁盘I/O——这是存储引擎能兼顾正确性 与效率的关键中间层。数据字典管理模块专门管理数据库的元数据(表结构、 索引定义等),因为元数据被频繁访问,通常也放在共享内存缓冲区里, 它的增删改操作跟一般数据表的增删改操作走的是同一套机制。存取控制 管理模块是面向上层(查询执行引擎等)的统一接口,提供创建/删除关系、 修改结构、管理约束、增删改查记录等逻辑操作,内部再调用前三个模块 完成具体工作。正是因为存取控制管理模块对上层的接口是固定的,MySQL 才能把这个接口独立出来,让不同的存储引擎(InnoDB、MyISAM等)各自 实现底层细节,对上层应用保持一致的使用体验——这是MySQL插件式存储 引擎架构的基础。
结构图:
flowchart TD
A[查询执行引擎等上层模块] --> B[存取控制管理模块<br/>统一对外接口]
B --> C[文件管理模块<br/>封装操作系统文件功能]
B --> D[缓冲区管理模块<br/>内存缓存减少磁盘I-O]
B --> E[数据字典管理模块<br/>管理表结构等元数据]
C --> F[磁盘: 数据文件/索引文件/日志文件]
D -.数据不在内存时.-> C
参考来源
- 位置:《数据库原理(微课版)》第9章《数据库存储与索引》9.1.2节"数据库
存储引擎"(源文件:_epub-src/index_split_006.html)
- 结论依据:原文明确"存储引擎有4个部分:文件管理模块、缓冲区管理
模块、数据字典管理模块和存取控制管理模块……存取控制管理模块向上层
的接口是固定的,因此MySQL可以将此接口对外分开,独立开发多个存储
引擎,分别用于不同的应用场景",因此可以推出四模块分工及MySQL插件式
存储引擎架构的基础。
- 原始内容:存储引擎有4个部分:文件管理模块、缓冲区管理模块、数据
字典管理模块和存取控制管理模块……存取控制管理模块向上层的接口是
固定的,因此MySQL可以将此接口对外分开,独立开发多个存储引擎。