数据库Mysql三大引擎(InnoDB、MyISAM、 Memory)与逻辑架构
MySQL数据库及其分支版本主要的存储引擎有InnoDB
、MyISAM
、 Memory
等。简单地理解,存储引擎就是指表的类型以及表在计算机上的存储方式。存储引擎的概念是MySQL的特色,使用的是一个可插拔存储引擎架构,能够在运行的时候动态加载或者卸载这些存储引擎。不同的存储引擎决定了MySQL
数据库中的表可以用不同的方式来存储。我们可以根据数据的特点来选择不同的存储引擎。在MySQL中的存储引擎有很多种,可以通过SHOW ENGINES语句
来查看:
在Support
列中,YES
表示当前版本支持这个存储引擎;DEFAULT
表示该引擎是默认的引擎,即InnoDB
。
下面重点关注InnoDB
、MyISAM
、MEMORY
这3种。
InnoDB存储引擎
① InnoDB
是事务型数据库的首选引擎,支持事务ACID
,简单地说就是支持事务完整性、一致性。
② InnoDB
支持行级锁。行级锁可以在最大程度上支持并发,以及类似Oracle
的一致性读、多用户并发。
③ InnoDB
是为处理巨大数据量的最大性能设计,InnoDB
存储引擎完全与MySQL
服务器整合,InnoDB
存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。
④ InnoDB
支持外键完整性约束,存储表中的数据时,每张表的存储都按照主键顺序存放,如果没有显式在表定义时指定主键,InnoDB
会为每一行生成一个6字节的ROWID
,并以此作为主键。
⑤ InnoDB
支持崩溃数据自修复。InnoDB
存储引擎中就是依靠redolog
来保证的。当数据库异常崩溃后,数据库重新启动时会根据redolog
进行数据恢复,保证数据库恢复到崩溃前的状态。
MyISAM存储引擎
① MyISAM
存储引擎不支持事务,所以对事务有要求的业务场景不能使用。
②其锁定机制是表级索引,虽然可以让锁定的实现成本很小,但是也同时大大降低了其并发性能。
③不仅会在写入的时候阻塞读取,MyISAM
还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读。
④只会缓存索引:MyISAM
可以通过key_buffer
缓存,以大大提高访问性能减少磁盘I/O,但是这个缓冲区只会缓存索引,而不会缓存数据。
⑤适用于不需要事务支持(不支持)、并发相对较低(锁定机制问题)、数据修改相对较少(阻塞问题)、以读为主这类场景。
MEMORY存储引擎
MEMORY
存储引擎是MySQL中的一类特殊存储引擎,使用存储在内存中的内容来创建表,而且所有数据也放在内存中。
①每个基于MEMORY
存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为frm
类型。该文件中只存储表的结构,数据文件则存储在内存中。
② MEMORY
默认使用哈希索引,速度比使用B型树索引快。如果想用B型树索引,可以在创建索引时指定。
③ MEMORY
存储引擎是把数据存到内存中,如果内存出现异常就会影响数据。如果重启或者关机,那么所有数据都会消失。
在实际工作中,选择一个合适的存储引擎是比较复杂的问题。每种存储引擎都有自己的优缺点,不能笼统地说谁比谁好。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那么选择InnoDB
有很大的优势。如果表主要是用于插入记录和读出记录,那么选择MyISAM
能实现处理高效率。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMORY
,它对表的大小有要求,不能建立太大的表.
MySQL逻辑架构
MySQL逻辑架构整体分为3层:
第一层是客户端层,所包含的并不是MySQL独有的技术,它们都是服务于C/S程序或者是这些程序所需要的,诸如连接处理、身份验证、安全性等功能均在这一层处理。
第二层是SQL层(SQL Layer),因为这是MySQL的核心部分,通常也叫作核心服务层。在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断、SQL解析、执行计划优化、Query cache的处理以及所有内置的函数(如日前时间、加密等函数)、存储过程、视图、触发器等。
第三层是存储引擎层(Storage Engine Layer),是底层数据存取操作实现的部分,由多种存储引擎共同组成。它们负责存储和获取所有存储在MySQL中的数据,类似Linux的众多文件系统。每个存储引擎都有自己的优势和劣势,通过存储引擎API来与它们交互,这些API接口隐藏了各个存储引擎不同的地方。对于查询层尽可能透明。
虽然看起来MySQL架构好像比较简单,但是实际上每一层中都含有各自的很多小模块,尤其是第二层SQL Layer,结构蛮复杂的,如图:
我们简单地做如下剖析:
(1)Connectors
:指的是不同语言中与SQL的交互。
(2)Management Services & Utilities
:管理服务和工具组件,从备份和恢复的安全性、复制、集群、管理、配置、迁移和元数据等方面管理数据库。
(3)Connection Pool
:连接池,是为解决资源的频繁分配﹑释放所造成的问题而为数据库连接建立的一个“缓冲池”。原理是预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。它的作用是进行身份验证、线程重用、连接限制、管理用户的连接、线程处理等需要缓存的需求。
(4)SQL Interface
(SQL接口):接受用户的SQL命令,并且返回用户需要查询的结果。比如select from
就是调用SQL Interface。
(5)Parser
:解析器,验证和解析SQL命令。SQL命令传递到解析器的时候会被解析器验证和解析,并生成一棵对应的解析树。在这个过程中,解析器主要通过语法规则来验证和解析。比如SQL中是否使用了错误的关键字或者关键字的顺序是否正确等。
(6)Optimizer
:查询优化器。SQL语句在查询执行之前,会使用查询优化器对查询进行优化,得出一个最优的策略。多数情况下,一条查询可以有很多种执行方式,最后都返回相应的结果。优化器的作用就是找到其中最好的执行计划。用一个例子就可以理解,比如“select uid,name from user where gender=1
”。这个select查询先根据where语句进行选取,而不是先将表全部查询出来以后再进行gender过滤;这个select
查询先根据uid
和name
进行属性投影,而不是将属性全部取出来以后再进行过滤;将这两个查询条件联接起来生成最终查询结果。
(7)Cache和Buffer
:主要功能是将客户端提交给MySQL的select
类query
请求的返回结果集缓存到内存中,与该query
的一个hash
值做一个对应。该query
所取数据的基表发生任何数据的变化之后,MySQL会自动使该query
的Cache
失效。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的,比如表缓存、记录缓存、key缓存、权限缓存等。
(8)Pluggable Storage Engines
:可插拔存储引擎。MySQL区别于其他数据库的最重要的特点就是其插件式的存储引擎接口模块,这个可以说是MySQL数据库中最有特色的一个特点了。目前,各种数据库产品中只有MySQL可以实现底层数据存储引擎的插件式管理。这个模块实际上只是一个抽象类,根据MySQL AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制,这种访问机制就称为存储引擎。正是因为它成功地将各种数据处理高度抽象化才成就了今天MySQL可插拔存储引擎的特色。每个存储引擎开发者都可以按照自己的意愿来进行开发,存储引擎是基于表的。MyISAM存储引擎的查询速度快,有较好的索引优化和数据压缩技术,但是它不支持事务。InnoDB支持事务,并且提供行级的锁定,应用也相当广泛。Memory使用存储在内存中的数据来创建表,而且所有的数据也都存储在内存中。
(9)File System
:数据存储在运行于裸设备的文件系统之上,支持的文件类型有EXT3、EXT4、NTFS、NFS。
(10)File&Logs
:数据文件以及redo、undo等各种日志文件。
相关文章:

数据库Mysql三大引擎(InnoDB、MyISAM、 Memory)与逻辑架构
MySQL数据库及其分支版本主要的存储引擎有InnoDB、MyISAM、 Memory等。简单地理解,存储引擎就是指表的类型以及表在计算机上的存储方式。存储引擎的概念是MySQL的特色,使用的是一个可插拔存储引擎架构,能够在运行的时候动态加载或者卸载这些存…...

Python数据分析实战-实现Mann-Whitney U检验(附源码和实现效果)
实现功能 使用scipy.stats模块中的mannwhitneyu函数来实现Mann-Whitney U检验,该检验用于比较两个独立样本的分布是否有显著差异。 实现代码 from scipy.stats import mannwhitneyu# 两个独立样本的数据 group1 [1, 2, 3, 4, 5] group2 [6, 7, 8, 9, 10]# 执行…...

车载SBC芯片概论
+他V hezkz17进数字音频系统研究开发交流答疑群(课题 参考英飞凌SBC官网资料:https://www.infineon.com/cms/cn/product/automotive-system-ic/system-basis-chips-sbc/ SBC芯片在汽车电子领域可谓占一席之地了。那么什么是SBC?怎么用?用在哪里?主要特性? 1.什么是SBC?…...

【ARM AMBA5 CHI 入门 12.1 -- CHI 链路层详细介绍 】
文章目录 CHI 版本介绍1.1 CHI 链路层介绍1.1.1 Flit 切片介绍1.1.2 link layer credit(L-Credit)机制1.1.3 Channel1.1.4 Port1.1. RN Node 接口定义1.1.6 SN Node 接口定义1.2 Channel interface signals1.2.1 Request, REQ, channel1.2.2 Response, RSP, channel1.2.3 Snoop…...

【物联网】Arduino+ESP8266物联网开发(二):控制发光二极管 按钮开关控制开关灯
【物联网】ArduinoESP8266物联网开发(一):开发环境搭建 安装Arduino和驱动 2.ESP8266基础应用 【物联网】ESP8266 开关控制 发光二极管 LED 开发软件下载地址 链接: https://pan.baidu.com/s/1BaOY7kWTvh4Obobj64OHyA?pwd3qv8 提取码: 3qv8 学习过程中会用到的基础…...

WPF向Avalonia迁移(二、一些可能使用到的库)
可能使用到的一些库 1. UI库 开源项目:https://github.com/irihitech/Semi.Avalonia 如果想引用他的DataGrid样式还需要添加Semi.Avalonia.DataGrid 2. 图表库 LiveChartsCore.SkiaSharpView.Avalonia 3.SVG库 开源项目:https://github.com/wieslaw…...

Mac navicat连接mysql出现1045 - Access denied for user ‘root‘
Mac navicat连接mysql出现1045 - Access denied for user ‘root’ 前提:如果你的mac每次开navicat都连接不上,推荐试试我这个方法 1.打开设置–>找到左下角最下面的MySQL–>点击Stop MySQL Server 2.开启一个终端,依次输入以下命令&a…...

win10电脑插入耳机,右边耳机声音比左边小很多
最近使用笔记本看视频,发现插入耳机(插入式和头戴式)后,右边耳机声音比左边耳机声音小很多很多,几乎是一边很清晰,另一边什么都听不到。 将耳机插到别人电脑上测试耳机正常,那就是电脑的问题。试…...

本文整理了Debian 11在国内的几个软件源。
1.使用说明 一般情况下,将/etc/apt/sources.list文件中Debian默认的软件仓库地址和安全更新仓库地址修改为国内的镜像地址即可,比如将deb.debian.org和security.debian.org改为mirrors.xxx.com,并使用https访问,可使用…...
2023NOIP A层联测6 数点
题目大意 给你一个排列 p p p,对于每一个 i i i,我们在平面上,放置一个点 ( i , p i ) (i,p_i) (i,pi)。对于坐标上下限都在 1 ∼ n 1\sim n 1∼n内的全体 ( n ( n 1 ) 2 ) 2 (\frac{n(n1)}{2})^2 (2n(n1))2矩形,求每个矩形…...

Jmeter 链接MySQL测试
1.环境部署 1.1官网下载MySQL Connector https://dev.mysql.com/downloads/connector/j/ 1.2 解压后,将jar放到jmeter/lib目录下 1.3 在测试计划中添加引用 2.脚本设置 2.1设置JDBC Connection Configuration 先添加一个setUp线程中,在setUp中添加“…...
jwt的了解和使用以及大致代码分析
jwt简介 以下介绍来自官网(https://jwt.io/) SON Web 令牌 (JWT) 是一种开放标准 (RFC 7519),它定义了一种紧凑且独立的方式,用于在各方之间以 JSON 对象的形式安全地传输信息。此信…...
uniapp中videojs、renderjs的使用
在uniapp中使用了某些前端库或iframe,需要操作这些库中的dom的时候, 而uni上又没有document等基础对象。也就无法操作这些dom去实现一些交互逻辑,那么,涉及到这些的前端类库就无法使用,例如html2、canvas、image、vide…...

AIGC AI绘画 Midjourney 参数大全详细列表
AIGC ChatGPT 职场案例 AI 绘画 与 短视频制作, Power BI 商业智能 68集, 数据库Mysql8.0 54集 数据库Oracle21C 142集, Office 2021实战, Python 数据分析, ETL Informatica 案例实战 Excel 2021实操,函数大全,图表大全,大屏可视化制作 加技巧500集 数据分析可视化T…...

安装hadoop,并配置hue
0、说明 对于大数据学习的初始阶段,我也曾尝试搭建相应的集群环境。通过搭建环境了解组件的一些功能、配置、原理。 在实际学习过程中,我更多的还是使用docker来快速搭建环境。 这里记录一下我搭建hadoop的过程。 1、下载hadoop 下载地址:…...

23种经典设计模式:单例模式篇(C++)
前言: 博主将从此篇单例模式开始逐一分享23种经典设计模式,并结合C为大家展示实际应用。内容将持续更新,希望大家持续关注与支持。 什么是单例模式? 单例模式是设计模式的一种(属于创建型模式 (Creational Pa…...
ros中对move_base的调用
move_base包中自带costmap2d, global planner 等功能 也可以直接调用其中make_plan进行路径规划 #include "geometry_msgs/PoseStamped.h" #includde "nav_msgs/GetPlan.h"void fillPathRequest(nav_msgs::GetPlan::Request &request, float start_x…...

Git从本地库撤销已经添加的文件或目录
场景 在提交时, 误将一个目录添加到了暂存区, 而且commit 了本地库,同批次commit 的还有其他需要提交的文件。 commit 之后发现这个目录下所有的文件都不需要提交, 现在需要撤销这个提交, 使这个目录不被push到远端库。 这里以远端服务器github 为例,在Git GUI下看到的…...

百度SEO优化的特点(方式及排名诀窍详解)
百度SEO优化的特点介绍: 百度SEO优化是指对网站进行优化,使其在百度搜索引擎中获得更好的排名,进而获取更多的流量和用户。百度SEO优化的特点是综合性强、效果持久、成本低廉、投资回报高。百度的搜索算法不断更新,所以长期稳定的…...

Gin 文件上传操作(单/多文件操作)
参考地址: 单文件 | Gin Web Framework (gin-gonic.com)https://gin-gonic.com/zh-cn/docs/examples/upload-file/single-file/ 单文件 官方案例: func main() {router := gin.Default()// 为 multipart forms 设置较低的内存限制 (默认是 32 MiB)router.MaxMultipartMem…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...