【进阶篇】MySQL 存储引擎详解

文章目录

  • 0.前言
  • 1.基础介绍
    • 2.1. InnoDB存储引擎底层原理
    • InnoDB记录存储结构和索引页结构
    • InnoDB记录存储结构:
    • InnoDB索引页结构:
  • 3. MVCC 详解
    • 3.1. 版本号分配:
    • 3.2. 数据读取:
    • 3.3. 数据写入:
    • 3.4. 事务隔离级别:
    • 3.5. 数据清理:
  • 参考资料

在这里插入图片描述

0.前言

MySQL是世界上最受欢迎的开源关系数据库管理系统之一。MySQL的一个主要特性是其插件式存储引擎架构,这意味着你可以根据特定的工作负载和需求选择不同的存储引擎。

它支持多种存储引擎。下面将详细解释MySQL的存储引擎,包括InnoDBMyISAMMemory等。每种存储引擎都有其应用的场景和特点,选择哪种引擎取决于数据的特性和应用的需求。在设计数据库时,应该根据需要选择合适的存储引擎。

  1. InnoDB:InnoDB是MySQL的默认存储引擎。它提供了事务安全(ACID兼容)的表,并具有提交、回滚和崩溃恢复功能。InnoDB还支持行级锁定,外键约束等特性。由于它的事务安全特性和处理大量数据时的高性能,它通常用于大型应用。

  2. MyISAM:MyISAM是MySQL的另一种存储引擎。它是基于早期ISAM代码的扩展,提供了大量的功能,比如全文索引、压缩、空间函数等。然而,MyISAM不支持事务和行级锁定,只支持表级锁定,因此在数据安全性和并发性方面不如InnoDB。

  3. Memory:Memory存储引擎创建的表只存在于内存中,也就是说,当MySQL服务器关闭后,表中的数据会丢失。Memory引擎非常快,因为它避免了磁盘I/O,但它只支持HASH索引。这种存储引擎非常适合存储临时数据。

  4. NDB(或者叫做Cluster):NDB 是一个分布式存储引擎,主要用于创建高可用性的集群环境。NDB 支持数据的实时复制和冗余存储,因此它可以提供很高的可用性和可靠性。

  5. Blackhole:Blackhole存储引擎并不存储任何数据,但它会记录所有写操作的日志。这种引擎常用于复制数据到从服务器或者用于审计。

  6. Archive:Archive存储引擎用于存储和检索大量的归档数据。它使用gzip算法进行压缩,从而节省存储空间。然而,Archive只支持INSERT和SELECT操作,不支持DELETE和UPDATE操作。

1.基础介绍

存储引擎功能描述使用场景优点缺点
InnoDB支持事务处理、行级锁定、外键,以及崩溃后的安全恢复。适用于需要事务处理的系统,如电子商务、银行等。具有提交、回滚、崩溃恢复能力,支持行级锁定,提高并发性能。占用的磁盘空间相对较大,内存需求也较大。
MyISAM不支持事务处理、表级锁定、全文搜索,以及压缩数据的能力。适用于只读或者插入新记录的系统,如博客、新闻发布等。占用的磁盘空间和内存较小,处理速度快。不支持事务处理,数据易丢失。
Memory所有的数据都存储在内存中,数据的处理速度快,但是数据在MySQL重启后会丢失。适用于临时数据存储和缓存。数据处理速度快。存储空间有限,数据不持久化。
Archive适用于存储和检索大量的归档数据,如日志信息。适用于大量的归档数据,如日志信息。数据压缩,节省存储空间。不支持事务,只支持插入和选取操作。
Blackhole黑洞引擎,数据写入后即消失,可以用于复制数据库。适合在主从复制时,只做记录用。不占用存储空间。数据不可恢复。
Federated分布式存储引擎,可以访问远程的MySQL表就像本地一样。适用于分布式数据存储。可以访问远程数据。网络延迟和稳定性会影响数据访问。
CSVCSV存储引擎,存储的数据是以文本的形式存放。适用于数据的导入导出。可以直接用文本编辑器查看和编辑数据。不支持索引。
NDBMySQL集群存储引擎,提供事务性存储引擎。适用于大型网络应用。支持大规模并发处理。配置和管理复杂。

2.1. InnoDB存储引擎底层原理

在这里插入图片描述

InnoDB是MySQL默认的存储引擎,它的底层原理主要包括以下几个方面:

  1. 事务支持:InnoDB支持ACID事务模型,能够提供提交(commit)、回滚(rollback)和恢复(recovery)等功能。InnoDB在每个事务中都使用了一个事务日志来记录事务中所有的更改。如果在事务完成之前数据库崩溃,InnoDB能够使用事务日志来恢复数据库的状态。

  2. MVCC:InnoDB使用多版本并发控制(MVCC)来管理并发事务。MVCC允许多个读写事务并发执行,而不需要进行加锁操作,从而提高了数据库的并发性能。

  3. 行级锁定:InnoDB支持行级别的锁定,这是一个重要的区别于其他如MyISAM等存储引擎的特性。行级锁定可以大大提高数据库的并发性能,因为在进行数据更改时,只有被更改的数据行被锁定,其他行仍然可以被其他事务访问。

  4. 索引:InnoDB存储引擎使用B+树作为其索引的数据结构,特别是,其主键索引是聚簇索引,这意味着主键索引的叶子节点就是实际的数据行。这样的设计使得按主键的查询非常快,但是非主键的查询则需要两次索引查找,一次是在非主键索引上,一次是在主键索引上。

  5. 数据存储:InnoDB将数据存储在表空间中。表空间可以包含多个数据文件,这些数据文件可以在磁盘上的不同位置。

  6. 内存缓存:InnoDB具有一个内置的缓冲池,用来缓存表数据和索引数据。这些数据在被访问时会被加载到缓冲池中,这可以大大提高数据库的性能。

InnoDB记录存储结构和索引页结构

页面头部
页面目录
Infimum & Supremum 记录
用户记录
空闲空间
页面页脚
记录头部
空值标记
固定长度列
可变长度列
InnoDB 记录
页面头部
页面目录
Infimum & Supremum 记录
用户记录
空闲空间
页面页脚
记录头部
空值标记
固定长度列
可变长度列

InnoDB记录存储结构:

  1. 记录头信息:每条记录前都有一些额外的信息,包含了当前记录的信息,例如记录的长度,记录所在的行是否删除等。

  2. 记录数据:保存的是表中的行记录,即用户实际的数据。

  3. 尾部信息:记录了一些校验信息,如新字段的值的校验和。

  4. 下一记录的指针:指向下一条记录。

  5. 上一记录的指针:指向上一条记录。

InnoDB索引页结构:

  1. 页面头部:存储了一些管理页面的信息,如页面类型,记录的数量,记录的地址等。

  2. Infimum 和 Supremum 记录:Infimum 记录是页中记录的下限,Supremum 记录是页中记录的上限。

  3. 用户记录:保存的是表中的行记录,即用户实际的数据。

  4. Free Space:空闲空间,用于存储新的记录。

  5. 页面目录:页目录保存了页中所有记录主键值的位置信息,用于加速表的查找。

  6. 页面尾部:保存了页的校验码。
    .

3. MVCC 详解

MVCC(Multi-Version Concurrency Control)是MySQL中用于实现并发控制的机制。它通过为每个事务提供一个独立的数据版本来保证事务的隔离性和一致性。下面是MySQL MVCC的详细解释:

3.1. 版本号分配:

  • 在每个数据行中,MySQL会为每个修改操作(插入、更新、删除)分配一个唯一的版本号或时间戳。
  • 版本号可以是递增的事务ID或其他类型的时间戳。

3.2. 数据读取:

  • 当事务开始时,会记录当前事务的开始时间戳或ID。
  • 在读取数据时,MySQL只会向事务展示在其开始时间戳之前的数据版本。
  • 这意味着事务不会读取到其他并发事务修改的数据。

3.3. 数据写入:

  • 当事务对数据进行修改时,MySQL会生成一个新的数据版本并将其写入数据库。
  • 新版本会被分配一个新的版本号或时间戳。
  • 原始数据版本仍然存在,对于其他事务仍然可见。

3.4. 事务隔离级别:

  • MVCC支持MySQL的多个事务隔离级别,如读未提交、读已提交、可重复读和串行化。
  • 在不同的隔离级别下,MySQL的MVCC机制会根据需求来决定哪些数据版本对事务可见,以保证事务的隔离性和一致性。

3.5. 数据清理:

  • 当事务完成后,MySQL会根据需要进行数据清理。
  • 已提交的事务产生的旧数据版本将被清理,释放存储空间。
  • 未提交的事务产生的数据版本仍然存在,直到事务提交或回滚。

MVCC机制使得不同的事务可以并发地读取和修改数据,而不会相互干扰或产生不一致的结果。它提供了更高的并发性和隔离性,减少了锁的竞争,提高了数据库的性能。然而,需要注意的是,MVCC机制会占用一定的存储空间来维护多个数据版本,因此在设计数据库时需要考虑存储需求。

Created with Raphaël 2.3.0 开始事务 更新系统版本号 读取数据 满足条件? 写入数据 事务提交,更新过期版本号 结束事务 产生冲突,回滚 yes no

MVCC 不是MySQL的特有机制,除了MySQL 使用了MVCC机制,其他数据库版本也使用了 以下是一些采用了多版本并发控制(MVCC)策略的数据库:

  1. PostgreSQL:它使用 MVCC 提供多个并发用户间的一致性视图。

  2. MySQL:在可重复读取隔离级别下,MySQL的InnoDB存储引擎利用 MVCC 解决读写冲突,提供快照数据而非最新数据。

  3. Oracle:尽管Oracle使用了MVCC,但其实现方法与PostgreSQL和MySQL的InnoDB不同。在Oracle中,读操作不会阻塞写操作,反之亦然。

  4. SQLite:SQLite使用了"snapshot isolation",它的核心概念与MVCC相似,都是在事务开始时提供一个快照,而非实时数据。

  5. CouchDB 和 MongoDB:这两个NoSQL数据库也采用了MVCC或类似技术。

  6. Apache HBase:作为开源的非关系型分布式数据库,HBase是Google BigTable的Java实现,也使用了MVCC。

  7. Apache Cassandra:这是Facebook开发的一款开源分布式NoSQL数据库系统,用于满足高速读写需求,如Inbox搜索,它也实现了MVCC。

  8. MariaDB:作为MySQL的一个开源分支版本,MariaDB的InnoDB存储引擎也使用了MVCC。

  9. Microsoft SQL Server:在读已提交快照和快照隔离级别下,SQL Server使用了MVCC。

  10. Hyperledger Fabric:这是一个开源的区块链平台,它使用了MVCC来解决交易冲突。

  11. Tarantool:作为一个开源的NoSQL数据库和Lua应用服务器,Tarantool使用了MVCC。

  12. Greenplum:基于PostgreSQL开发的大规模并行处理数据库管理系统Greenplum也实现了MVCC。

  13. Firebird:作为一个提供众多SQL标准特性的关系数据库,Firebird也实现了MVCC。

  14. SAP HANA:这是一个基于内存的关系数据库管理系统,同样实现了MVCC。

参考资料

  1. 官方文档:MySQL官方网站提供了关于各种存储引擎的详细文档,包括InnoDB和MyISAM等。https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html

  2. 书籍:《高性能MySQL》是一本非常全面的关于MySQL性能优化、架构设计和内部机制的书籍,其中包含了大量关于存储引擎的内容。

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

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

相关文章

【ubuntu】 20.04 网络连接器图标不显示、有线未托管、设置界面中没有“网络”选项等问题解决方案

问题 在工作中 Ubuntu 20.04 桌面版因挂机或不当操作,意外导致如下问题 1、 Ubuntu 网络连接图标消失 2、 有线未托管 上图中展示的是 有线 已连接 ,故障的显示 有线 未托管 或其他字符 3、 ”设置“ 中缺少”网络“选项 上图是设置界面&#xff0c…

【Cesium创造属于你的地球】实现地球展示、灵活进行坐标转换、视角切换

大家好,我是AIC山鱼!👉这是我的主页 🐋作为CSDN博主和前端优质创作者✍,我致力于为大家带来新颖、脱俗且有趣的内容。 🐱我还创建了山鱼社区,这是一个独特的社区🏠,&…

供水营业收费管理系统:智慧水务的得力助手

随着我国经济的快速发展,城市化进程不断加快,供水行业的需求也不断增长。为满足人们日益增长的用水需求,提高供水企业的管理水平和服务质量,供水营业收费管理系统应运而生,成为智慧水务的得力助手。 一、供水营业收费管…

【Hadoop】HDFS读写流程和客户端命令使用

🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁 🦄 个人主页——🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁 🪁🍁 希望本文能够给您带来一定的…

ChromeOS 的 Linux 操作系统和 Chrome 浏览器分离

科技媒体 Ars Technica 报道称,谷歌正在将 ChromeOS 的浏览器从操作系统中分离出来 —— 让它变得更像 Linux。虽然目前还没有任何官方消息,但这项变化可能会在本月的版本更新中推出。 据介绍,谷歌将该项目命名为 "Lacros"—— 代表…

python爬虫12:实战4

python爬虫12:实战4 前言 ​ python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论,并不会对网站产生不好…

Hadoop Hdfs基本命令

0目录 1.hadoop安装问题处理 2.hdfs基本命令 3.上传/下载文件和文件夹 1.hadoop安装问题处理 如果安装有进程无法启动,如下图 重新检查6个配置文件 Core-site.xml \ hdfs-site.xml \ hadoop-env.sh \ yarn-site.xml \ workers \ yarn-site.xml 来到hadoop313目录…

SpringBoot 跨域问题和解决方法

Spring Boot 是一种用于构建独立的、生产级别的Java应用程序的框架。在开发Web应用程序时,经常会遇到跨域资源共享(CORS)问题。本文将详细介绍Spring Boot中的跨域问题以及相应的解决方法。 目录 什么是跨域?1. 使用Spring Boot…

Matlab论文插图绘制模板第109期—特征渲染的标签气泡散点图

在之前的文章中,分享了Matlab标签散点图的绘制模板: 特征渲染的标签散点图: 进一步,再来分享一下特征渲染的标签气泡散点图的绘制模板,从而可以再添加一个维度的信息。 先来看一下成品效果: 特别提示&…

运用亚马逊云科技Amazon Kendra,快速部署企业智能搜索应用

亚马逊云科技Amazon Kendra是一项由机器学习(ML)提供支持的企业搜索服务。Kendra内置数据源连接器,支持快速访问Amazon S3、AmazonRDS、AmazonFSX以及其他外部数据源,帮助用户自动提取文档并建立索引。Kendra支持超过30多种多国语…

人工智能会成为人类的威胁吗?马斯克、扎克伯格、比尔·盖茨出席

根据消息人士透露,此次人工智能洞察论坛将是一次历史性的聚会,吸引了来自科技界的许多重量级人物。与会者们将共同探讨人工智能在科技行业和社会发展中的巨大潜力以及可能带来的挑战。 埃隆马斯克,特斯拉和SpaceX的首席执行官,一直…

无涯教程-Python机器学习 - Analysis of Silhouette Score函数

剪影得分的范围是[-1,1]。其分析如下- 1分数-接近1 剪影分数表示样本距离其邻近簇很远。 0分数-0 剪影分数表示样本在将两个相邻聚类分隔开的决策边界上或非常接近。 -1分数-1 剪影分数表示样本已分配给错误的聚类。 Silhouette得分的计算可以使用以下公式完成 $$剪影得…

没有 JavaScript 计时器的自动播放轮播 - CSS 动画

先看效果&#xff1a; 再看代码&#xff08;查看更多&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>计时器</title><style>* {padding: 0;margin: 0;box-siz…

JAVA JNA 调用C接口的三种方式

文章目录 1. 准备一个共享库文件2. JNA姿势1—继承Library接口3. JNA姿势2—直接NativeLibrary.getInstance3. JNA姿势3—Native方法 1. 准备一个共享库文件 test.c #include <stdio.h> int test(char *input){printf("input:%s\n",input);return 0; }libtes…

Aidex 移动端快速开发框架# RuoYi-Uniapp项目,uniapp vue app项目跨域问题

参考地址&#xff1a; manifest.json官方配置文档&#xff1a;manifest.json 应用配置 | uni-app官网 Chrome 调试跨域问题解决方案之插件篇&#xff1a; uni-app H5跨域问题解决方案&#xff08;CORS、Cross-Origin&#xff09; - DCloud问答 其实uni-app官方有解决跨域的办…

Yolov8-pose关键点检测:模型轻量化创新 | PConv结合c2f | CVPR2023 FasterNet

💡💡💡本文解决什么问题:新的partial convolution(PConv),通过同时减少冗余计算和内存访问可以更有效地提取空间特征。 PConv| GFLOPs从9.6降低至8.5,参数量从6482kb降低至6134kb, mAP50从0.921提升至0.925 Yolov8-Pose关键点检测专栏介绍:https://blog.csdn.n…

第9章:聚类

聚类任务 性能度量 距离度量 非度量距离 原型聚类 有很好的统计学上的意义&#xff0c;但是只能找到椭球形的聚类。 密度聚类 层次聚类

JVM,JRE和JDK的区别

JVM&#xff0c;JRE和JDK的区别 JVM(Java Virtual Machine&#xff0c;Java虚拟机)JREJRE目录结构 JDK JVM(Java Virtual Machine&#xff0c;Java虚拟机) Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行&#xff0c;Java虚拟机中…

Redis三种特殊数据类型

Redis三种特殊数据类型 geospatial 地理位置 Redis 地理空间数据类型简介 Redis 地理空间索引允许您存储坐标并搜索它们。 此数据结构可用于查找给定半径或边界框内的邻近点。 基本命令 GEOADD 将位置添加到给定的地理空间索引&#xff08;请注意&#xff0c;使用此命令&a…

cortex-A7核PWM实验--STM32MP157

实验目的&#xff1a;驱动风扇&#xff0c;蜂鸣器&#xff0c;马达进行工作 目录 一&#xff0c;PWM相关概念 有源蜂鸣器和无源蜂鸣器 二&#xff0c;分析电路图&#xff0c;框图 三&#xff0c;分析RCC章节 1&#xff0c;确定总线连接 2&#xff0c;根据总线内容确定基…