MST

星途 面试题库

面试题:MariaDB源代码中存储引擎相关结构

请简要描述MariaDB源代码中常见存储引擎(如InnoDB、MyISAM)的相关结构,包括但不限于数据结构、接口定义以及与其他模块的交互方式。
12.8万 热度难度
数据库MariaDB

知识考点

AI 面试

面试题答案

一键面试

InnoDB存储引擎

  1. 数据结构
    • 聚簇索引:InnoDB将数据和索引存储在一起,表数据文件本身就是按B+树组织的一个索引结构,叶节点包含完整的数据行。这种结构使得按主键查询效率极高。
    • 辅助索引:也是B+树结构,叶节点存储的是主键值,通过辅助索引查询到主键后,再通过主键索引获取完整数据,即所谓的回表操作。
    • 表空间:包含多个段(Segment),段由区(Extent)组成,区又由页(Page)构成。常见的表空间有系统表空间、用户表空间等。
  2. 接口定义
    • 存储引擎接口:提供诸如 ha_open 用于打开表,ha_close 用于关闭表,ha_read_row 用于读取数据行等接口函数。这些接口与上层数据库核心模块交互,使得数据库核心能以统一方式操作不同存储引擎。
    • 事务接口:支持事务相关操作,如 trx_start 开始事务,trx_commit 提交事务,trx_rollback 回滚事务。通过这些接口保证事务的ACID特性。
  3. 与其他模块交互方式
    • 与缓冲池模块:缓冲池用于缓存数据页和索引页,InnoDB通过缓冲池接口将经常访问的数据页加载到内存中,以提高读写性能。当数据页发生修改时,会将其标记为脏页,后续由缓冲池的刷新机制将脏页写回磁盘。
    • 与日志模块:InnoDB使用重做日志(redo log)来保证崩溃恢复(crash - recovery)能力。在进行数据修改前,会先将修改操作记录到重做日志中。同时,通过回滚日志(undo log)实现事务的回滚以及MVCC(多版本并发控制)。

MyISAM存储引擎

  1. 数据结构
    • 索引结构:MyISAM使用非聚簇索引,数据文件和索引文件是分离的。索引文件也是B+树结构,叶节点存储的是数据的物理地址。
    • 表结构:表由.frm文件存储表结构定义,.MYD文件存储数据,.MYI文件存储索引。
  2. 接口定义
    • 同样提供类似 ha_openha_closeha_read_row 等标准存储引擎接口与上层数据库核心交互。但MyISAM不支持事务,所以没有事务相关接口。
  3. 与其他模块交互方式
    • 与缓存模块:MyISAM自身有键缓存(key buffer),用于缓存索引块,提高索引访问性能。与InnoDB不同,MyISAM不缓存数据,只缓存索引。
    • 与锁模块:MyISAM使用表级锁,在执行写操作(如 INSERTUPDATEDELETE)时,会锁定整个表,以保证数据一致性。读操作(如 SELECT)时也会对表加读锁,防止写操作干扰。