从 InnoDB 到 Memory:MySQL 存储引擎的多样性

news2024/9/21 4:36:52

📃个人主页:island1314

🔥个人专栏:MySQL学习

⛺️  欢迎关注:👍点赞 👂🏽留言 😍收藏  💞 💞 💞


🚀前言

🔥事务存储引擎是数据库管理系统中负责数据存储、检索和事务处理的组件。它们支持事务的四个基本特性,通常被称为 ACID 属性:

  • 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不会留下中间状态。
  • 一致性(Consistency):事务必须使数据库从一个一致性状态转换到另一个一致性状态。
  • 隔离性(Isolation):事务的执行不应受到其他事务的干扰。
  • 持久性(Durability):一旦事务提交,其结果就是永久性的。

🔥MySQL 支持多种事务存储引擎,其中最常见的是 InnoDB 和 NDB(也称为 MySQL Cluster)。此外,还有其他一些如 Archive、Memory、MyISAM等存储引擎,它们在特定场景下也有应用。我们这篇文章主要讲的就是 InnoDB、MyISAM、Memory、NDB

1. 存储引擎的相关指令

☘️1.1 查询建表语句

--语法 
show create table 表名; 

-- 比如查询 student 表的建表语句
show create table student;
-- 结果显示
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table
                                           |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
  `id` int DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------+

🍀1.2 查询当前数据库支持的引擎类型

-- 语法
show engines;

-- 结果显示 当前数据库下引擎
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| ndbinfo            | NO      | MySQL Cluster system information storage engine                | NULL         | NULL | NULL       |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| ndbcluster         | NO      | Clustered, fault-tolerant tables                               | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

🌿1.3 创建表,并指定存储引擎

-- 语法 (注:默认存储引擎为 InnoDB)
create table 表名(
	字段1 字段1 类型 [comment 字段1注释]
	......
	字段n 字段n 类型 [comment 字段n注释]
)ENGINE = INNNODB [COMMENT 表注释];

-- 案例:

-- 1、创建表 My_myisam,并且指定MyISAM存储引擎
create table My_myisam(
	id int,
	name varchar(20)
)engine = MyISAM;

--1、创建表 My_memory,并且指定Memory存储引擎
create table My_Memory(
	id int,
	name varchar(20)
)engine = Memory;

2. 存储引擎的种类

🥝2.1 InnnoDB 

💢InnoDB 是一种兼顾可靠性和高性能的通用存储引擎,在 MySQL5.5之后,成为了 MySQL 默认的存储引擎,广泛用于需要高可靠性和性能的应用。

特点

(1)事务支持

  • InnoDB 完全支持 ACID 事务,确保数据的一致性和完整性。

(2)行级锁

  • 相比于表级锁定,行级锁定可以减少锁冲突,提高并发性能。InnoDB引擎采用了细粒度的行级锁定策略,使得多个事务可以并发访问不同的数据行(高并发)。

(3)外键约束

  • 支持外键约束,可以确保数据的引用完整性,防止无效的数据引用

(4)崩溃恢复

  • 具有自动崩溃恢复功能,使用重做日志和撤销日志保证数据安全。通过重做(redo)日志  撤销(undo)日志,InnoDB可以在系统崩溃后恢复数据到一致状态,确保数据的持久性和完整性。

(5)自适应哈希索引

  • 提升查询性能,自动在内存中维护哈希索引。

文件结构

InnoDB 使用多种文件来管理数据和索引,主要包括:

 (1)数据文件(.ibd)

  • 存储表数据和索引。每个表可以有独立的 .ibd 文件(如果启用了文件存储),来存储该表的表结构(frm、sdi)、数据和索引。

  (2)共享表空间文件(ibdata)

  • 默认情况下,所有 InnoDB 表的数据和索引存储在一个共享的 ibdata 文件中。

(3)日志文件(ib_logfile)

  •  存储重做日志,确保数据在崩溃时可以恢复。

  (4)配置文件(my.cnf)

  • 包含 InnoDB 的配置参数,如缓冲池大小、日志文件大小等。

适用范围

InnoDB 适用于多种场景,特别是:

 (1)在线交易处理(OLTP)

  • 适合高并发、频繁插入、更新和删除操作的应用。

 (2)需要数据完整性和一致性的应用

  • 如金融、电子商务系统,要求强事务支持和外键约束。

 (3)复杂查询和大数据量

  • 支持高效的查询性能,适合需要处理大量数据的应用。

 (4)数据恢复和安全性要求高的场景

  • 由于其崩溃恢复机制,适合对数据安全性要求严格

总体而言:InnoDB 是一个通用、高效的存储引擎,在性能、可靠性和数据一致性方面表现出色,能够满足各种应用需求,成为了众多企业和开发者的首选。 


🥑2.2 NDB

💢NDB(或 NDB Cluster)是 MySQL 的一种分布式事务存储引擎,主要用于高可用性和高可扩展性的应用场景。它支持自动分片、负载均衡和数据冗余,使其特别适合大规模的在线事务处理(OLTP)应用。

特点

(1)分布式架构

  • NDB 采用分布式架构,数据可以存储在多个节点上,提高了可扩展性和可用性。

(2)高可用性

  • 支持数据冗余,通过数据复制确保高可用性,节点故障时可以自动切换。

(3)支持事务

  • 完全支持 ACID 事务特性,确保数据一致性和完整性。

(4)自动分片

  • 数据可以在多个数据节点之间自动分片,能够处理大量的并发请求。

(5)实时数据访问

  • 适合需要实时数据处理的应用,如金融和电信行业。

(6)支持外键和约束

  • 支持外键和多种数据完整性约束。

文件结构

NDB 存储引擎的文件结构与传统的 MyISAM 或 InnoDB 不同,因为它采用的是分布式存储模型:

(1)数据节点

  • 数据存储在多个数据节点上,每个节点都可以存储部分数据,并可以并行处理请求。

(2)管理节点:

  • 管理集群的状态和配置,确保数据节点之间的协调。

(3)SQL 节点

  • 负责接收客户端的 SQL 请求,并将其转发到适当的数据节点。

适用范围

NDB 存储引擎适合以下场景:

(1)高并发 OLTP 应用

  • 适用于对性能和可扩展性要求高的在线交易处理系统。

(2)分布式系统

  • 在分布式环境中,需要高可用性和负载均衡的应用。

(3)实时数据处理

  • 适合需要快速访问和处理实时数据的场景,如电信计费和金融交易。

总体而言:NDB 事务存储引擎以其分布式架构、高可用性和强事务支持,成为大规模、高性能应用的理想选择。尽管其配置和管理相对复杂,但在高并发和大规模数据处理的场景中,NDB 提供了强大的功能和灵活性。


🍉2.3 MyISAM

💢MyISAM 是 MySQL 的一种非事务性存储引擎,主要用于需要快速读取、轻量级存储 或者 读取频繁、更新较少 的应用场景。它在 MySQL 早期版本中是默认的存储引擎,适合用于数据读多写少的应用和一些对事务完整性要求不高的系统。

特点

(1)高性能读取

  • MyISAM 优化了读取性能,适合执行大量的 SELECT 查询操作。

(2)表级锁

  • 与InnoDB引擎的行级锁定不同,MyISAM引擎采用表级锁定机制。这意味着在对表进行写操作时,会锁定整个表,阻止其他线程对该表进行读写操作。虽然这种锁定策略在某些高并发场景下可能导致性能瓶颈,但在读多写少的场景中,表级锁定可以简化锁定机制,提高性能。

(3)不支持事务

  • 与InnoDB引擎相比,MyISAM引擎不支持ACID事务。这意味着在MyISAM引擎中执行的数据操作不会受到事务的原子性、一致性、隔离性和持久性的保护。因此,在需要保证数据完整性和一致性的场景下,MyISAM引擎可能不是最佳选择。

(4)全文索引

  • MyISAM引擎支持全文索引,使得它非常适合于文本搜索和匹配等场景。通过全文索引,用户可以快速地在大量文本数据中查找特定的关键词或短语。

(5)表结构简单

  • 文件结构清晰,易于管理。

文件结构

MyISAM 的文件结构主要包括:

(1)数据文件(.MYD)

  • 存储实际的数据。

(2)索引文件(.MYI)

  • 存储表的索引信息,包括主键索引和辅助索引。

(3)表定义文件(.frm)

  • 存储表的定义和结构信息。

适用范围

尽管MyISAM引擎在某些方面不如InnoDB引擎强大,但在特定场景下,它仍然具有独特的优势:

(1)只读或大量读操作的应用

  • 对于只需要进行大量读操作而很少进行写操作的应用场景,MyISAM引擎的表级锁定和快速查询性能使其成为理想选择。例如,一些静态的网站内容、日志数据或只读的数据仓库等

(2)数据分析

  • 适合需要快速检索的分析型应用。

(3)全文搜索

  • 对于需要进行文本搜索的应用,MyISAM 提供良好的支持。例如,博客系统、新闻网站或文档管理系统等。

(4)小型应用

  • 在不需要复杂事务和外键约束的小型应用中,MyISAM 也非常合适。

(5)简单的数据备份和恢复:

  • 由于MyISAM引擎将数据和索引分开存储,因此在备份和恢复数据时,可以分别处理数据文件和索引文件,提高备份和恢复的效率和灵活性。

总体而言:MyISAM引擎作为MySQL的一个重要存储引擎,虽然在一些方面不如InnoDB引擎强大,但是MyISAM可以 适用于对性能要求高,但对数据完整性和事务支持要求不高的场景。


🍋‍🟩2.4 Memory

💢MEMORY 存储引擎是 MySQL 的一种基于内存的数据存储引擎,提供高速的数据访问和操作。它将所有数据存储在内存中,因此在读取和写入方面非常快,适合临时数据存储和快速访问的场景。

特点

(1)高速性能

  • 所有数据存储在内存中,读写速度极快,适合对性能要求高的应用。

(2)表级锁

  • 使用表级锁,这可能会在并发写入时导致性能瓶颈。

(3)非持久性

  • 数据在数据库重启或崩溃时会丢失,因此适合临时数据或缓存使用。

(4)支持索引

  • 支持主键索引和唯一索引,但不支持外键,默认是hash索引。

(5)内存使用

  • 可以设置每个表的最大内存使用量,通过 MAX_ROWS 和 AVG_ROW_LENGTH 来优化。

文件结构

MEMORY 存储引擎的文件结构相对简单,主要包括:

  • 表定义文件(.frm)存储表的定义信息,包括列类型和其他结构信息。

实际数据并不存储在磁盘文件中,而是完全驻留在内存中。

适用范围

MEMORY 存储引擎适合以下场景:

(1)临时数据存储

  • 适合需要快速读写的临时表,如缓存或会话信息。

(2)高频查询

  • 适用于频繁读取的场景,如统计数据或快速检索。

(3)测试和开发

  • 开发和测试过程中,可以快速验证数据操作的逻辑。

总体而言:MEMORY 存储引擎通过在内存中存储数据,提供了极快的访问速度。尽管它不适合长期存储和持久性数据,但在特定应用场景中,其高效性和便利性使其成为一个有价值的选择。


3. 存储引擎的选择

🔥选择适合的存储引擎是数据库设计中至关重要的步骤,影响性能、可扩展性和数据完整性。以下是一些关键因素和不同存储引擎的比较,帮助您做出更明智的选择。

🍎3.1 需求分析

  • 数据持久性

    • 如果需要数据持久性,选择支持事务的引擎(如 InnoDB)。
  • 性能要求

    • 高并发读写需求的场景可能适合使用 MEMORY 引擎,快速访问但不持久化数据。
  • 事务支持

    • 需要支持 ACID 特性的应用应选择 InnoDB 或 NDB 引擎。

🍍3.2 存储引擎比较

特性InnoDBMyISAMMEMORYNDB
事务支持支持(ACID)不支持不支持支持(ACID)
锁机制行级锁表级锁表级锁行级锁
外键支持支持不支持不支持支持
数据冗余支持(通过备份和复制)不支持不支持支持(自动分片和复制)
适用场景高并发 OLTP 应用只读和小型表临时数据和缓存分布式和高可用性场景

🍐3.3 具体应用场景

  • 高并发事务处理

    • 选择:InnoDB 或 NDB,支持行级锁和事务,适合高频写入场景。
  • 读多写少的应用

    • 选择:MyISAM,在只读查询中表现优异,适合静态内容。
  • 临时数据或会话信息

    • 选择:MEMORY,快速存取,适合缓存和会话存储。
  • 分布式系统

    • 选择:NDB,支持自动分片和高可用性,适合大规模在线应用。

🍇3.4 性能优化

  • 索引使用

    • 根据数据访问模式,合理设计索引以提高查询性能。
  • 表设计:

    • 选择合适的列类型和长度,优化存储空间和访问速度。
  • 配置调整

    • 根据具体需求调整存储引擎的参数配置,以提升性能。

📖总结

选择合适的存储引擎取决于具体的应用需求、性能目标和数据特性。在决策时,需要综合考虑数据的持久性、并发性能、事务支持及其它特性,以确保所选引擎能有效满足应用需求。

💞 💞 💞那么本篇到此就结束,希望我的这篇博客可以给你提供有益的参考和启示,感谢大家支持!!!祝大家天天开心

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

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

相关文章

PSINS,GNSS速度与SINS滤波的MATLAB代码

文章目录 程序说明主要特点适用范围获取方式运行截图 程序说明 基于PSINS工具箱的GNSS和SINS滤波的MATLAB代码,观测量为GNSS的三轴速度。 专为工程师和研究人员设计,助您轻松实现高精度的导航和定位。 主要特点 高精度滤波算法:结合PSINS和…

内存dump文件分析

目录 dumpsneak攻击步骤: dump 打开Volatility工具目录,C:\Users\Administrator\Desktop\应急工具集\volatility 打开运行输入volatility.exe -f 文件 imageinfo(花费比较长的时间,对于这个mem文件,可以使用Win2012…

【C++初阶】vector模拟实现

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

什么是全国特价电影票api?接口如何对接?

一、全国特价电影票接口对接的基本情况 接口包含信息:电影票API接口中包含影院、影厅、座位、影片、场次、日期及票价等信息。市场需求背景:随着我国电影消费市场的火爆,观影人数增多,除了猫眼、淘票票等平台,各大平台…

SLA 概念和计算方法

SLA 概念和计算方法 SLA SLA:服务等级协议(简称:SLA,全称:service level agreement) 网站服务可用性的一个保证 9越多代表全年服务可用时间越长服务更可靠,停机时间越短,反之亦然…

简单题66-加一(Python)20240918

问题描述&#xff1a; python class Solution(object):def plusOne(self, digits):""":type digits: List[int]:rtype: List[int]"""n len(digits)# 从最后一位开始处理进位for i in range(n - 1, -1, -1):if digits[i] < 9:digits[i] 1re…

xmos 编程指南

并行执行 并行执行时使用par {} 进行并行处理 点灯 #include <stdio.h> #include<xs1.h> #include<timer.h> #include<platform.h>port p XS1_PORT_8C;void hw(unsigned n) { printf("Hello world from task number %u\n", n); } int ma…

多线程---线程的状态及常用方法

1. 线程的状态 在Java程序中&#xff0c;一个线程对象通过调用start()方法启动线程&#xff0c;并且在线程获取CPU时&#xff0c;自动执行run()方法。run()方法执行完毕&#xff0c;代表线程的生命周期结束。 在整个线程的生命周期中&#xff0c;线程的状态有以下六种&#xff…

文件翻译英文是什么软件?5款软件评测助你决策

在企业的日常运营中&#xff0c;文件翻译格式的多样性常常成为沟通效率的瓶颈。 从简单的文本文件到复杂的PDF文档&#xff0c;每一种格式都可能因为其特有的结构和布局&#xff0c;给翻译工作带来额外的挑战。 掌握翻译技巧需要时间和实践&#xff0c;以下是一些实用的翻译技…

数据增强又突破了!升级版“双杀”两大顶会,实现无痛涨点

数据收集和标注的艰难想必大家都有所体会&#xff0c;不仅耗时耗力还很贵&#xff0c;一般人顶不住。那怎么解决&#xff1f;你的“强”&#xff08;数据增强&#xff09;来了~ 数据增强作为一种正则化技术&#xff0c;可以帮助我们在有限的数据下&#xff0c;提高模型的性能。…

Vue.js魔法书:前端开发者的终极指南----指令篇续篇

​个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一个为了让更多人看见许舒雅的宝贝的小白先生 &#x1f921;个人主页&#xff1a;&#x1f517; 许舒雅的宝贝 &#x1f43c;座右铭&#xff1a;深夜两点半的夜灯依旧闪烁&#xff0c;凌晨四点的闹钟不止你一个。 &am…

linux 操作系统下的dhclient命令介绍和案例使用

linux 操作系统下的dhclient命令介绍和案例使用 dhclient 是 Linux 系统中用于动态主机配置协议&#xff08;DHCP&#xff09;客户端的命令。它的主要功能是从 DHCP 服务器获取网络配置&#xff0c;包括 IP 地址、子网掩码、默认网关和 DNS 服务器等信息 dhclient 命令概述 …

如何使用ssm实现校园二手交易平台的设计与开发+vue

TOC ssm641校园二手交易平台的设计与开发vue 研究背景与现状 时代的进步使人们的生活实现了部分自动化&#xff0c;由最初的全手动办公已转向手动自动相结合的方式。比如各种办公系统、智能电子电器的出现&#xff0c;都为人们生活的享受提供帮助。采用新型的自动化方式可以…

速通汇编(六)认识栈,SS、SP寄存器,push和pop指令的作用

一&#xff0c;栈 &#xff08;一&#xff09;栈的特点 栈是一种具有特殊访问方式的存储空间&#xff0c;特殊在于&#xff0c;进出这块存储空间的数据&#xff0c;“先进后出&#xff0c;后进先出” 由于栈的这个“先进后出”的特点&#xff0c;我们可以利用其来很好的操作内…

传输层协议 —— TCP协议(上篇)

目录 1.认识TCP 2.TCP协议段格式 3.可靠性保证的机制 确认应答机制 超时重传机制 连接管理机制 三次握手 四次挥手 1.认识TCP 在网络通信模型中&#xff0c;传输层有两个经典的协议&#xff0c;分别是UDP协议和TCP协议。其中TCP协议全称为传输控制协议&#xff08;Tra…

Java毕业设计 基于SpringBoot和Vue自习室管理系统

Java毕业设计 基于SpringBoot和Vue自习室管理系统 这篇博文将介绍一个基于SpringBoot框架和Vue开发的自习室管理系统&#xff0c;适合用于Java毕业设计。 功能介绍 学生 登录 个人中心 修改密码 系统首页 自习室浏览 学生预约记录 管理员  登录 个人中心 修改密码 系统…

零信任安全架构--持续验证

随着网络安全威胁的不断演变&#xff0c;传统的“信任但验证”安全模式已无法应对现代复杂的攻击。零信任安全架构&#xff08;Zero Trust Architecture, ZTA&#xff09;应运而生&#xff0c;作为一种全新的安全理念&#xff0c;它彻底改变了企业的网络安全防护方式。核心思想…

file的判断和获取,创建和删除

常见成员方法 1.length 返回文件的大小(字节数量) 细节1:这个方法只能获取文件的大小&#xff0c;单位是字节如果单位我们要是M&#xff0c;G&#xff0c;可以不断的除以1024 细节2:这个方法无法获取文件夹的大小如果我们要获取一个文件夹的大小&#xff0c;需要把这个文件夹…

项目管理系统的期限提醒功能如何确保项目按时推进?

在竞争激烈的项目申报垂直领域&#xff0c;时间就是效率&#xff0c;效率关乎成败。每一个申报项目的截止日期都是一道不容错过的关卡&#xff0c;错过即意味着失去了宝贵的机会。为了确保项目能够按时推进&#xff0c;避免因时间管理不当而导致的延误&#xff0c;项目管理系统…

SpringCloud系列之一---搭建高可用的Eureka注册中心

前言 本篇文章主要介绍的是SpringCloud相关知识、微服务架构以及搭建服务注册与发现的服务模块(Eureka)以及Eureka集群。 GitHub源码链接位于文章底部。 什么是SpringCloud Spring Cloud 是一系列框架的有序集合。 它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设…