MySQL逻辑架构组件
MySQL逻辑架构整体分为三层:
- 连接层:包括客户端和连接服务,如sock通信和基于连接工具的tcp/ip的通信。主要完成连接连接处理、授权认证、安全等功能,引入线程池,为通过安全认证的客户端提供线程。
- 核心服务层:包括查询解析、分析、优化、缓存、内置函数(比如:时间、数学、加密等函数)。所有的跨存储引擎的功能也在这一层实现:存储过程、触发器、视图等。
- 引擎层:其负责MySQL中的数据存储和提取,服务层通过API与存储引擎通信,这些API接口屏蔽了不同存储引擎间的差异
- 存储:数据存储层,主要是将数据存储于文件系统之上,并完成与存储引擎的交互。
MySQL逻辑架构组件
连接层
- Connectors:不同的计算机语言和MySQL的交互、连接工具
服务层
该层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化及部分内置函数的执行。
- Management Serveices & Utilities:系统管理和控制工具
- SQL interface:接收sql命令,返回结果。
- Parser:SQL命令解析
- optimizer:查询优化器
- Cache&Buffer:从缓存中获取数据查询结果
引擎层
MySQL数据存储引擎,不同的存储引擎具有的功能不同。存储引擎就是存储数据,建立索引,更新查询数据等等技术的实现方式 。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。在 MySQL 中,可以利用 SHOW ENGINES 语句来显示可用的数据库引擎和默认引擎。
mysql> SHOW ENGINES
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
MySQL 5.7 支持的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE 等。
#修改数据库临时的默认存储引擎
SET default_storage_engine=< 存储引擎名 >
存储引擎的选择
在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。以下是几种常用的存储引擎的使用环境:
- InnoDB : 是Mysql的默认存储引擎,用于事务处理应用程序,支持外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询意外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择。InnoDB存储引擎除了有效的降低由于删除和更新导致的锁定, 还可以确保事务的完整提交和回滚,对于类似于计费系统或者财务系统等对数据准确性要求比较高的系统,InnoDB是最合适的选择。
- MyISAM : 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。
存储层
所有的数据,数据库、表的定义,表的每一行的内容,索引,都是存在 文件系统 上,以文件 的方式存在的,并完成与存储引擎的交互。在文件系统之下,可以使用本地磁盘,可以使用DAS、NAS、SAN等各种存储系统。