Mysql体系结构

  • 连接层

    接受客户端的连接,完成对连接的一些处理以及认证授权的操作,检查是否超过最大连接数等等。

  • 服务层

    大部分核心功能的实现场所,SQL接口,解析器,查询优化器,缓存和跨存储引擎的实现

  • 引擎层

    可插拔式的存储引擎,可以选择其中的一个引擎,也可以增加引擎。

    存储引擎控制的是mysql中数据的存储和提取的方式,服务器通过api与存储引擎进行通信。

    索引是在这一层实现的,不同存储引擎索引不同。

    InnoDB是Mysql5.5版本后的默认引擎

  • 存储层

    数据库中的数据存储在磁盘中,包括一堆日志,索引…..

    Mysql体系结构



存储引擎简介

引擎就是发动机,机器的核心部分,且不同引擎不同的应用场景,没有好坏之分

存储引擎是Mysql特有的,就是存储数据,建立索引,更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以也叫做表类型

查询默认引擎

show create table 表名;

查询当前数据库支持的存储引擎

show engines;

创建表时指定存储引擎

create table 表名(

​ name int comment ‘ok’

) engine = InnoDB (引擎名)



存储引擎特点

InnoDB

  • 介绍

是兼顾高可靠性高性能的通用存储引擎特点

  • 特点

DML操作遵循ACID模型,支持事务

行级锁,提高并发访问性能

支持外键FOREIGN KEY 约束,保证数据的完整性和正确性

  • 文件

    xxx.ibd: xxx代表表名,innoDB引擎的每张表都会对应这样一个表空间文件(磁盘文件),存储该表的表结构(frm(早期),sdi),数据和索引

    参数: innodb_file_per_table –> 默认是打开的->表明每张表代表一个表空间文件

  • 逻辑存储结构(有个印象)

  • TableSpace 表空间
  • Segment 段
  • Extent 区
  • Page 页
  • Row 行

ibd文件属于表空间文件,表空间中存储的是段,段中包含区,区中包含页,一个页中包含行,一行中包含

  1. Trx id 最后一次操作事务的 id
  2. Roll pointer 一些指针
  3. 一堆 column

在InnoDB逻辑结构中Page是磁盘操作的最小单元,一个Extend区大小固定为1M,一个Page大小为16K,1Extend=16Page


MyISAM

  • 介绍

    MyISAM是Mysql早期的默认存储引擎

  • 特点

    不支持事务,不支持外键

    支持表锁,不支持行锁

    访问速度快

  • 文件

    xxx.sdi 存储表结构信息

    xxx.MYD 存储数据

    xxx.MYI 存储索引


Memory

  • 介绍

    Memory引擎的表数据是存储在内存之中,由于受到硬件问题,断电问题,只能作为临时表或者缓存来处理

  • 特点

    内存存放

    支持hash索引(默认)

  • 文件

    xxx.sdi 存储表结构信息

    它的数据都是存放在内存之中的,所以不需要存储数据,索引的文件



存储引擎选择

选择合适的

  • InnoDB

    应用对事务的完整性有较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新,删除操作

  • MyISAM

    应用是以读操作和插入操作为主,很少的更新和删除操作。现在大部分都被Nosql替代了,

  • Memory

    临时表和缓存,但是太大表无法存放在内存中,数据安全性不能保障

  • 注意

    现在绝大部分场景都是使用InnoDB,MyISAM被MongoDB替代,Memory被redis替代,两者都属于Nosql



总结

这一章更多的是理论性

对存储引擎有个大概的了解,对Mysql体系有个大概的了解

今天是平安夜欸,yeebing跟我一起过平安夜

好吧只是在同一个办公室看电脑而已………