您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

InnoDB架构,一幅图秒懂

时间:2020-01-03 13:16:20  来源:  作者:

网上写MySQL架构的文章比较多,写InnoDB架构的文章比较少,今天简单说说InnoDB架构。

画外音:一分钟,一幅图,秒懂。

 

MySQL简要架构是怎么样的?

「转」InnoDB架构,一幅图秒懂

 

MySQL整体分为三层:

(1)客户端,是各种编程语言的connector;

(2)MySQL服务,内部包含各种组件,实现各种功能;

(3)文件系统,数据存储与日志;

 

其中,MySQL服务内,可以以插件的形式,实现各种存储引擎。

 

在InnoDB,MyISAM,Memory…等各种存储引擎中,InnoDB是使用范围最广的

画外音:事务,行锁,聚集索引,MVCC…众多特性让InnoDB备受青睐。

 

InnoDB简要架构是怎么样的?

「转」InnoDB架构,一幅图秒懂

 

InnoDB整体也分为三层:

(1)内存结构(In-Memory Structure),这一层在MySQL服务进程内;

(2)OS Cache,这一层属于内核态内存;

(3)磁盘结构(On-Disk Structure),这一层在文件系统上;

 

这三层的交互有两类:

(1)通过OS Cache落地数据(上图中,两个短箭头);

(2)直接O_Direct落地数据(长途中,长箭头);

画外音:这是一个性能与一致性折衷的设计

 

InnoDB内存结构包含哪些核心组件?

InnoDB内存结构包含四大核心组件,分别是:

(1)缓冲池(Buffer Pool);

(2)写缓冲(Change Buffer);

(3)自适应哈希索引(Adaptive Hash Index);

(4)日志缓冲(Log Buffer);

 

恰好,这四大核心组件,今年都详细的写过。

 

缓冲池(Buffer Pool)

目的是提升InnoDB性能,加速读请求,避免每次数据访问都进行磁盘IO。

画外音:和系统架构设计中缓存的功能有点像,避免每次访问数据库。

这里面涉及的技术点包括:预读,局部性原理,LRU,预读失败+缓冲池污染,新生代老生代双链LRU…细节参见《缓冲池(buffer pool),彻底懂了!》。

 

写缓冲(Change Buffer)

目的是提升InnoDB性能,加速写请求,避免每次写入都进行磁盘IO。

画外音:我C,这个牛逼,写入居然都可以不进行磁盘IO?

细节参见《写缓冲(change buffer),彻底懂了!》,这篇文章的细节原理,特别有意思。

 

自适应哈希索引(Adaptive Hash Index)

目的是提升InnoDB性能,加速读请求,减少索引查询的寻路路径。

这里面涉及的技术点包括:聚集索引,普通索引,哈希索引…细节参见《InnoDB到底支不支持哈希索引》。

 

日志缓冲(Log Buffer)

目的是提升InnoDB性能,极大优化redo日志性能,并提供了高并发与强一致性的折衷方案。

这里面涉及的技术点包括:redo log作用,流程,三层架构,随机写优化为顺序写,次次写优化为批量写…细节参见《事务已提交,数据却丢了,赶紧检查下LogBuffer》。

 

InnoDB磁盘结构包含哪些核心组件?

主要包括日志与表空间,其结构与原理比InnoDB内存结构更加复杂,如果大家感兴趣,未来再撰文详述。

 

「转」InnoDB架构,一幅图秒懂

 

一分钟系列,希望大家对InnoDB架构,以及InnoDB内存结构的四大组件有了更系统性的了解。

 

知其然,知其所以然,希望大家有收获。



Tags:InnoDB架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
网上写MySQL架构的文章比较多,写InnoDB架构的文章比较少,今天简单说说InnoDB架构。画外音:一分钟,一幅图,秒懂。 MySQL简要架构是怎么样的? MySQL整体分为三层:(1)客户端,是各种编程语...【详细内容】
2020-01-03  Tags: InnoDB架构  点击:(71)  评论:(0)  加入收藏
▌简易百科推荐
近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让 Flask 配合 Flasgger, 所以写了篇 Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了...【详细内容】
2021-12-23  Python阿杰    Tags:FastAPI   点击:(6)  评论:(0)  加入收藏
文章目录1、Quartz1.1 引入依赖<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version></dependency>...【详细内容】
2021-12-22  java老人头    Tags:框架   点击:(12)  评论:(0)  加入收藏
今天来梳理下 Spring 的整体脉络啦,为后面的文章做个铺垫~后面几篇文章应该会讲讲这些内容啦 Spring AOP 插件 (了好久都忘了 ) 分享下 4ye 在项目中利用 AOP + MybatisPlus 对...【详细内容】
2021-12-07  Java4ye    Tags:Spring   点击:(14)  评论:(0)  加入收藏
&emsp;前面通过入门案例介绍,我们发现在SpringSecurity中如果我们没有使用自定义的登录界面,那么SpringSecurity会给我们提供一个系统登录界面。但真实项目中我们一般都会使用...【详细内容】
2021-12-06  波哥带你学Java    Tags:SpringSecurity   点击:(18)  评论:(0)  加入收藏
React 简介 React 基本使用<div id="test"></div><script type="text/javascript" src="../js/react.development.js"></script><script type="text/javascript" src="../js...【详细内容】
2021-11-30  清闲的帆船先生    Tags:框架   点击:(19)  评论:(0)  加入收藏
流水线(Pipeline)是把一个重复的过程分解为若干个子过程,使每个子过程与其他子过程并行进行的技术。本文主要介绍了诞生于云原生时代的流水线框架 Argo。 什么是流水线?在计算机...【详细内容】
2021-11-30  叼着猫的鱼    Tags:框架   点击:(21)  评论:(0)  加入收藏
TKinterThinter 是标准的python包,你可以在linx,macos,windows上使用它,你不需要安装它,因为它是python自带的扩展包。 它采用TCL的控制接口,你可以非常方便地写出图形界面,如...【详细内容】
2021-11-30    梦回故里归来  Tags:框架   点击:(27)  评论:(0)  加入收藏
前言项目中的配置文件会有密码的存在,例如数据库的密码、邮箱的密码、FTP的密码等。配置的密码以明文的方式暴露,并不是一种安全的方式,特别是大型项目的生产环境中,因为配置文...【详细内容】
2021-11-17  充满元气的java爱好者  博客园  Tags:SpringBoot   点击:(25)  评论:(0)  加入收藏
一、搭建环境1、创建数据库表和表结构create table account(id INT identity(1,1) primary key,name varchar(20),[money] DECIMAL2、创建maven的工程SSM,在pom.xml文件引入...【详细内容】
2021-11-11  AT小白在线中  搜狐号  Tags:开发框架   点击:(29)  评论:(0)  加入收藏
SpringBoot开发的物联网通信平台系统项目功能模块 功能 说明 MQTT 1.SSL支持 2.集群化部署时暂不支持retain&will类型消 UDP ...【详细内容】
2021-11-05  小程序建站    Tags:SpringBoot   点击:(56)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条