目录
补充知识:Lock和Latch的区别(存储引擎并发操作和事务并发操作的不同)
补充知识:In-place和Out-of-place update方案差异
引言
数据库有三大模块:存储、事务、sql。
其中,存储模块负责数据在磁盘和内存上的存储、检索和管理,并向上层提供细粒度的数据操作接口。
因为存储和其他模块耦合较少,可以把它具象为一个专用的数据库组件,存储引擎。
存储引擎(Storage Engine)是数据库系统的组件,负责管理数据的物理存储和检索。在某些数据库系统中,存储引擎是可插拔的,这意味着可以选择或更换不同的存储引擎来适应不同的应用需求。存储引擎负责实际的数据存储、索引管理、事务支持、锁机制、崩溃恢复等底层操作。不同的存储引擎可能在这些方面有不同的实现方式,从而提供不同的性能和功能特性。
MySQL 是一个支持多种存储引擎的数据库系统。用户在创建表时,可以指定使用哪种存储引擎(如 InnoDB、MyISAM、Memory 等)。每个存储引擎都有自己的特点。
例如 InnoDB 支持事务和外键,
而 MyISAM 不支持事务但提供了更快的读操作。
根据应用场景的需求,用户可以选择最适合的存储引擎。
例如,
如果应用需要强事务支持和数据完整性保障,InnoDB 通常是首选;
如果需要高效的读操作和较少的写操作,并且不需要事务支持,MyISAM 可能更适合。
在 MySQL 中,一个数据库中的不同表可以使用不同的存储引擎。
例如,
一个数据库的用户表可以使用 InnoDB 存储引擎,以获得事务支持,
而日志表可以使用 MyISAM 存储引擎,以获得更高的写入性能。
对于存储而言,最重要的就是数据存储的结构(也即,数据结构!);
内存、缓存、读写流程的任何设计都是建立在存储结构的基础之上的!因此,存储结构和存储引擎的特性和性能关系非常密切!
存储引擎和存储结构
存储引擎和存储结构之间的关系可以类比为「软件」和「数据组织方式」的关系。存储引擎决定了数据的存储、检索、管理方式,而存储结构则是存储引擎在物理层面上实现这些功能所使用的具体数据组织形式。
存储引擎是数据库系统中负责管理数据存储和检索的核心组件,而存储结构则是存储引擎实现其功能的物理组织方式。存储引擎通过设计合理的存储结构来满足特定的性能要求和功能需求,两者密切关联,共同决定了数据库系统的数据管理效率和功能特性。
两者的关系
- 存储引擎实现存储结构:存储引擎负责实现和操作存储结构。换句话说,存储引擎通过设计和管理存储结构来实现其功能。
- 例如,InnoDB 存储引擎使用 B+ 树作为其索引结构,并使用数据页(通常为 16KB)作为基本的存储单位来管理表的数据。
- 存储结构为存储引擎服务:存储结构的设计必须服务于存储引擎的功能需求。
- 例如,InnoDB 的存储结构支持事务处理,因此它在存储结构中设计了事务日志(Redo Log 和 Undo Log)来支持事务的提交、回滚和崩溃恢复。
- 灵活性与优化:存储引擎通过灵活的存储结构设计来优化特定的操作。
- 例如,为了优化随机读写性能,存储引擎可能会使用聚簇索引(Clustered Index)将相关数据紧密存储在一起,减少磁盘的I/O操作。
存储结构
存储结构是指数据在物理存储介质(如磁盘、SSD)上的具体组织形式,用于支持数据库的高效存储、访问和管理。
分类
根据不同的应用需求和设计目标,存储结构可以分为多种类型。以下是存储结构的几种常见分类:
1. 按数据组织方式分类
-
堆存储(Heap Storage):
- 数据以无序的方式存储在表中,新插入的数据通常会被放置在表的末尾。
- 优点:插入操作较快,不需要维护数据的顺序。
- 缺点:数