文章目录

  • 1、整体结构图
    • 1.1 连接层
    • 1.2 服务层
      • 1.2.1 Management Services & Utilities
      • 1.2.2 SQL Interface
      • 1.2.3 Parser
      • 1.2.4 Optimizer
      • 1.2.5 Cache 和Buffer
    • 1.3 引擎层
    • 1.4 存储层
  • 2、架构特点

1、整体结构图

和其他数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。

主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其他的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。

1.1 连接层

最上面是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。

主要完成一些类似于连接处理、授权认证、以及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于 SSL 的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。

1.2 服务层

1.2.1 Management Services & Utilities

系统管理和控制工具

1.2.2 SQL Interface

SQL 接口。接受用户的 SQL 命令,并且返回用户需要查询的结果。比如 select from就是调用 SQL Interface

1.2.3 Parser

解析器。 SQL 命令传递到解析器的时候会被解析器验证和解析

1.2.4 Optimizer

查询优化器。 SQL 语句在查询之前会使用查询优化器对查询进行优化,比如有where 条件时,优化器来决定先投影还是先过滤。

1.2.5 Cache 和Buffer

查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key 缓存,权限缓存等

1.3 引擎层

存储引擎层,存储引擎真正的负责了 MySQL 中数据的存储和提取,服务器通过 API 与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。

对比项 MyISAM InnoDB
外键 不支持 支持
事务 不支持 支持
行表锁 表锁
即使操作一条记录也会锁住整个表,
不适合高并发的操作
行锁
操作时只锁定某一行,不对其他行有影响,
适合高并发的操作
缓存 只缓存索引,不缓存真实数据 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响
关注点 读性能 并发写,事务、资源
默认安装 Y Y
默认使用 N Y
自带系统表使用 Y N

使用命令查看

#查看所安装的MySQL现在已提供什么存储引擎
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM 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         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
#查看MySQL当前默认的存储引擎
mysql> show variables like '%storage_engine%';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
| storage_engine         | InnoDB |
+------------------------+--------+
2 rows in set (0.00 sec)

1.4 存储层

数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。

2、架构特点

  • 基于C/S架构模型
  • 基于线程工作
  • 同时MySQL是一个独立的进程

以下内容摘自深入分析MySQL的逻辑架构

每一个客户端发起一个新的请求都由服务器端的连接/线程处理工具负责接收客户端的请求并开辟一个新的内存空间 在服务器端的内存中生成一个新的线程, 当每一个用户连接到服务器端的时候就会在进程地址空间里生成一个新的线程 用于响应客户端请求 用户发起的查询请求都在线程空间内运行, 结果也在这里面缓存并返回给服务器端.线程的重用和销毁 都是由连接/线程处理管理器实现的

综上所述:用户发起请求 连接/线程处理器 开辟内存空间 开始提供查询的机制

接下来用户发起SQL查询语句 用户的SQL语句 在连接/线程处理器接收 接收下来后 开始交给服务器端的核心组件来查询。为了加速MySQL的查询速度提供了一个查询缓存空间。如果同一个SQL语句此前被查询过了结果符合某个特定条件 就会保存在查询缓存空间里 因此第二次执行这条语句的时候 就直接返回结果 这样大大的提高了MySQL检索响应速度。如果缓存中没有响应的语句(缓存未命中)此时就交给分析器。

分析器分析用户发起的SQL语句把语句进行切片该分析器包括词法分析和语法分析两部分 语法分析器用来分析接收到的语句语法是否正确 如果语法是错误的就不用执行这条语句了如果语法分析无误(syntex 0K !)接下来就做词法分析, 词法分析 就是把接收到的语句进行切片一段一段用空格分开 因为分析器分析的结果要送达给解释器进行执行的【命令 选项 参数】

为什么要进行词法分析呢?

SQL有个最重要的特点 在数据库的表中的检索特定字段的数据时 不同数据库不同表 是不一样的 字段不一样 就必须要把接收到的语句进行切片才能找到特定的字段值

词法分析后的结果发现没有问题

分析的结果交给优化器进行优化,怎么进行优化呢?

有N中执行办法 ,N中执行路径,否用到数据库执行路径中哪个速度最快 都是优化过程需要考虑的问题 优化器的主要目的就是从N中执行路径中选择一种最快的 并生成对应的可执行的二进制格式 并进行执行 ,选一个最优的执行

执行就是从存储在磁盘中的文件中检索一个最优的数据

真正存储在磁盘上的数据是由存储引擎管理的, 存储在文件系统或者是裸设备上的数据管理程序

本身能提供给上层应用不同的功能 不同的存储引擎具有不同的特性

MySQL基础篇:逻辑架构相关推荐

  1. mysql 概念和逻辑架构

    1.MySQL整体逻辑架构 mysql 数据库的逻辑架构如下图: 第一层,即最上一层,所包含的服务并不是MySQL所独有的技术.它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安 ...

  2. mysql安全补丁如何处理_3分钟学会mysql数据库的逻辑架构原理

    这篇文章主要是从mysql数据库的逻辑架构来认识掌握mysql的原理.只要是稍微有一点计算机的相关知识相信都能看明白. 一.笼统的逻辑架构 先给出一张逻辑架构图,这张图是让你从宏观的角度来分析认识一下 ...

  3. 更换mysql_3分钟学会mysql数据库的逻辑架构原理

    这篇文章主要是从mysql数据库的逻辑架构来认识掌握mysql的原理.只要是稍微有一点计算机的相关知识相信都能看明白. 一.笼统的逻辑架构 先给出一张逻辑架构图,这张图是让你从宏观的角度来分析认识一下 ...

  4. 最全MySQL基础篇

    文章目录 导入表的问题 第三章_最基本的SELECT语句 1. SQL语言的规则和规范 1) 基本规则 2) SQL大小写规范(建议遵守) 3) 注释 4) 命名规则 2. 基本的SELECT语句 1 ...

  5. 【MySQL基础篇】数据导出导入权限与local_infile参数

    [MySQL基础篇]数据导出导入权限与local_infile参数 问题背景 数据导出测试 创建测试库(在主库进行) 测试数据导出(在从库进行) 测试数据导入(在主库进行) 问题背景 MySQL高可用 ...

  6. MySQL基础篇:子查询

    文章目录 概述 where型子查询 from型子查询 EXISTS型子查询 复制表子查询 概述 在某些情况下,当进行一个查询时,需要的条件或数据要用另一个select语句的结果,这个时候,就要用到** ...

  7. mysql 基础篇(二) 账号、权限管理

    mysql 基础篇(二) 账号.权限管理.备份与还原 建立账号密码: Grant all on test.* to "cj"@"localhost" ident ...

  8. Mysql基础篇(1)—— 基础概念、DML基本语法和表连接

    前言 Mysql基础篇相关的内容是看了康师傅的视频做的笔记吧 数据库相关概念 DB: 数据库(Database) ​ 存储数据的仓库,本质是一个文件系统.它保存了一系列有组织的数据. DBMS:数据库 ...

  9. 深入浅出Mysql - 基础篇(列类型/运算符/函数)

    深入浅出Mysql - 基础篇(列类型/运算符/函数) 每一个常量.变量和参数都有数据类型,它用来指定一定的存储格式.约束和有效范围.MySQL提供了多种数据类型,主要包括数值型.字符串类型.日期和时 ...

  10. MySQL基础篇——第11章 DML(数据操作):增删改

    MySQL基础篇--第11章 DML(数据操作):增删改 1. 插入数据(增) INSERT INTO ... 使用 INSERT INTO 语句向表中插入数据(记录) 1.1 方式1:VALUES ...

最新文章

  1. jQuery UI Widget(1.8.1)工作原理--转载
  2. 太阳能计算机作文500字,自制太阳能热水器
  3. 19年8月 字母哥 第六章 生命周期内的拦截过滤与监听 用热点公司网不行
  4. 云服务器,Linux上安装xampp来搭建node,api
  5. python能做什么-普通小白学会Python到底具体能做什么呢?
  6. 【视频】文本挖掘:主题模型(LDA)及R语言实现分析游记数据
  7. 分享一个手游脚本源码
  8. mysql数据库编程第六章试题_2016计算机二级MySQL数据库试题及答案
  9. JDK1.8下载安装(Windows版)
  10. html实现播放暂停,html如何实现播放和暂停
  11. 桌面图标快捷方式小箭头_如何在Windows 7、8和10中删除(或更改)快捷方式图标上的箭头...
  12. Tableau实战 Tableau官网各版块访问情况(一)总访问量树状图
  13. 读文献——《Learning representations by back-propagating errors》
  14. 在互联网创业公司工作五年是一种怎样的体验?
  15. python爬取网易云评论最多的歌_python爬取网易云音乐评论
  16. Canvas笔画向量交互动画效果,随着鼠标描绘轨迹
  17. 突破次元壁垒,让身边的玩偶手办在屏幕上动起来!
  18. 《瘗旅文》 作者:王阳明(正德四年己巳作)
  19. Derby ij工具
  20. 使用GitHub、Gitee作为图片仓库,CSDN文档引入

热门文章

  1. 8道Python基础面试练习题
  2. mysql半连接_mysql表的半连接,反连接导致的mysql性能优化剖析
  3. java 重启系统_java 程序,实现重启功能。求大神帮忙,急
  4. 机械转行的都干啥去了?机械转行计算机难吗?
  5. 表达式树 java_Linq表达式树编译非平凡的对象常量,并以某种方式引用它们
  6. java common.lang_Java 开源工具 Apache Common Lang
  7. PTA基础编程题目集-6-3 简单求和
  8. [国家集训队]数颜色 / 维护队列 (带修莫队模板题)
  9. 树套树 ---- 树状数组套权值线段树模板题 P2617 Dynamic Rankings 动态第K大
  10. java get resttemplate 请求传递数组_RestTemplate入门