MySql逻辑架构浅谈
MySql简介
MySql是一个开源的关系型数据库管理系统。MySQL 数据库服务器非常快速、可靠、可扩展且易于使用。MySQL 数据库软件是一个客户端/服务器系统,由一个支持不同后端的多线程 SQL 服务器、几个不同的客户端程序和库、管理工具和广泛的应用程序编程接口 (API) 组成。
MySql逻辑架构
最上层中主要提供了客户端和连接服务。包含本地socket通信和大多数基于客户端/服务端工具实现了类似tcp/ip的通信。
第二层架构主要提供了最核心的服务功能。例如,系统管理和控制工具(Management Serveices & Utilities);连接池(Connection Pool);Sql 接口(Sql Interface),主要接受SQL,DML,DDL等执行语句;解析器(Parse)语法解析分析,使sql语句形成正确的语法树;查询优化器(Optimizer)优化查询语句,优化索引使用;查询缓存(Caches & Buffers),缓存查询结果集,用sql语句的hash值做唯一键。
第三层为存储引擎
存储引擎 说明 MyISAM 高速引擎,拥有较高的插入,查询速度,但不支持事务、不支持行锁、支持3种不同的存储格式。包括静态型,动态型和压缩型。 InnoDB 5.5版本后MySQL 的默认数据库,支持事务和行级锁定,事务处理、回滚、崩溃修复能力和多版本并发控制的事务安全,比MyISAM 处理速度稍慢,支持外键(FOREIGN KEY ) ISAM MyISAM 的前身,MySQL 5.0以后不在默认安装 MRG_MyISAM(MERGE) 将多个表联合成一个表使用,在超大规模数据存储时很有用 Memory 内存存储引擎,拥有极高的插入、更新和查询效率。但是会占用和数据量成正比的内存空间。只在内存上保存数据,意味着数据可能会丢失 Falcon 一种新的存储引擎,支持事务处理,传言可能是InnoDB的替代者 Archive 将数据压缩后进行存储,非常适合存储大量的独立的,作为历史记录的数据,但是只能进行插入和查询操作。 CSV CSV存储引擎是基于CSV格式文件存储数据(引用于夸平台的数据交换) 最后为数据存储层,主要将数据存储在运行的设备文件系统上,并完成与存储引擎的交互。
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 |
外键 | 支持 | 不支持 |
结语:会当凌绝顶,一览众山小 ---杜甫