MySQL架构设计其实很简单

这篇具有很好参考价值的文章主要介绍了MySQL架构设计其实很简单。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

我们很多互联网项目首选的数据库就是MySql5.7,因为免费,支持数据库主从复制,读写分离,且语法简单,容易上手,虽然对sql的函数、触发器、存储过程有一定的了解,也能说出一些优化sql语句的方法,但这些只能说是对MySql的浅薄了解。

在当今这个社会,竞争异常的激烈,如果还只停留在表面的CRUD,那么是没有任何优势的,像现在的MySQL面试题,你能答出来吗?

说说MySQL中MVCC机制的原理?
MySQL的事务原理和实现?
MySQL数据主从复制的原理?
MySQL底层数据的存储结构?
如何使MySQL支持海量数据存储?
MySQL中的锁机制原理和实现?
MySQL索引机制?索引中涉及的数据结构和算法?
MySQL为何使用B+树作为索引结构?
B+树可以存放多少数据?
说说MySQL中间隙锁的实现原理?
InnoDB引擎为何会崩溃?说说其实现原理?
等等其他一系列高频面试

所以我们想对MySql有一个深入彻底的了解,就必须了解它的底层架构是怎么实现的。

今天就由我带领大家一块学习MySQL分层架构,深入了解MySQL底层实现原理、以及每层的作用,我们常见的Sql优化是在哪些层实现了优化。

二、架构详解

1、MySql的整体架构,如下图

MySQL架构设计其实很简单

  • 由图中我们可以看到数据库架构主要由Service层和存储引擎层。
  • Service层又分为连接器、分析器、优化器、执行器及缓存。所有跨存储引擎的功能都在这一层实现,如:函数、存储过程、触发器、视图等。
  • 存储引擎是可插拔式的,目前主要的存储引擎有MyISAM、InnoDB、Memory等,MySQL5.5之前默认是MyISAM、之后是InnoDB。

2、连接器

  • 连接器的主要作用是用来管理客户端的连接及身份认证。
  • 客户端与Server端的连接采用的是TCP协议,经过三次握手,建立连接之后,连接器开始进行身份验证。
  • 身份验证的代码

mysql -hlocalhost -P3306 -uroot -p

如果身份验证失败就会出现错误

ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)。

在这里,我们可以使用show processlist命令查看系统所有的连接信息
MySQL架构设计其实很简单

在上图中Command表示连接状态,Daemon表示后天进程,Query表示查询,Sleep表示看下连接。

3. 查询缓存

  • 可以端查询数据不会直接去使用存储引擎查询数据,而是先在缓存查询数据是否存在。如果存在,直接返回,否则再执行一遍查询流程,查询结束后再把结果缓存起来,这样可以大大提高查询效率。

  • 如果数据发生更改,将清空缓存,如执行update、insert、delete、alter等操作。

  • 对于频繁更改的数据,缓存的命中率很低,使用缓存反而降低了读写性能,所以在MySQL8.0后就移除了缓存模块。

  • 可以通过下面的命令查看缓存是否开启

show variables like ‘%query_cache%’;

MySQL架构设计其实很简单

4、分析器

  • 主要对MySQL的词法和语法进行分析。
  • 首先进行词法分析,分析出MySQL的关键字、以及每个词语代表的含义。然后进行语法分析,是否遵循MySQL的要求。
  • MySQL识别语句中的列名、表名、select、update、insert、where等MySQL关键字,再根据语法规则判断sql语句是否符合满足语法,最终生成一个抽象的语法数(AST)。
  • 比如:sql语句中少写个where关键字,就会提示错误。
mysql> use shop;
mysql> select * from sys_user id = 1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= 1' at line 1

5. 优化器

  • 在真正执行sql语句之前,还要经过优化器进行处理。
  • 例如我们熟悉的执行计划 Explain 就是优化器生成的。
  • 优化器主要有两个作用:逻辑优化和物理优化。

1、逻辑优化主要进行等价微词重写、条件化简、子查询消除、连接消除、语义优化、分组合并、选择下推、索引优化查询、表查询替换视图查询、Union替换or操作等。
2、物理优化主要通过贪婪算法,根据代价估值模型,估算出每种执行方式的代价。并使用索引优化表连接,最终生成查询执行计划。

如下图就是优化的详细过程:
MySQL架构设计其实很简单
如果想知道优化器估算结果信息,可以通过Explain查看,如:

mysql> explain select * from sys_user where id = 1;

6. 执行器

在优化器对sql语句的优化完成,并生成了执行计划后, 就会把执行计划传递给执行器。
执行器调用存储引擎接口,真正的执行查询。获取到存储引擎返回的结果,并把结果返回给客户端,至此查询语句结束。

7、整个查询过程,如图:

MySQL架构设计其实很简单

8、总结

本文主要对MySQL的底层架构进行了简单的介绍,同时对每层架构的作用都做了详细的说明。从中我们可以看出MySQL每层架构分工明确、逻辑清晰、深刻体现了架构设计中“高内聚、低耦合”的设计思想。我们平时在架构设计的时候,也要多学习这种分层的架构设计思想。文章来源地址https://www.toymoban.com/news/detail-422049.html

到了这里,关于MySQL架构设计其实很简单的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL Server架构概述

    推荐:SQL语句执行顺序相关问题。 MySQL Server架构可抽象为3层。 连接层:验证用户名密码,认证成功后,获取当前账号的权限并缓存,并分配TCP连接池和线程池资源。 处理层:实现核心的处理功能。 存储层:将处理后的数据高性能安全的写入磁盘,或从磁盘中正确的读取。

    2024年03月09日
    浏览(34)
  • 系统架构设计师(第二版)学习笔记----系统架构概述

    【原文链接】系统架构设计师(第二版)学习笔记----系统架构概述 系统架构是系统的一种整体的高层次的结构表示,是系统的骨架、根基,支撑和链接各个部分 解决相对复杂的需求问题 解决非功能属性在系统占据重要位置的设计问题 解决生命周期长、扩展性需求高的系统

    2024年02月09日
    浏览(53)
  • 大数据智能决策系统架构设计原则概述

    作者:禅与计算机程序设计艺术 随着大数据的日益增长、高速发展及其广泛应用,在构建大数据智能决策系统中也面临着诸多挑战。作为一名具有强烈的学习兴趣、极强的逻辑思维能力、丰富的工程实践经验的创新型专家,本文将从架构设计的角度出发,全面回顾一下大数据

    2024年02月07日
    浏览(37)
  • 系统架构设计师笔记第28期:信息物理系统技术概述

    信息物理系统(Cyber-Physical Systems)是指将信息处理与物理过程相结合的系统。它是计算机科学、控制论、通信技术和物理学等多个领域的交叉学科,旨在通过将信息处理和计算能力与物理系统的感知、控制和执行能力相结合,实现更智能、自适应和高效的系统。 信息物理系

    2024年02月12日
    浏览(44)
  • 如何成为名副其实的测试架构师?

    测试模型无处不在,你只有真正理解了“什么是测试架构”、拥有了测试建模能力,才能成为名副其实的测试架构师。 众所周知,“ 架构 (architecture)”一词来源于建筑,具有 “建筑学、体系结构” 等含义。建筑学的内涵要比体系结构丰富得多,但其核心往往关注其造型

    2023年04月08日
    浏览(47)
  • 入门编程其实也简单

    随着信息技术的快速发展,编程已经成为一个越来越重要的技能。那么,我们该如何入门编程呢? 编程是指使用计算机语言编写计算机程序的过程。计算机程序是一系列指令的集合,这些指令告诉计算机要执行的操作。编程的目的是创建计算机程序,以解决特定的问题或完成

    2024年02月08日
    浏览(48)
  • 【数据结构】【排序】其实超级简单啦!

    本博客的所有代码都已测试完毕,请放心使用哟❤ 在文章的最后面会贴出全部的码源,各位行行好点个赞吧(小狗哭泣)QAQ 排序 :所谓排序,就是使一串记录,按照其中的某个的某个或者某些的大小,递增或递减的排序起来的操作。 内部排序 :数据元素全部放在内

    2024年04月11日
    浏览(37)
  • 基础篇丨链路追踪(Tracing)其实很简单

    当周末躺在被窝里,点外卖时;双 11 的零点,疯狂提交订单时;假期和基友激情开黑,五杀超神…在这个精彩纷呈的互联网世界里,这些应用背后又隐藏着什么?每一次点击行为在 IT 世界里会流经哪些节点,调用哪些服务,带来哪些变化?这一切庞杂且精密,超出了人力探

    2024年01月24日
    浏览(36)
  • 怎么去除视频里的背景音乐?其实非常简单!

    如何去除视频背景音乐?在视频处理中,有时我们需要从视频中提取声音并进行处理,而不仅仅是简单地去除整个背景音乐。我们可能需要有选择性地去除人声或背景音乐。这个处理过程对于选用合适的工具至关重要。在本文中,我将分享两种可用于去除视频背景音乐的工具

    2024年02月14日
    浏览(46)
  • 云服务器上跑python代码其实很简单?

    由于做仿真需要重复运行代码很多次,不仅耗时长,cpu温度还一直80度左右徘徊,就想能不能在云服务器上跑代码,但是作为云服务器小白,linux小白,随便搜了一些文章、教程,发现大家都是大佬都会Linux,去腾讯云官网看了一下,其实是有window系统的云服务,而且价格和

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包