本文源码:GitHub·点这里 || GitEE·点这里

一、MySQL逻辑架构

1、逻辑架构图

基于下面的逻辑架构图,可以大致熟悉MySQL各个架构组件之间的协同工作关系。

很经典的C/S架构风格,即客户端/服务端模式。

2、分层描述

  • 客户端连接

通常会进行连接池管理,连接用户权限认证,安全管理等操作。

可以通过如下命令查看连接配置信息:SHOW VARIABLES LIKE '%connect%';可以看到最大连接和每个连接占用的内存等相关配置。

  • 核心功能

第二层架构封装MySQL一系列核心操作,查询解析、优化、缓存、内置函数、触发器、视图等,跨存储引擎的功能都在这一层实现。

  • 存储引擎

MySQL的最底层封装,也是最核心的功能,不同的存储引擎有不同的特点功能,共同点是处理数据的存储和提取。

二、概念简介

1、存储引擎

MySQL数据库存储引擎是数据库底层的架构组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还具有不同的特点功能,以满足不同场景下的业务需求。

2、支持关系

可以通过下面两个命令查看MySQL当前版本,和对存储引擎的支持情况。

SELECT VERSION() ; SHOW ENGINES ;

可以看出本地环境是MySQL5.7,支持如下几种存储引擎:

该版本下默认的存储引擎是:InnoDB,功能最为丰富和强大,支持事务,分布式事务,事务保存点。

三、常见存储引擎

1、InnoDB引擎

(1)、基本描述

InnoDB引擎是MySQL默认的事务型引擎,使用非常广泛,极擅长处理短期事务,具有自动崩溃恢复的特性,在日常开发中,一般都要求使用该引擎。

(2)、架构图解

  • InnoDB架构图

该图片来自MySQL官网文档。

整体分三层:内存结构,Cache,磁盘结构。

  • 内存结构

内存结构又包括四大组件

Buffer Pool:缓冲池:是主内存中的一个区域,在InnoDB访问表和索引数据时会在其中进行高速缓存,大量减少磁盘IO操作,提升效率。

Change Buffer:写缓冲区:避免每次增删改都进行IO操作,提升性能。

Adaptive Hash Index:自适应哈希索引:使用索引关键字的前缀构建哈希索引,提升查询速度。

Log Buffer:日志缓冲区:保存要写入磁盘上的日志文件的数据,缓冲区的内容定期刷新到磁盘。

  • 磁盘结构

Tables:数据表的物理结构。

Indexes:索引的物理结构。

Tablespaces:表空间,数据存储区域。

Data Dictionary:数据字典,存储元数据信息的表,例如表的描述,结构,索引等。

Doublewrite Buffer:位于系统表空间的一个存储区域,InnoDB在BufferPool中刷新页面时,会将数据页写入该缓冲区后才会写入磁盘。

Redo Log:记录DML操作的日志,用来崩溃后的数据恢复。

Undo Logs:数据更改前的快照,可以用来回滚数据。

(3)、特点描述

  • 支持事务

事务内在执行一组SQL语句时,要么全部成功,要么全部失败。

  • 支持分布式事务

分布式事务指即使不同操作位于不同的服务应用上,仍然需要保证事务的特性。常见场景:订单和库存在不同的服务中,但却能保持一致性。

  • 支持行级锁

加锁时锁定一行数据的锁机制就是行级别锁定(row-level)。MySQL5.7版本中只有InnoDB引擎支持。锁定的粒度小,自然支持的并发就高,锁定的机制也随之变的复杂。

  • 支持MVCC

多版本并发控制,通过保存数据在某个时间点的快照来实现的。这意味着一个事务无论运行多长时间,在同一个事务里能够看到数据一致的视图。根据事务开始的时间不同,同时也意味着在同一个时刻不同事务看到的相同表里的数据可能是不同的。

  • 支持聚簇索引

是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序。由于聚簇索引的索引页面指针指向数据页面,所以使用聚簇索引查找数据几乎总是比使用非聚簇索引快。

2、MyISAM引擎

(1)、基础描述

MySQL5.1和之前版本的默认存储引擎,不支持事务和行级锁,自然崩溃之后不能自动恢复。

(2)、特点描述

  • 锁表机制

对整张表加锁,不针对行加锁,读数据加共享锁,写数据加排他锁。

  • 全文索引

支持全文索引,一种基于分词创建的索引,可以支持复杂的检索查询。

3、其他引擎

在MySQL的体系中,最常使用的就是InnoDB和MyISAM引擎,其他多样的存储引擎可以根据业务需求再去熟悉。

絮叨一句:人生苦短,编程语言更是五马六路,这点令人烦躁,所以学习的时候要挑重点,什么是重点,使用最多的就是重点内容。

四、存储引擎选择

在公司的开发规范中,一般硬性要求使用InnoDB引擎,除非有怪癖的业务InnoDB无法支持。

五、源代码地址

GitHub·地址
https://github.com/cicadasmile/mysql-data-base
GitEE·地址
https://gitee.com/cicadasmile/mysql-data-base

MySQL基础篇(05):逻辑架构图解和InnoDB存储引擎详解的更多相关文章

  1. MySQL基础篇(06):事务管理,锁机制案例详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.锁概念简介 1.基础描述 锁机制核心功能是用来协调多个会话中多线程并发访问相同资源时,资源的占用问题.锁机制是一个非常大的模块,贯彻MyS ...

  2. MySQL数据库的各种存储引擎详解

    原文来自:MySQL数据库的各种存储引擎详解   MySQL有多种存储引擎,每种存储引擎有各自的优缺点,大家可以择优选择使用: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB ...

  3. mysql的innodb数据库引擎详解

    http://www.jb51.net/softjc/158474.html   这篇文章主要介绍了mysql的innodb数据库引擎,需要的朋友可以参考下   一.mysql体系结构和存储引擎 1. ...

  4. MySQL技术内幕读书笔记(二)——InnoDB存储引擎

    目录 InnoDB存储引擎 InnoDB存储架构 Checkpoint技术 Master Thread 工作方式 InnoDB关键特性(放一下,感觉看后面,再看总结吧) InnoDB存储引擎 Inno ...

  5. Linux MySQL 存储引擎详解

    MySQL常用的存储引擎为MyISAM.InnoDB.MEMORY.MERGE,其中InnoDB提供事务安全表,其他存储引擎都是非事务安全表. MyISAM是MySQL的默认存储引擎.MyISAM不支 ...

  6. Mysql—存储引擎详解

    存储引擎基本操作 查看数据库支持的所有的存储引擎 mysql> show engines; 查看数据库目前使用的引擎 mysql> show varlables like "%s ...

  7. MYSQL—— 基础入门,select 查询涉及到的关键字组合详解(进阶篇)

    SELECT查询组合使用的关键字很多,首先将最简单常用的关键字进行区分及使用,后续再继续补充............ 以下所有的关键字组合使用,主要以两个表students与students_scor ...

  8. Spring 框架基础(06):Mvc架构模式简介,执行流程详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集 ...

  9. 【MySQL】大白话讲讲主从架构的几种搭配方式详解

    话不多,直接上图: 主要来详细讲讲各个搭配 1>一主一从(成本最低): 并不是用来提高程序性能的,主要是用来做数据的热备(即如果master节点挂掉的话,slave节点能充当master节点), ...

随机推荐

  1. Android 5.0 5.1 webview 闪退问题

    自定义webview /** * 处理Android 5.0 5.1 webview 闪退 */ class MyWebView : WebView { companion object{ priva ...

  2. 详解python可迭代对象、迭代器和生成器

    可迭代对象 什么是可迭代对象?顾名思义就是可以迭代的一个对象,再通俗点就是可以被for循环遍历的对象,如常用的list.str等数据类型.我们可以使用isinstance来判断这个数据是否是可迭代对象 ...

  3. std::string和ctime之间的转换

    int year, month, day, hour, minute, second; string strTime: sscanf(strTime.c_str(), "%d-%d-%d % ...

  4. 远程关机 (Windows shutdown Windows)

    在某些场景,可使用远程关机控制整个局域网中的所有电脑进行一键关机或重启,便于管理,以提高工作效率. 从远程系统强制关机,首先需要进行一些必要的设置. 1.使用 win + R 打开运行,输入gpedi ...

  5. vim模式及基础命令

    VIM基本介绍vi和在修改vim命令是linux中强大的文本编辑器,由于linux系统一切皆文件,而配置一个服务就是在修改其配置文件的参数vim其实是vi的升级版yum install -y vim ...

  6. BigDecimal进行精确运算

    public class Test_1 { public static void main(String[] args) { System.out.println(0.06+0.01); System ...

  7. [LC] 107. Binary Tree Level Order Traversal II

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  8. 复习break、continue、while、do-while的运用

    一.复习: 循环.反复执行某段语句一种语法形式. 1.基本语法: for( 初始条件 ; 循环条件 ; 状态的改变 ) { 循环体 } 循环的四要素. 循环的执行过程.初始条件--循环条件--循环体- ...

  9. 瑞星:以虚拟化安全“Hold住”企业用户

    自从云计算的概念诞生的哪一天起,就吸引了无数人的目光.自从2006年开始,云计算经过了雾里看花的朦胧.众说纷纭的迷茫,到现在各类应用与服务呈现出了百花齐放的姿态,引领着信息科技迈入了新纪元,而服务器虚 ...

  10. python代码覆盖率统计-coverage

    coverage.py是一个用来统计python程序代码覆盖率的工具.它使用起来非常简单,并且支持最终生成界面友好的html报告.在最新版本中,还提供了分支覆盖的功能. 官方网站: http://ne ...