mysql的架构

A 构架
MySQL(最大的特色就是把查询处理与 实际的数据存储和提取(存储引擎)的操作分开了。其整体的[架构]如下:


mysql的架构_第1张图片
20150.jpg

1.Connectors 看到JDBC就懂起了,是连接mysql的各种客户端 和接口 是我外部调用
2.Connection Pool 用于创建用户连接,缓存连接线程,做连接池。 还有鉴权 进行身份验证、线程重用,连接限制,检查内存,数据缓存;管理用户的连接,线程处理等需要缓存的需求
3.Management Serveices & Utilities: 系统管理和控制工具备份和恢复的安全性,复制,集群,管理,配置,迁移和元数据
4.SQL Interface: SQL接口。接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface。进行 DML、DDL,存储过程、视图、触发器等操作和管理;用户通过 SQL 命令来查询所需结果
5.Parser: 解析器。
SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。主要功能:
a . 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的
b. 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的
6.Optimizer: 查询优化器 SQL语句在查询之前会使用查询优化器对查询进行优化。他使的是“选取-投影-联接”策略进行查询。
用一个例子就可以理解: select uid,name from user where gender = 1;这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤,这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤将这两个查询条件联接起来生成最终查询结果
7.Cache和Buffer: 查询缓存 如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等
8.Engine :存储引擎。
存储引擎是MySql中具体的与文件打交道的子系统。也是Mysql最具有特色的一个地方。
Mysql的存储引擎是插件式的。它根据MySql AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制(这种访问机制就叫存储引擎)现在有很多种存储引擎,各个存储引擎的优势各不一样,最常用的MyISAM,InnoDB,BDB默认下MySql是使用MyISAM引擎,它查询速度快,有较好的索引优化和数据压缩技术。但是它不支持事务。InnoDB支持事务,并且提供行级的锁定,应用也相当广泛。
Mysql也支持自己定制存储引擎,甚至一个库中不同的表使用不同的存储引擎,这些都是允许的。
mysql 常用存储引擎
3.1.1 myisam 存储引擎
主要的存储文件有.frm主要是用来记录表结构。.MYD存储数据.MYI存储索引。myisam支持的是表级锁,通过check table 检查是否损坏,通过repair table修复myisam 支持全文索引,myisam 可以进行压缩(myisampck)适用于非事务型应用,只读类应用。
3.1.2 innodb 存储引擎
.frm文件存储了innodb表结构文件innodb有表空间的概念。当innodb_file_per_table=ON时。则采用独立表空间,此时,innodb数据存储在tablename.ibd文件中,否则,则采用系统表空间,存储在ibdataX中innodb支持事务,通过Redo Log 和Undo Log来进行实现。undo log主要是帮助未提交事务进行回滚和MVCC(多版本并发控制),redo log 存储的是已经提交的事务。innodb支持行级锁。是mysql 5.5后的默认存储引擎,其主要的适用场景是有事务处理的情况。
3.1.3 csv存储引擎
csv存储引擎的是以文本形式存储,可以直接进行编辑存储文件主要有.CSV文件主要是用来存储表内容,.CSM文件存储表的元数据如表状态和数据量.frm文件存储表结构信息。csv存储引擎列不能为空,不支持索引。csv存储引擎适用于数据交换的中间表 电子表格 ->> csv 文件 ->> mysql数据
3.1.4 Archive存储引擎
Archive存储引擎以zlib对表数据进行压缩,磁盘I/O更少。只支持insert和select操作,并且只能在自增列上建立索引。以.ARZ存储数据可以用于日志和数据采集的表
3.1.4 Memory存储引擎
Memory存储引擎的所有数据都是存储在内存中。支持HASH和BTree索引。所有的字段都是固定长度,不支持BLOG和TETX类型,使用表级锁。引擎的大小由max_heap_table_size参数决定。

你可能感兴趣的:(mysql的架构)