当前位置: 首页 > article >正文

几张图就让你掌握InnoDB 存储引擎底层逻辑架构

在这里插入图片描述

前言

🚀 博主介绍:大家好,我是无休居士!一枚任职于一线Top3互联网大厂的Java开发工程师! 🚀

💡 无论你是刚刚踏入编程世界的新人,还是希望进一步提升自己的资深开发者,在这里都能找到适合你的内容。我们共同探讨技术难题,一起进步,携手度过互联网行业的每一个挑战

📣 如果你觉得我的文章对你有帮助,请不要吝啬你的点赞👍分享💕和评论哦! 让我们一起打造一个充满正能量的技术社区吧!


目录标题

  • 前言
  • 1.MySQL的整体架构
  • 2.InnoDB存储引擎架构的内存和磁盘结构
    • 2.1InnoDB内存结构
    • 2.2InnoDB磁盘结构
  • 3.InnoDB内存结构空间复杂度和时间复杂度分析 ⏳
    • 3.1 空间复杂度
    • 3.2 时间复杂度


InnoDB是MySQL默认的存储引擎,它支持事务处理、行级锁定以及外键约束等特性。InnoDB的设计目标是提供高性能和高可靠性,因此它的内部结构非常复杂且高效。

InnoDB使用了多种内存缓冲区来提高性能,主要包括:

  • Buffer Pool:用于缓存表数据和索引。
  • Change Buffer:用于缓存插入、更新和删除操作。
  • Adaptive Hash Index:自适应哈希索引,加速某些查询。
  • Log Buffer:日志缓冲区,用于缓存重做日志(redo log)。

InnoDB的数据存储在磁盘上,主要包含以下几个部分:

  • System Tablespace:系统表空间,包含数据字典和其他系统信息。
  • File-per-Table Tablespaces:每个表一个文件的表空间,用于存储单个表的数据。
  • Redo Log Files:重做日志文件,记录事务的变更。
  • Undo Log:回滚日志,用于事务回滚和MVCC(多版本并发控制)。

1.MySQL的整体架构

在这里插入图片描述

2.InnoDB存储引擎架构的内存和磁盘结构

官网架构
在这里插入图片描述
由图可知 InnoDB的底层结构主要由2部分组成:内存结构和磁盘结构。
在这里插入图片描述

个人理解

在这里插入图片描述

在这里插入图片描述

2.1InnoDB内存结构

在这里插入图片描述

2.2InnoDB磁盘结构

在这里插入图片描述

在这里插入图片描述
磁盘中各数据页的整体结构如下图所示:
在这里插入图片描述
单个数据页包含哪些内容呢?
在这里插入图片描述

在这里插入图片描述

3.InnoDB内存结构空间复杂度和时间复杂度分析 ⏳

3.1 空间复杂度

  • Buffer Pool:假设缓存页数为 N,每页大小为 M,则空间复杂度为 O(N * M)
  • Change Buffer:假设变更操作数量为 K,则空间复杂度为 O(K)
  • Adaptive Hash Index:假设哈希索引条目数量为 H,则空间复杂度为 O(H)
  • Log Buffer:假设日志条目数量为 L,则空间复杂度为 O(L)

3.2 时间复杂度

  • Buffer Pool:读写操作的时间复杂度为 O(1)(哈希查找)。
  • Change Buffer:添加变更操作的时间复杂度为 O(1)(队列操作)。
  • Adaptive Hash Index:查找操作的时间复杂度为 O(1)(哈希查找)。
  • Log Buffer:写入日志的时间复杂度为 O(1)(列表追加)。

http://www.kler.cn/news/363522.html

相关文章:

  • 查看centos系统版本
  • CV2通过一组轮廓点扣取图片
  • JavaScript进阶:手写代码挑战(二)
  • 【代码随想录Day50】图论Part02
  • Maven的简单认识 4-Maven插件
  • 【2024】【字节青训营】:字节青训营入营测试题——Java版本(已提交通过)
  • linux_c IPC消息队列练习
  • OpenHarmony 目前所有体系详细介绍
  • Git的多人协作模式与企业级开发模型
  • 【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (三):Cors的设置及.env文件的设置
  • 2024年03月中国电子学会青少年软件编程(图形化)等级考试试卷(四级)答案 + 解析
  • java字段判空方法Assert.hasText()详细讲解
  • 智慧城市垃圾分类可视化
  • 提示词高级阶段学习day3.1什么是结构化 Prompt ?
  • 算法魅力-双指针之滑动窗口的叛逆
  • 吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)3.9-3.10
  • 【vue + mockjs】Mockjs——数据接口模拟
  • git clone卡在Receiving objects
  • matlab生成mipi crc值
  • MySQL 中的连表是怎样实现的?为什么大厂不使用连表查询?
  • Python 文件路径与文件系统操作
  • springboot RedisTemplate支持多个序列化方式
  • MacOS RocketMQ安装
  • 「AIGC」AI设计工具Polymet
  • mac m1 git clone 忽略大小写敏感
  • Linux 部署 Harbor 镜像仓库详解