数据库 | MYSQL这个复杂系统如何上手?

当你不知道从何入手研究或解决一个复杂系统的问题时,通常意味着你没有找到合适的切入点或者缺乏对系统整体和细节之间联系的理解。在这种情况下,一个有用的策略是寻找系统的基本原理或构成要素。

小时候,你可能也玩过玩具四驱车。有的四驱车设计得比较封闭,集成度高,除了换电池外几乎不允许拆卸。而另一种则是可组装的,允许在有限的零件中自由更换,为你提供了丰富的选择空间。我个人偏爱后者,它不仅展示了玩具车的整体构造,还让每一个零件都呈现在我的眼前。对我来说,这不仅仅是一辆车,而是一个由众多零件组成的系统,我能够向我的伙伴详细介绍每个零件独特之处和它们如何共同作用。

其实你也看出来了,当一个被外壳裹挟的四驱车你可能玩过一段时间就不会再去玩它,渐渐被你淡忘。而以一件一件零件的形式摆在你面前,你会更好奇的去探索它,并且印象深刻。

那么我要上第一板斧就是拆解
“要想了解一个复杂系统,我们需要从拆解的角度去看问题”


我们需要分解这个系统

要深入理解一个复杂系统,首先要将其分解成更小、更易于理解的部分。

上大学的时候,老师让我们在自己的计算机上安装一个服务器(更懒的老师可能就直接在机房直接给你安装好,你再软件中操作就是了),然后再从window系统的某个角落掏出一个你不知道什么时候就安装好的自带的客户端,通过远程连接,连上了。然后教你理论知识,什么是范式理论,如何去画一个ER图,接下来就教你第一句MYSQL命令了。可能老师没有点出来,但是这会,你不知不觉就接触到了这个系统,虽然此时蒙上了厚厚的一层灰。你看:
在这里插入图片描述

客户端/服务器模型

现在,我们知道了,MySQL这个系统,它遵循客户端/服务器(Client/Server)模型,其中:
客户端:提供用户接口,允许用户通过各种客户端工具或者是编程语言接口发送SQL查询。
服务器:MySQL服务器是核心组件,负责处理所有数据库命令和操作,包括查询解析、分析、优化以及执行。

连接器

在这里插入图片描述
紧接着我们来到服务器端的连接器。客户端在与服务器进行通信时,首先要和连接器打交道。连接管理器负责处理网络连接、授权客户端、管理连接的安全验证。
授权认证:在这一层,MySQL使用用户名、密码等信息验证连接请求的合法性。
安全:提供SSL加密连接,保证数据传输的安全性。

解析优化执行一条龙

在这里插入图片描述

通过第一关后,MYSQL就可以正儿八经的处理你发送过来的SQL命令了。接收到SQL命令后,MySQL进入查询处理阶段,包括:

解析器:将SQL语句分解成解析树,这一过程涉及词法、语法分析。
预处理器:进一步检查解析树是否符合MySQL规则,包括数据类型和表结构等。
优化器:负责查询优化,决定最有效的查询执行计划
执行器:一旦优化器确定了最佳的查询执行计划,执行器就会按照这个计划来操作数据。

执行器到哪里去取数据呢?答案是存储引擎

存储引擎层

在这里插入图片描述
MySQL提供了插件式的存储引擎架构,不同的存储引擎对数据的存储方式索引技术有着不同的实现。我们常见的存储引擎就有以下两种:
InnoDB:提供事务安全(ACID兼容)、行级锁定和外键约束等。
MyISAM:提供高速存取但不支持事务安全。

要想在MYSQL中使用也很简单,你只需要在创建表的时候加上这么一句就可以:

CREATE TABLE my_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100)
) **ENGINE=InnoDB**;

当然也可以修改这个表的存储引擎:

ALTER TABLE my_table ENGINE = MyISAM;

其实到了存储引擎层面,软件层的事情就万事大吉了。但是如果你可以再往下探索看到不同存储引擎的存放规则,那你的印象肯定会进一步加深。

数据存储和文件系统

在这里插入图片描述

底层数据存储涉及到如何在物理存储介质(如硬盘)上存储数据和索引文件。不同存储引擎有着不同的文件组织方式和存储格式,如MyISAM为每个表创建独立的文件,而InnoDB使用表空间存储数据和索引。

MyISAM

首先,我们创建一个使用MyISAM存储引擎的表:

CREATE TABLE myisam_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100)
) ENGINE=MyISAM;

查看磁盘创建了这三个文件:
在这里插入图片描述

  • myisam_table.MYD:这是数据文件,存储表的实际数据。
  • myisam_table.MYI:这是索引文件,存储表的索引信息。
  • myisam_table.frm:这是表定义文件,存储表的结构。

InnoDB

接下来,我们创建一个使用InnoDB存储引擎的表:

CREATE TABLE innodb_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100)
) ENGINE=InnoDB;

紧接着在磁盘中就找到了这两个文件:

在这里插入图片描述

对于InnoDB表,情况稍有不同:

  • innodb_table.frm:表定义文件,与MyISAM相同,存储表的结构。
  • innodb_table.ibd:当MySQL配置为innodb_file_per_table=ON时,每个InnoDB表的数据和索引会存储在独立的.ibd文件中。如果innodb_file_per_table=OFF,则所有InnoDB表的数据和索引存储在共享表空间ibdata1中。

除此之外,InnoDB还会使用其它一些文件来管理数据。为了避免啰嗦,这里我们按下不表,如果感兴趣可以持续关注我后续的文章,感谢支持。


当然, 会拆玩具可不行,你还得深谙每个零部件的重要作用。接下来是第二板斧

识别其中关键因素

一旦系统被拆解,下一步是识别出影响系统性能稳定性等一些关键因素。

暂停一分钟思考下,有哪些地方是贯穿我们工作的关键要素呢?





数据索引机制

数据索引机制是数据库查询性能优化的核心。索引允许数据库快速定位和检索数据,而无需扫描整个表。MySQL支持多种类型的索引,包括B-Tree索引、全文索引、哈希索引等,每种索引适用于不同的查询类型和数据模式。合理的索引管理策略,包括选择合适的索引类型、维护索引以避免过度索引,对于维持数据库性能至关重要。这甚至可以成为不同程序员的一道分水岭。

查询优化器

你知道要让这个查询走什么样的索引,你说了不算。你要让查询优化器听你的才行。查询优化器负责生成查询的执行计划。它评估多个可能的计划,并选择成本最低(预计最快)的那个执行。调优大部分时间也是围绕它来。通过去分析执行计划,我们可以识别性能瓶颈,进而调整查询语句或数据库结构,实现性能优化。

数据存储方式

你知道软件层面的优化,也要兼顾到硬件层面的事情。那么存储引擎这件事情你就要知晓(虽然现在闭眼就用InnoDB)。数据的组织、存储格式以及如何在磁盘上排列,都直接影响到数据访问的速度和效率。适当的数据模型设计可以减少I/O开销,提高查询性能。对于需要支持复杂事务的应用,选择支持ACID属性的存储引擎(如InnoDB)是关键。事务处理机制确保了数据库操作的原子性、一致性、隔离性和持久性。


我们把它拆回去,有仔细分析了一些我们觉得非常重要的零部件之后。还是要给它装起来,接下来就是第三板斧了

形成整体的视角

通过分解系统并识别关键因素后,我们需要重新将这些部分组合起来,形成对系统整体工作原理的理解。要想有一个整体的视角,我们要怎么训练呢?
我们可以从一个简单的Select/Update语句开始,逐层分析,一点一点剥离出来。
完整的生命周期,从数据被插入数据库开始,经过存储、查询、更新,最终可能被删除,这个过程构成了数据的生命周期。理解数据如何流经MySQL的各个组成部分,是形成整体视角的关键一环。

这里也是你漫长训练求索的过程,通过这样的训练之后,你就会达到拥有整体视角的快感。那还在等什么呢?行动起来!

总结

相信通过拆解复杂系统识别关键因素,并最终形成对系统整体的深入理解,这三板斧,我们可以更有效地诊断问题、提出解决方案和实施改进。这种方法论不仅适用于其它技术系统,也适用于任何复杂的问题解决过程,是一种强大的思维工具。要想精通这一策略,关键在于实践和经验积累,随着时间的推移,我们就能够更快地识别不同系统核心要素,更有效地解决问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/748241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch(10) match的使用

elasticsearch version&#xff1a; 7.10.1 Elastic Match是Elasticsearch中用于全文搜索的一种查询语法。它可以将搜索词进行分词&#xff0c;并与目标查询字段进行匹配。 match的语法 GET /<index>/_search {"query": {"match": {"<fiel…

从零开始利用MATLAB进行FPGA设计(三)将Simulink模型转化为定点数据类型

文章灵感来源于MATLAB官方免费教程&#xff1a;HDL Coder Self-Guided Tutorial 考虑到MATLAB官网的英文看着慢&#xff0c;再加上视频讲解老印浓浓的咖喱味&#xff0c;我决定记录利用MATLAB&Simulink&SystemGenerator进行FPGA数字信号处理的学习过程。 往期回顾&am…

Alias许可数量计算

在数字化时代&#xff0c;软件许可数量的合理配置是企业实现成本控制与合规运营的关键。然而&#xff0c;企业在计算软件许可数量时&#xff0c;往往面临诸多困惑。如何精确评估软件需求&#xff0c;确保合规使用&#xff0c;降低成本&#xff0c;成为了企业关注的焦点。Alias许…

grep和vim查找日志文件信息

grep和vim查找日志文件信息 前言&#xff1a;最近排查问题时&#xff0c;经常用到grep和vim查找日志&#xff0c;记录下。 #1、在当前目录下查询文件中是否包含&#xff1a;test内容 $grep -nr test #2、vim查看日志 #2.1、vim文件后&#xff0c;用大写GG&#xff0c;快速…

什么是响应式设计?响应式设计的基本原理是什么?如何做?

文章目录 一、是什么二、实现方式媒体查询百分比vw/vhrem小结 三、总结参考文献 一、是什么 响应式网站设计&#xff08;Responsive Web design&#xff09;是一种网络页面设计布局&#xff0c;页面的设计与开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)…

前端图片预加载和懒加载

前言 在说到对图片资源进行优化时&#xff0c;那就不得不提到图片预加载和图片懒加载&#xff0c;可能很多朋友都了解这两者&#xff0c;但是一直没有很清晰的概念&#xff0c;以及什么时候用&#xff0c;用在什么场景下&#xff0c;今天就来详细的了解一下吧&#xff01; 图…

软考高级:BPR 和 BPM概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

【四 (1)数据可视化之如何选用正确的图表】

目录 文章导航一、数据分析中可视化的作用1、揭示数据关联和模式2、支持数据分析和决策3、提升沟通和共享效果4、强调关键信息和发现5、增强故事叙述和记忆效果6、有效增强数据交互性数据7、复杂信息易理解8、数据多维度显示 二、如何选用合适的图表1、简洁性避免使用过于复杂或…

软考高级:企业应用集成概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

八 超级数据查看器   讲解稿   详情3  分享和外观

八 超级数据查看器 讲解稿 详情3 分享和外观 app下载地址 下载地址4 ​ 讲解稿全文&#xff1a; 第3讲 分享 顶栏颜色 外观设置 现在讲解分享功能。点击&#xff0c;会打开分享对话框&#xff0c;我们这里演示2个&#xff0c;可以按照标题做出分享&#xff0c;在第一组…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Badge)

可以附加在单个组件上用于信息标记的容器组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 支持单个子组件。 说明&#xff1a; 子组件类型&#xff1a;系统组件和自定义组件&#xf…

异次元发卡源码系统/荔枝发卡V3.0二次元风格发卡网全开源源码

– 支付系统&#xff0c;已经接入易支付及Z支付免签接口。 – 云更新&#xff0c;如果系统升级新版本&#xff0c;你无需进行繁琐操作&#xff0c;只需要在你的店铺后台就可以无缝完成升级。 – 商品销售&#xff0c;支持商品配图、会员价、游客价、邮件通知、卡密预选&#…

腾讯在线文档下载文档html格式

腾讯在线文档下载文档html格式 步骤 chrome 浏览器打开该文档&#xff08;edge不行&#xff09; 同时按住ctrlp快捷键调出腾讯文档内置的打印页面&#xff0c;打印范围要选择整个工作薄&#xff0c;纸张建议调大一点&#xff0c;边距建议较窄&#xff0c;缩放要选择宽度撑满&…

“风口”上的量化大厂“绣球”抛向中低频人才

量化人才这几年是人才舞台上的“香饽饽”。 遵循着低频不如高频、小厂不如大厂的薪资逻辑&#xff0c;各路人才被各路机构“哄抢”&#xff0c;薪资一路走高。 但2024年的“信号”再强烈不过——量化大厂们到了改变的时候了。 而量化大厂们显然对此已“心知肚明”....... “…

空气源热泵、地源热泵和水源热泵三种热泵的优缺点和选型比较

空气源热泵 空气源热泵是由电动机驱动的,利用空气中的热量作为低温热源,经过空调冷凝器或蒸发器进行热交换,然后通过循环系统,提取或释放热能,利用机组循环系统将能量转移到建筑物内用户需求。 1、适用范围广:适用温度范围在-7至40℃,并且一年四季全天候使用,不受阴、…

软件测试 —— 案例系统缺陷报告

知识&#xff1a; 1、缺陷等级&#xff1a; 1-Urgent(致命错误)&#xff1a;影响全局的死机、通信中断、重要业务不能完成 2-Very High(严重错误)&#xff1a;规定的功能没有实现或不完整或产生错误结果&#xff1b;使系统不稳定、或破坏数据等 3-High(一般错误)&#xff1a;…

Github 2024-03-16 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目2Go项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero Gene…

视频和图像编码标准或格式的发展关系

MPEG-2 继承 MPEG-1&#xff1a; MPEG-2 是 MPEG-1 的继任者&#xff0c;用于更高质量和分辨率的视频传输&#xff0c;如 DVD 和数字电视。 MPEG-4 继承 MPEG-2&#xff1a; MPEG-4 在 MPEG-2 的基础上增加了更多的功能和灵活性&#xff0c;适用于多媒体交互和网络传输。 H.2…

java 如何使用Lambda表达式实现不可变性(Immutability)

java 如何使用Lambda表达式实现不可变性&#xff08;Immutability&#xff09; Lambda表达式本身并不直接提供不可变性的特性。不可变性是指一个对象的状态在创建之后不能被修改。Lambda表达式主要用于定义匿名函数&#xff0c;通常用于简化函数式接口的实例创建。 然而&…

java遍历文件目录去除中文文件名

文章目录 一、原始需求二、maven依赖三、核心代码四、运行结果 一、原始需求 需要遍历文件目录及其子目录&#xff0c;找出包含中文字符的文件名&#xff0c;将中文字符去除。 二、maven依赖 pom.xml <dependency><groupId>org.apache.commons</groupId>&…