MySQL架构

1.MySQL逻辑架构:


这里分为三层:
1.连接层:连接与线程处理,这一层并不是MySQL独有,一般的基于C/S架构的都有类似组件,比如连接处理、授权认证、安全等。
2.SQL处理层:也叫MySQL服务器层,包括缓存查询、解析器、优化器,这一部分是MySQL核心功能,包括解析、优化SQL语句,查询缓存目录,内置函数(日期、时间、加密等函数)的实现
3.数据存储层:也叫存储引擎层,负责数据存储,存储引擎的不同,存储方式、数据格式、提取方式等都不相同,这一部分也是很大影响数据存储与提取的性能的。但是,与分层的思想一致,SQL处理层是通过API与存储引擎通信的,API屏蔽了下层的差异,下层提供对外接口,上层负责调用即可,不必清楚下层是怎么实现的。

客户端说明:MySQL是基于C/S架构的,这里的客户端自然是专门的,能访问到MySQL服务器的,主要有这么几类,操作客户端:单纯的操作MySQL服务器中的数据(这里数据包括库、表、索引、表中数据等),比如常用的native、phpMyAdmin、Sequal Pro等;应用客户端:应用程序通过程序访问数据库,比如JDBC、ODBC、PHP程序、python程序等。不管是哪种,其实最后都转换为SQL语句访问MySQL。

1.连接层

  当MySQL启动(MySQL服务器就是一个进程),等待客户端连接,每一个客户端连接请求,服务器都会新建一个线程处理(如果是线程池的话,则是分配一个空的线程),每个线程独立,拥有各自的内存处理空间,但是,如果这个请求只是查询,没关系,但是若是修改数据,很显然,当两个线程修改同一块内存是会引发数据同步问题的。
>连接处理流程

  连接到服务器,服务器需要对其进行验证,也就是用户名、IP、密码验证,一旦连接成功,还要验证是否具有执行某个特定查询的权限(例如,是否允许客户端对某个数据库某个表的某个操作)。
>认证流程

2.SQL处理层

  这一层主要功能有:SQL语句的解析、优化,缓存的查询,MySQL内置函数的实现,跨存储引擎功能(所谓跨存储引擎就是说每个引擎都需提供的功能(引擎需对外提供接口)),例如:存储过程、触发器、视图等。

>执行过程:


(图中的查询并不是一定是select语句,在MySQL中,一般习惯把每一条SQL命令称为query(查询))

1.如果是查询语句(select语句),首先会查询缓存是否已有相应结果,有则返回结果,无则进行下一步(如果不是查询语句,同样调到下一步);
2.解析查询,创建一个内部数据结构(解析树),这个解析树主要用来SQL语句的语义与语法解析;详情可查看:MySQL解析器。
3.优化:优化SQL语句,例如重写查询,决定表的读取顺序,以及选择需要的索引等。这一阶段用户是可以查询的,查询服务器优化器是如何进行优化的,便于用户重构查询和修改相关配置,达到最优化。这一阶段还涉及到存储引擎,优化器会询问存储引擎,比如某个操作的开销信息、是否对特定索引有查询优化等。详情可查看:MySQL优化器。

3.存储引擎

  存储引擎,也称为表类型,主要用来存储数据的,不同的存储引擎采用不同的技术(存储机制、索引机制、锁定机制)存储数据,这主要是为了满足数据存储要求,比如有的数据不需要大量的改动,只用来查询,而有的数据则需要常常修改(数据插入、删除、更新),针对各种业务情况,为了更好的数据处理效率采用不同的数据存储技术(即不同存储引擎)。
  MySQL的存储引擎是插件式的,也就是说,用户可以随时切换MySQL的存储引擎:针对表或针对库都可(通过SQL语句命令)。这种灵活性也是为什么MySQL受到欢迎的一个重要原因。MySQL集合了多种引擎:MyISAM、InnoDB、BDB、Merge、Memory等,默认的是InnoDB(MySQL5.5开始,以前是MyISAM)。

2.MySQL物理组件

以下主要参考文章:MySQL架构(guisu)。
以上组件是对逻辑架构的实现:
1.Management Services & Utilities
  服务管理和控制组件,主要用来回滚操作、恢复数据、数据的复制、迁移、元数据的管理等。
2.Connection Pool:连接池
  连接池,对应逻辑架构的连接层,主要用来管理用户连接,包括监听、接收客户端请求,转发请求到相应的线程管理模块(该模块负责维护这些线程,包括创建、线程cache,可有线程池实现),还有连接的权限认证工作。
3.SQL Interface:SQL接口
  各种SQL接口,用来接收管理SQL命令,比如DML、DDL操作,存储过程,视图,触发器等。
4.Parser:解析器
  SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。
主要功能:
  a . 将SQL语句进行语义和语法的分析,分解成数据结构,然后按照不同的操作类型进行分类,然后做出针对性的转发到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。
  b. 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的。
5.Optimizer: 查询优化器
  优化SQL语句,比如常量转换与计算、无效代码排除、AND/OR等等优化。查询优化器必要的时候还会询问存储引擎,计算语句执行消耗,从而得出最优策略去执行该SQL命令。
6.Cache & Buffer: 查询缓存
  他的主要功能是将客户端提交 给MySQL 的 Select 类 query 请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值 做一个对应。该 Query 所取数据的基表发生任何数据的变化之后, MySQL 会自动使该 query 的Cache 失效。在读写比例非常高的应用系统中, Query Cache 对性能的提高是非常显著的。当然它对内存的消耗也是非常大的。
  如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等
7.存储引擎
  目前只有MySQL实现了插件式多存储引擎(加了一层抽象层对接下面的存储数据层),其他数据库基本上使用单一的存储引擎。MySQL的存储引擎是基于表的,每个表可选择自己需要的存储引擎。

高性能MySQL学习笔记(1) —— MySQL架构相关推荐

  1. MySQL学习笔记 | 04 - MySQL数据库基本操作(增加、修改、删除、查看)

    MySQL学习笔记 | 01-为什么要使用数据库 MySQL学习笔记 | 02 - MySQL在Windows下的安装.配置.服务启动/停止.用户登录.查看版本号 MySQL学习笔记 | 03 - M ...

  2. MySQL学习笔记:MySQL管理

    文章目录 一.准备工作 1.查看MySQL安装目录 2.启动MySQL服务 二.MySQL数据库管理 1.查看数据库 2.创建数据库 3.显示数据库创建信息 4.使用数据库 5.显示当前打开的数据库 ...

  3. MySQL学习笔记之MySQL安装详解

    前言 虽然现在NoSQL发展迅速,但MySQL还是非常受欢迎的,成千上万的公司依旧采用LAMP OR LNMP的搭配来进行开发,因此MYSQL的学习还是有一定的必要. 安装环境:Windows 7,需 ...

  4. 一千行MySQL学习笔记(MySQL常见SQL语句全详解)

    /* 启动MySQL */ net start mysql/* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码/* 跳过权限验证登录MySQL */ mysqld ...

  5. mysql学习笔记03 mysql数据类型

    数值型:整数型 小数型 字符串型 时间和日期类型 数值型 ①整数型 1 2 3 4 8 1bin表示1位, 1Byte表示一个字节 1B=8b. 1汉字=2字节(1 word = 2 byte) 1字 ...

  6. 【MySQL学习笔记】MySQL原理---单表查询

    一.select 查询2*7的值: SELECT2 * 7; 查询2*7的值并用res进行命名: SELECT2 * 7 AS res; 二.from CREATE TABLE t1(id INT,n ...

  7. MySQL学习笔记一之基础架构

    MySQL学习笔记一之架构@TOC 架构图如下 Server层 连接器 负责跟客户端建立连接.获取权限.维持和管理连接 客户端如果太长时间没有动静,连接器会将其自动断开,时间由参数wait_timeo ...

  8. 架构mysql_MySQL学习笔记之MySQL架构

    MySQL 最重要.最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理及其他系统任务和数据的存储/提取相分离.这种处理和存储分离的设计可以在使用时根据性能.特性,以及其他需求来选择数据存储的 ...

  9. 初识mysql学习笔记

    使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...

最新文章

  1. 36氪研究 | 智慧零售行业研究报告
  2. PHP China杨格:PHP China 是开发者的“家”
  3. 【s操作】巧用免费云笔记和免费网盘的完美配合
  4. 速卖通运营之选品方法和技巧
  5. SCI论文写作训练营笔记汇总03_科技论文写作(方法篇)
  6. 美团Android自动化之旅—生成渠道包
  7. php中global和$GLOBALS[]的分析之一
  8. Oracle基于时间点的恢复(转载)
  9. 躁动不安的年代,你需要读几本好书(python爬虫及数据分析)
  10. 检查mysql数据库脚本_MYSQL 数据库状态检查脚本(Python版)
  11. LVGL学习记录:Roller滚轮
  12. VB.net:VB.net编程语言学习之基于VS软件利用VB.net语言实现对SolidWorks进行二次开发的案例应用(启动SolidWorks代码/直接驱动模型代码/路径下模型驱动代码/创建两个文
  13. 通过vb代码将多个excel合并成一个
  14. [【转】TOMATO DDWRT中几种无线模式的使用
  15. android 根据宽度调整字体大小,android根据分辨率自动调整字体大小的实例代码
  16. 问题 I: 锤子剪刀布 (20)
  17. 由手机号绑定的账号,都应设置更换手机号功能
  18. Day10_GY39
  19. Stimulsoft Dashboards.WEB 23.1.8 完美Patch
  20. 【mindspore】mindspore脚本迁移经历

热门文章

  1. 软件设计师:01-计算机组成原理与体系结构
  2. go语言,安装包fetch error 问题解决方案
  3. 如何arcview或arcgis下用SHP文件切DEM和影像图?
  4. 杰里之 定时器捕获(timer_cap.c) 使用注意事项【篇】
  5. sdk无法打开的原因,值得新手参考
  6. 《趣谈网络协议》学习笔记DAY15
  7. EJB3与EJB2架构对比
  8. java jar反编译后保存_java根据jar包反编译后修改再打包回jar的做法
  9. 2014-12-28 iframe,style,body style
  10. 解决联想电脑网络连接后网页出现“未连接到互联网”的问题