vlambda博客
学习文章列表

MySql逻辑架构浅谈

MySql简介

      MySql是一个开源的关系型数据库管理系统。MySQL 数据库服务器非常快速、可靠、可扩展且易于使用。MySQL 数据库软件是一个客户端/服务器系统,由一个支持不同后端的多线程 SQL 服务器、几个不同的客户端程序和库、管理工具和广泛的应用程序编程接口 (API) 组成。


MySql逻辑架构



  1. 最上层中主要提供了客户端和连接服务。包含本地socket通信和大多数基于客户端/服务端工具实现了类似tcp/ip的通信。

  2. 第二层架构主要提供了最核心的服务功能。例如,系统管理和控制工具(Management Serveices & Utilities);连接池(Connection Pool);Sql 接口(Sql Interface),主要接受SQL,DML,DDL等执行语句;解析器(Parse)语法解析分析,使sql语句形成正确的语法树;查询优化器(Optimizer)优化查询语句,优化索引使用;查询缓存(Caches & Buffers),缓存查询结果集,用sql语句的hash值做唯一键。

  3. 第三层为存储引擎


    存储引擎
    说明
    MyISAM
    高速引擎,拥有较高的插入,查询速度,但不支持事务、不支持行锁、支持3种不同的存储格式。包括静态型,动态型和压缩型。
    InnoDB
    5.5版本后MySQL 的默认数据库,支持事务和行级锁定,事务处理、回滚、崩溃修复能力和多版本并发控制的事务安全,比MyISAM 处理速度稍慢,支持外键(FOREIGN KEY )
    ISAM
    MyISAM 的前身,MySQL 5.0以后不在默认安装
    MRG_MyISAM(MERGE)
    将多个表联合成一个表使用,在超大规模数据存储时很有用
    Memory
    内存存储引擎,拥有极高的插入、更新和查询效率。但是会占用和数据量成正比的内存空间。只在内存上保存数据,意味着数据可能会丢失
    Falcon
    一种新的存储引擎,支持事务处理,传言可能是InnoDB的替代者
    Archive
    将数据压缩后进行存储,非常适合存储大量的独立的,作为历史记录的数据,但是只能进行插入和查询操作。
    CSV
    CSV存储引擎是基于CSV格式文件存储数据(引用于夸平台的数据交换)
  4. 最后为数据存储层,主要将数据存储在运行的设备文件系统上,并完成与存储引擎的交互。

MySql SQL 基本执行流程


MySql 物理结构

  • MySQL 是通过文件系统对数据和索引进行存储的

  • MySQL 从物理结构上可以分为日志文件和数据索引文件

  • MySQL 在Linux中的数据索引文件和日志文件都在/var/lib/mysql 目录下

  • 日志文件采用顺序IO方式进行存储、数据文件采用随机IO方式存储。

    • 顺序IO:优势:记录速度快,只能追加,劣势:浪费空间。适合场景:日志记录

    • 随机IO:优势:省空间,劣势:相对慢 ,适合场景:数据+索引

日志文件

  • 错误日志(error log) :默认是开启的,而且从5.5.7版本后无法关闭日志,主要是记录了运行过程中遇到的所有严重的错误信息,以及MySql每次启动和关闭的详细信息。

  • 二进制日志(bin log ) :记录数据变化。记录了数据库所有的ddl语句和dml语句,但不包含select 语句内容。(生产开启,用于:数据备份,恢复,主从)

  • 通用查询日志(general query log :啥都记录,耗性能,生产中不开启。

  • 慢查询日志(slow query log ):作用:SQL 调优,默认是关闭的,需要手动开启。

  • 重做日志(redo log)

  • 回滚日志(undo log)

  • 中继日志(relay log)

数据文件

  • InnoDB 存储引擎数据文件

    • .frm文件:主要存放与表相关的数据信息,主要包括表结构的定义信息。

    • .ibd :使用独享表空间存储表数据和索引信息,一张表对应一个ibd文件。

    • ibdata文件:使用共享表空间存储表数据和索引信息,所有表共同使用一个或者多个ibdata文件。

  • MyISAM 数据文件

    • .frm文件:主要存放与表相关的数据信息,主要包括表结构的定义信息

    • .myd文件:主要用来存储表数据信息

    • .myi文件:主要用来存储表数据文件中任何索引的数据树。

InnoDB和MyISAM存储引擎的区别


InnoDB
MyISAM
存储文件

.frm表定义文件

.ibd 数据文件和索引文

.frm表定义文件

.myd 数据文件

.myi索引文件

表锁,行锁 表锁
事务 支持 不支持
CRUD 读,写 读多
count 扫表 专门存储的地方(加where也扫表)
索引结构 B+Tree B+Tree
外键 支持 不支持


结语:会当凌绝顶,一览众山小 ---杜甫