MySQL存储引擎与架构

1.1详细了解数据库类型

1.1.1关系型数据库

常见产品:MySQL(免费)、Oracle
关系型数据库模型是把复杂的数据结构归结为简单二维表格形式。通常该表第一行为字段名称,描述该字段的作用,下面是具体的数据。在定义该表时需要指定字段的名称及类型。
在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上。在大型系统中通常有多个表,且表之间有各种关系。实际使用就是通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理

1.1.2非关系型数据库

常见产品:Redis、MongoDB
键值数据库是一种非关系数据库,它使用简单的键值方法来存储数据。键值数据库将数据存储为键值对集合,其中键作为唯一标识符

1.1.3列存储数据库

常见产品:HBase
对于行存储数据库,表中的数据是以行为单位逐行存储在磁盘上的;而对于列存储数据库,表中的数据则是以列为单位逐列存储在磁盘中。
平时的查询大部分都是条件查询,通常是返回某些字段(列)的数据。对于行存储数据,数据读取时通常将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列,出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。而列存储,每次读取的数据是集合的一段或者全部,不存在冗余性问题。这样,通过这种存储方式的调整,使得查询性能得到极大的提升。

1.1.4搜索引擎存储

常见产品:ElasticSearch
搜索引擎数据库是应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优
原理:用ik分词器将文档分为词条,对词条创建索引,记录词条所在id,查询时先根据词条查询文档id,再根据文档id查询文档

1.2图解MySQL 内部架构及作用

Mysql架构主要分为连接层、server层和存储引擎层,每一层 中都含有各自的很多小模块,尤其是第二层,结构相当复杂的。下面我们就分别 针对 这三层做一个简单的分析。我们看下图体系结构:
在这里插入图片描述

1.2.1.Connectors

指的是不同语言中与SQL的交互,如php、java等。
1.2.2 系统管理和控制工具
系统管理和控制工具、内置工具和服务,专为数据库的全生命周期管理设计,涵盖 运维监控、数据维护、性能优化、安全管控 四大核心场景,旨在降低人工运维成本,提升系统稳定性与效率。

1.2.3 连接层

  • 在连接建立时,MySQL通常会优先加载全局权限和数据库级权限,因为这些权限最常用。
  • 对于更细粒度的权限(如表级、列级权限),只有在执行具体的SQL操作时才会被加载。
  • 用来客户端连接器请求过来以后,Connection Handler验证账户和密码,不正确,立马返回Access denied for user,此外还会验证ip,若都验证通过,则连接成功,缓存全局权限和数据库级权限。
  • 连接过程其实就是一个TCP连接的过程,此连接是一个长连接,注意,MySQL服务器与客户端之间的通信是“半双工”的,意味着任意时刻,要么是服务器向客户端发送数据,要什么是客户端向服务器发送数据(请求),不能同时进行。MySQL也不会让你啥也不干一直连着,所以就有了超时时间,由wait_timeout控制(断开是服务器端断开,客户端再请求过来就报Lost
    connection to MySQL server during query)
  • 连接器采用池化技术,节省了创建和销毁的成本;
  • 默认只能连接151个客户端,一个客户端请求服务端分配一个线程(从线程里取),把线程池占满了,再连就报连接满了;
  • 客户端一般也采用池化技术,优化请求,防止每次执行SQL都需要建立连接,减少开销;
  • 长连接带来一个问题,有些SQL在执行的过程中创建临时表占用内存,连接不释放,内存不回收,会导致MySQL占用内存涨的特别快,可以通过以下方式解决:
    • 定期断开长连接(需要重连和权限验证)
    • Druid会定期检测空闲连接,默认的timeBetweenEvictionRunsMillis是60秒,minEvictableIdleTimeMillis是30分钟,所以默认情况下,空闲超过30分钟的连接会被释放。

1.2.4 SQL接口

接受用户的SQL命令,并且返回用户需要查询的结果。

1.2.5解析器

  • MySQL在真正执行语句之前,会去parser你的查询语言,了解你要做什么
  • 在这个过程会判断你的语法是否正确,不正确会报错:You have an error in your SQL syntax;
  • 将查询字段,表,条件封装到内部的数据结构上形成解析树

在这里插入图片描述

1.2.6.查询缓存

MySQL 8 将这块删除了,因为很鸡肋:

  • 缓存匹配条件严格:需 SQL 完全一致(包括空格、注释),解析后即可确定是否匹配。
  • 任何对表的写操作(INSERT/UPDATE/DELETE)会标记该表关联的所有缓存为无效。
  • MySQL接收到请求后,会先看缓存中有没有(之前查询的结果会以k-v的方式存储在内存里,k是语句,v是结果)
  • 一般情况下查询缓存的命中率是非常低的(除非你的数据是静态的)
  • 可以通过在select 后加 SQL_CACHE 来显示指定使用查询缓存

1.2.7 Optimizer: 查询优化器。

  • 通过语法解析,MySQL知道你的真实意图了,但你写的SQL不一定是高效的
  • 这个时候MySQL会给我们的SQL做些优化调整(基于成本去优化),比如:使用哪个索引,外连接转换为内连接,多表连接的时候,表的连接顺序从而确定最终的执行计划
  • 例如:等价变换策略:比如 x<y and x=5 优化为y>5 and x=5
    联合索引的位置调整:比如a,c,b联合索引,b=3and a=5调整为a=5andb=3
    函数查询优化:比如:min 直接从索引的左侧开始查,max从右;

1.2.8.执行

  • 执行器
    • 解析完了,也优化完了,那就该执行了
    • 别急,还没完,你有权限吗?没有,直接拒绝执行,有才可以执行
    • 执行器操作的是下一层的存储引擎

1.2.9 存储引擎接口

  • MySQL将操作封装成了接口,屏蔽了不同存储引擎的差异,各种存储引擎实现了这些操作接口,内部又差异化的做了各种扩展;
  • 比如InnoDB锁的粒度到行级,InnoDB的事务,都是差异性的
  • 我们可以通过show engines来查看支持的存储引擎
  • 存储引擎同一个实例只能启用一种

1.2.10文件系统层

  • 文件系统由各操作系统提供
  • MySQL将其持久化的数据物理存储在磁盘上,持久化保存数据、索引、binlog、redolog、undolog、error日志、慢sql等;

1.3说明一条SQL请求的过程

1.3.1 连接

SQL客户端与与服务器建立连接,该请求被发送到连接器,连接器鉴权,

1.3.2 语法解析

首先通过mysql关键字将语句解析,会生成一个内部解析树,mysql解析器将对其解析,查看是否是有错误的关键字,关键字顺序是否正确等;

1.3.3 查询缓存

如果查询命中缓存(一个大小写敏感的哈希查找实现的)则直接返回结果,如果查询没有命中缓存,则进行下一步sql解析。

1.3.4 生成执行计划

mysql是基于成本的优化器,他将预测执行此计划的成本,并选择成本最小的那条

1.3.5 调用存储引擎接口执行

在解析和优化阶段,MySQL将生成查询对应的执行计划,由执行计划调用存储引擎的API来执行查询MySQL就行,将结果返回给客户端;即使查询不需要返回结果,MySQL也会返回影响到的行数。

1.4了解主流存储引擎特性及选择策略

1.4.1 InnoDB 引擎(默认)

  1. 特性与优势
    • 支持事务处理,具备 ACID 特性(原子性、一致性、隔离性、持久性),保证数据的完整性和可靠性。
    • 采用行级锁,在高并发场景下能够有效减少锁冲突,提高并发处理能力。
    • 支持外键约束,便于维护表之间的关系,确保数据的一致性。
    • 具备良好的崩溃恢复能力,在数据库发生故障时能够快速恢复数据。
  2. 劣势
    • 相对 MyISAM 引擎,其读写性能在一些简单查询场景下可能稍逊一筹。
    • 数据存储和索引占用空间相对较大。
  3. 适用场景
    • 对事务完整性要求较高的应用,如电子商务系统、金融交易系统等。
    • 高并发读写的场景,例如在线事务处理(OLTP)系统。

1.4.2 MyISAM 引擎

  1. 特性与优势
    • 读取速度快,特别适合执行大量的 SELECT 查询操作,其表结构简单,数据存储紧凑。
    • 不支持事务和行级锁,但支持表级锁,在对数据一致性要求不高的读多写少场景下性能较好。
    • 支持全文索引,可用于高效的文本搜索,如博客系统、新闻网站等。
  2. 劣势
    • 不支持事务,无法保证数据的原子性和一致性,在数据更新频繁的场景下可能导致数据问题。
    • 不支持外键约束,不利于表间关系的维护。
  3. 适用场景
    • 以读为主的应用,如 Web 应用中的静态数据查询,如用户信息查询、文章内容查询等。
    • 对全文搜索有需求的场景,如文档管理系统、论坛等。

1.4.3 Memory 引擎

  1. 特性与优势
    • 数据存储在内存中,读写速度极快,适用于对读写性能要求极高的临时数据存储场景。
    • 支持哈希索引,能够快速定位数据,提高查询效率。
  2. 劣势
    • 数据存储在内存中,一旦服务器关闭或重启,数据将丢失,因此不适合存储重要的持久化数据。
    • 内存资源有限,对数据量有一定限制,不适合存储大量数据。
  3. 适用场景
    • 用于存储临时数据或缓存数据,如会话数据、临时计算结果等。
    • 对读写性能要求极高且数据量不大的场景,如一些实时统计系统中的中间计算结果存储。

1.4.4 选择策略

(一)根据应用需求选择
  1. 如果应用需要处理大量的事务操作,确保数据的完整性和一致性至关重要,那么 InnoDB 引擎是首选。例如,银行系统中的账户交易处理,必须保证每一笔交易的原子性和数据的持久可靠,InnoDB 的事务支持和崩溃恢复能力能够满足这一需求。
  2. 对于主要以读取数据为主,对数据一致性要求不高,且数据更新较少的应用,如新闻网站的文章浏览功能,MyISAM 引擎可以提供快速的查询性能,并且其全文索引功能可以方便用户进行文章搜索。
  3. 在需要临时存储和快速处理数据的场景,如在一个大型电子商务网站的购物车功能中,存储用户购物车中的商品信息(在用户未结算前),Memory 引擎能够快速读写数据,提升用户体验,不过需要注意数据的备份和在合适时机将数据持久化到其他存储引擎中。
(二)考虑数据量和硬件资源
  1. 如果数据量较大且硬件资源有限,InnoDB 引擎的高效存储和良好的空间管理能力可能更适合。例如,一个大型企业的客户关系管理系统,数据量随着业务增长不断增加,InnoDB 能够在有限的硬件条件下较好地处理数据存储和查询。
  2. 对于内存资源充足且数据量较小的场景,Memory 引擎可以充分利用内存的高速读写特性。比如,在一个小型实时监控系统中,用于存储最近几分钟的监控数据,Memory 引擎可以快速处理这些数据,及时提供监控结果。
(三)权衡性能与功能
  1. 如果对并发性能要求较高,InnoDB 的行级锁可以有效减少锁冲突,提高系统的并发处理能力。例如,在一个高并发的在线票务系统中,多个用户同时查询和预订票务,InnoDB 能够确保系统的高效运行。
  2. 若应用对全文搜索功能有强烈需求,MyISAM 的全文索引支持可以提供高效的文本搜索能力。如在一个内容丰富的知识管理系统中,用户需要快速搜索文档内容,MyISAM 引擎可以满足这一功能需求。

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

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

相关文章

将浮点数转换为分数

原理 double 由以下部分组成&#xff1a; 符号位指数部分尾数部分 符号位的含义&#xff1a;为 0 表示正数&#xff0c;为 1 表示负数。指数部分的含义&#xff1a;在规格化数中&#xff0c;指数部分的整型值减去 1023 就是实际的指数值。在非规格化数中&#xff0c;指数恒为…

前端实现截图的几种方法

前端实现截图的几种方法 前端实现截图功能有多种方式&#xff0c;下面我将介绍几种常用的方法及其实现方案。 1. 使用 html2canvas 库 html2canvas 是最流行的前端截图解决方案之一&#xff0c;它可以将 DOM 元素转换为 canvas。 基本用法 import html2canvas from html2c…

TDengine 与开源可视化编程工具 Node-RED 集成

简介 Node-RED 是由 IBM 开发的基于 Node.js 的开源可视化编程工具&#xff0c;通过图形化界面组装连接各种节点&#xff0c;实现物联网设备、API 及在线服务的连接。同时支持多协议、跨平台&#xff0c;社区活跃&#xff0c;适用于智能家居、工业自动化等场景的事件驱动应用开…

OpenCV——图像形态学

图像形态学 一、像素的距离二、像素的邻域三、膨胀与腐蚀3.1、结构元素3.2、腐蚀3.3、膨胀 四、形态学操作4.1、开运算和闭运算4.2、顶帽和黑帽4.3、形态学梯度4.4、击中击不中 一、像素的距离 图像中像素之间的距离有多种度量方式&#xff0c;其中常用的有欧式距离、棋盘距离…

在Django中把Base64字符串保存为ImageField

在数据model中使用ImageField来管理avatar。 class User(models.Model):AVATAR_COLORS ((#212736, Black),(#2161FD, Blue),(#36B37E, Green),(#F5121D, Red),(#FE802F, Orange),(#9254DE, Purple),(#EB2F96, Magenta),)def generate_filename(self, filename):url "av…

使用 R 处理图像

在 R 中进行图像处理&#xff0c;使用像 imager 这样的包&#xff0c;可以实现强大的数字图像分析和处理。本博客将基于"图像数据分析"文档的概念&#xff0c;演示使用 imager 包进行的关键技术——图像增强、去噪和直方图均衡化&#xff0c;并通过可视化结果展示这些…

一命速通Prometheus+Grafana+Consul+VictoriaMetrics

Prometheus业务 搭建及使用 注意&#xff1a;优先看完提供的博客链接&#xff0c;可以快速了解该工具的功能及其搭建和使用。 prometheusgrafana 一、PrometheusGrafana普罗米修斯&#xff0c;搭建和使用_普罗米修斯 grafana-CSDN博客 ./prometheus --config.fileprometheus.ym…

蚂蚁百宝箱快速创建智能体AI小程序

蚂蚁百宝箱官网https://tbox.alipay.com/community?operationSource1006/ 以下是一篇关于蚂蚁百宝箱快速创建智能体 AI 小程序的图文并茂的博客&#xff1a; 标题&#xff1a;蚂蚁百宝箱快速创建智能体 AI 小程序&#xff0c;开启智能应用新体验 引言 在数字化飞速发展的当…

大模型面试题:RL Scaling Law 中的“过优化”现象及其缓解方法是啥?

更多面试题&#xff0c;请看 大模型面试题总结-CSDN博客 或者 https://gitee.com/lilitom/ai_interview_questions/blob/master/README.md 最好将URL复制到浏览器中打开&#xff0c;不然可能无法直接打开 ---------------------------------------------------------------…

Filecoin系列 - IPLD 技术分析

1. 用途 1.1 存储数据 为了成功地将数据加到 Filecoin 网络, 需要成功完成以下步骤: 客户端导入数据生成CAR文件: 数据必须打包成 CAR file (内容可寻址档案) - CAR是IPLD规范的序列化归档文件.存储交易: 存储供应商和客户之间的存储交易必须由客户发起, 并由存储供应商接受…

Apptrace如何帮我精准追踪移动广告效果?

开发者视角&#xff1a;Apptrace如何帮我精准追踪移动广告效果&#xff1f;​​ 作为独立开发者&#xff0c;我最头疼的就是​“广告投放到底有没有用&#xff1f;”​——钱花出去了&#xff0c;用户是刷量机器人还是真实用户&#xff1f;哪个渠道的ROI最高&#xff1f;Apptr…

【MySQL篇07】:redo log日志与buffer pool详解

文章目录 1. Buffer Pool 缓冲池2. redo log (重做日志)redo log 的作用&#xff1a;为什么需要 redo log buffer&#xff1f;什么时候刷盘呢&#xff1f; 3. 总结一下 redo log 和 Buffer Pool 在更新数据时的协同工作关键组件关系图刷盘完成后 1. Buffer Pool 缓冲池 首先&a…

Qt Library库系列----Serial串口

前言 每次写串口相关的功能时&#xff0c;总是需要重新写或者复制原来写过的文件&#xff0c;容易出错不说&#xff0c;这也不是码农的风格&#xff0c;所以还是得有一套自己得代码库&#xff0c;方便调用&#xff0c;又能保持神秘感。 一、开发需求 1.有个实例类&#xff1b;…

第八节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 用户管理(下)

Vben5 系列文章目录 💻 基础篇 ✅ 第一节:Vben Admin 最新 v5.0 (vben5) 快速入门 ✅ 第二节:Vben Admin 最新 v5.0 (vben5) 快速入门 - Python Flask 后端开发详解(附源码) ✅ 第三节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 对接后端登录接口(上) ✅ 第四节:Vben Ad…

Redis 性能瓶颈时如何处理?

当 Redis 遇到性能瓶颈时&#xff0c;需要从多个维度进行排查和优化。以下是系统化的解决方案&#xff0c;涵盖硬件、配置、数据模型、网络等关键点&#xff1a; 一、硬件资源优化 内存瓶颈 现象&#xff1a;频繁触发 OOM 或 used_memory 接近物理内存。解决&#xff1a; 升级服…

多相机三维人脸扫描仪:超写实数字人模型制作“加速器”

超写实数字人&#xff0c;又称“数字分身”&#xff0c;是以真人形象为原型构建的高仿真虚拟形象&#xff0c;按维度可分为2D数字人与3D数字人。这类数字人已广泛应用于影视制作、游戏交互、品牌直播等场景&#xff0c;其核心价值在于通过技术手段实现真人形象的数字化复刻&…

ceph 自动调整 pg_num

要让 Ceph 的 pool 自动调整 pg_num(PG 数量),你需要启用 PG autoscaler。这是从 Ceph Octopus(15.x) 开始引入的功能,能根据池的容量和对象数量自动建议或调整 pg_num,以实现负载均衡。 ✅ 一步步开启 Pool 的 pg_num 自动调整 1. 启用 PG autoscaler 模块(通常默认启…

Python Beautiful Soup 4【HTML/XML解析库】 简介

全面剖析大模型 图解大模型&#xff1a;生成式AI原理与实战 大语言模型大模型应用开发Transformer DeepSeek模型原理开发深度学习 图灵出品 大模型强化学习详解 大模型算法&#xff1a;强化学习、微调与对齐&#xff08;全彩&#xff09;详解强化学习 RLHF GRPO DPO SFT CoT D…

AI Agent开发与安全

AI Agent的核心演进 Level 1&#xff1a;LLM Agent&#xff08;聊天机器人&#xff09; 特点&#xff1a;靠提示词工程赋予人设&#xff08;如星座占卜、角色扮演&#xff09;&#xff0c;但存在幻觉问题&#xff0c;输出不可控。局限&#xff1a;娱乐性强&#xff0c;难胜任严…

NumPy玩转数据科学

本文在创作过程中借助 AI 工具辅助资料整理与内容优化。图片来源网络。 文章目录 一、引言二、NumPy 概述2.1 NumPy 的定义与发展2.2 NumPy 的重要性 三、NumPy 的多维数组支持3.1 多维数组的概念3.2 多维数组的创建与操作3.2.1 数组的创建3.2.2 数组的索引和切片3.2.3 数组的运…