首页 > 数据库 >一文彻底弄懂MySQL的各个存储引擎,InnoDB、MyISAM、Memory、CSV、Archive、Merge、Federated、NDB

一文彻底弄懂MySQL的各个存储引擎,InnoDB、MyISAM、Memory、CSV、Archive、Merge、Federated、NDB

时间:2024-10-25 10:45:32浏览次数:6  
标签:存储 NDB Federated 引擎 InnoDB MyISAM Memory CSV 数据

MySQL 中的存储引擎是其数据库管理系统的核心模块,用于处理不同类型的数据存储和检索操作。每种存储引擎都有自己的特点,适用于不同类型的应用场景。MySQL 最常用的存储引擎包括 InnoDBMyISAMMemoryCSVArchiveMergeFederatedNDB 等。以下是对 MySQL 存储引擎的详细介绍。

1. InnoDB 存储引擎

主要特点:

  • 事务支持:InnoDB 是 MySQL 中默认的存储引擎,支持完整的 ACID 事务(Atomicity, Consistency, Isolation, Durability)特性。它还提供了事务的隔离级别,可以防止脏读、不可重复读、幻读等问题。
  • 行级锁定:InnoDB 使用行级锁定(Row-level Locking),这使得它非常适合高并发的写操作,锁冲突的概率较小。
  • 外键支持:InnoDB 支持外键约束,因此可以在表与表之间定义数据的依赖关系,并自动维护参照完整性。
  • 崩溃恢复:InnoDB 通过使用 重做日志(Redo Logs)撤销日志(Undo Logs) 来保证在系统崩溃时的数据恢复能力。
  • 聚簇索引:InnoDB 使用聚簇索引(Clustered Index),主键索引和数据存储在一起。每个表必须有一个主键,如果没有定义主键,InnoDB 会自动生成一个隐藏的主键。

适用场景:

InnoDB 非常适合处理需要高并发的事务系统,例如:

  • 银行交易系统:涉及到大量的插入、更新操作,并且需要保证事务的完整性和隔离性。
  • 电子商务平台:需要频繁的订单插入和库存更新,并保证数据一致性。

工作机制(底层实现):

  • 数据存储结构:InnoDB 将表存储在一个逻辑的表空间中,默认情况下使用共享表空间 ibdata 文件,也可以每个表单独存储在自己的 .ibd 文件中。
  • 缓冲池(Buffer Pool):InnoDB 通过缓存数据页的方式,减少磁盘 I/O 操作。修改操作首先会被写入缓冲池,随后异步地刷新到磁盘。
  • 双写缓冲(Doublewrite Buffer):为了防止在崩溃或断电时数据部分写入磁盘导致的损坏,InnoDB 将数据页写入两次,确保数据完整。

2. MyISAM 存储引擎

主要特点:

  • 不支持事务:MyISAM 不支持事务和外键,因此不能保证数据的完整性和一致性。
  • 表级锁定:MyISAM 使用表级锁定(Table-level Locking),对于读操作锁定整个表,写操作也是如此。这使得 MyISAM 的并发性能较差,尤其是在频繁写入的场景。
  • 全文索引支持:MyISAM 支持全文索引(Full-text Index),可以用于高效的全文搜索操作。
  • 较小的存储空间:MyISAM 的存储格式紧凑,对于存储静态数据或日志数据有一定的优势。
  • 速度快:由于其不需要事务控制、外键支持等功能,MyISAM 在只读或读多写少的场景下性能非常好。

适用场景:

  • 只读数据库:用于静态数据存储,且更新频率低的场景。例如,数据仓库日志存储系统
  • 全文搜索:需要对文本进行快速全文搜索的场景。

工作机制(底层实现):

  • 数据和索引分离存储:MyISAM 将数据存储在 .MYD 文件中,索引存储在 .MYI 文件中。
  • 表锁机制:对于 MyISAM,读取操作可以并发进行,但一旦有写操作,整个表会被锁定。写入时会阻塞所有其他的读操作。
  • 不支持崩溃恢复:与 InnoDB 不同,MyISAM 不支持崩溃恢复,一旦系统崩溃可能导致数据丢失或不一致。

3. Memory 存储引擎

主要特点:

  • 数据存储在内存中:Memory 存储引擎的数据是临时存储在内存中的,重启数据库或关闭会话后,所有数据都会丢失。
  • 表级锁定:和 MyISAM 一样,Memory 引擎使用表级锁定。
  • 速度快:由于数据完全存储在内存中,Memory 引擎的读写速度非常快。
  • 不支持 BLOB 和 TEXT 类型:由于内存的限制,Memory 引擎不支持大对象类型,如 BLOB 和 TEXT 类型。

适用场景:

  • 临时数据处理:Memory 引擎适合用于临时数据处理、缓存数据等。例如,临时表会话数据存储
  • 快速查询结果存储:需要高效快速查询但不需要持久化的场景。

工作机制(底层实现):

  • 内存存储结构:Memory 引擎将数据存储在内存中,使用哈希索引(Hash Index),以提供更快速的查询性能。
  • 数据丢失风险:由于数据存储在内存中,一旦服务器重启或关闭,所有数据都会消失。

4. CSV 存储引擎

主要特点:

  • 文本存储:CSV 引擎将数据存储为逗号分隔值的文本文件,类似于传统的 CSV 文件。
  • 简单结构:每张表的数据都会被存储在一个 .csv 文件中。
  • 不支持索引:CSV 引擎不支持索引,因此查询性能较差。
  • 便于导入和导出:由于其存储格式是标准的 CSV 文件,便于与外部系统进行数据交换。

适用场景:

  • 数据导入和导出:在需要与其他系统交换数据时,CSV 存储引擎是一个很好的选择。
  • 临时数据存储:对于需要简单格式且不需要索引的数据存储场景,可以使用 CSV。

5. Archive 存储引擎

主要特点:

  • 适合大规模数据存储:Archive 存储引擎专门设计用于高效地存储大量的历史数据或归档数据。
  • 支持插入和查询:Archive 只支持插入操作和查询操作,不支持更新和删除操作。
  • 数据压缩:Archive 引擎会将数据进行压缩存储,从而减少磁盘占用。
  • 表级锁定:Archive 使用表级锁定。

适用场景:

  • 日志系统:Archive 存储引擎非常适合存储日志数据,历史归档数据等,数据存储空间有限的场景。

6. 其他存储引擎

  • Merge:合并多个 MyISAM 表,可以将多个相同结构的 MyISAM 表合并为一个逻辑表,常用于分区数据管理。
  • Federated:用于分布式数据库系统,可以在不同 MySQL 实例之间进行跨服务器查询。
  • NDB Cluster:用于 MySQL Cluster 配置,分布式、容错的存储引擎,常用于高可用系统。

总结

存储引擎 主要特点 适用场景
InnoDB 支持事务、行级锁定、外键支持 高并发事务系统(如银行、电子商务平台)
MyISAM 不支持事务、表级锁定、全文索引支持 静态数据存储、读多写少的系统
Memory 数据存储在内存中,速度快 临时数据处理、缓存、会话管理
CSV 数据存储为文本文件,便于数据交换 数据导入导出场景
Archive 只支持插入和查询,数据压缩 日志数据存储、大规模历史数据归档
Merge 合并多个 MyISAM 表 分区数据管理
Federated 分布式数据库系统,跨服务器查询 需要与其他 MySQL 实例交互的系统

标签:存储,NDB,Federated,引擎,InnoDB,MyISAM,Memory,CSV,数据
From: https://www.cnblogs.com/lgx211/p/18502000

相关文章

  • WinDbg快速分析异常情况Dump文件
     https://syxdevcode.github.io/2017/12/04/WinDbg%E5%BF%AB%E9%80%9F%E5%88%86%E6%9E%90%E5%BC%82%E5%B8%B8%E6%83%85%E5%86%B5Dump%E6%96%87%E4%BB%B6/ WinDbg快速分析异常情况Dump文件生产环境偶尔会出现一些异常问题,WinDbg或GDB就是解决此类问题的利器。调试工具Win......
  • pwndbg
    dbg内容runrun:跑一遍 start:运行到程序认为的入口点停止ccontinue,执行到断点为止ni单步si步入iir:查看寄存器ib:查看断点disassembledisassemble$rip:反汇编rip附近汇编disassemblemain:反汇编mainbb*0x000055555555527a:在0x000055555555527a处下断点disable......
  • ARM Memory(L1/L2/MMU)笔记
    《ARMArchitectureReferenceManualARMv8-A》里面有Memory层级框架图,从中可以看出L1、L2、DRAM、Disk、MMU之间的关系,以及他们在整个存储系统中扮演的角色。涉及到的相关文档有:《ARMArchitectureReferenceManualARMv8-A》:E2TheAArch32ApplicationLevelMemoryModel......
  • pbootcms访问页面出现PHP Fatal error: Allowed memory size of 13421
    问题描述客户在使用PbootCMS时,访问首页出现以下错误:PHPFatalerror:Allowedmemorysizeof134217728bytesexhausted(triedtoallocate262144bytes)inxxx\core\database\Sqlite.phponline173PHPFatalerror:Allowedmemorysizeof134217728bytesexh......
  • BUUCTF之Sandbox-bad
    BUUCTF之Sandbox-bad首先针对sandbox,我们需要有一个大概的认知,他是在一个代码执行环境下,脱离种种过滤和限制,最终成功拿到shell权限的过程,通常我们采用orw的方式来获取flag.orw全称onlyreadwrite,只使用readwrite函数将flag读取并且打印,shellcode分为三个步骤使用open函数......
  • Windbg下使用dump分析内存溢出
    https://www.cnblogs.com/M-MAKI/p/17085360.html 分析简述 创建dump文件;通过 !address-summary 和 !eeheap-gc判断是否为内存泄漏;通过!dumpheap-stat观察出问题的类型;通过!dumpheap-mtMT号-minxxx来索引该类型下占用较高的数据;再通过!gcrootGC根来查看该根被......
  • Java OOM (OutOfMemoryError) 的产生原因及解决方案(内存泄漏、内存溢出、对象生命周期
    在Java开发中,OutOfMemoryError(简称OOM)是常见的内存溢出错误,通常发生在Java虚拟机(JVM)无法分配所需内存时。OOM不仅仅意味着系统内存不足,它还可能由程序中的内存管理问题导致,如内存泄漏或资源未正确释放。本篇博客将全面、深入地分析OOM的产生原因,并给出有效的解决方案。1.O......
  • FreqFed: A Frequency Analysis-Based Approach for Mitigating Poisoning Attacks in
    FreqFed:AFrequencyAnalysis-BasedApproachforMitigatingPoisoningAttacksinFederatedLearning--FreqFed:一种基于频率分析的联邦学习中缓解中毒攻击的方法来源摘要威胁模型设计目标所用方法FreqFed总结思考来源NetworkandDistributedSystemSecurity......
  • JVM系列1:深入分析Java虚拟机堆和栈及OutOfMemory异常产生原因
    JVM系列1:深入分析Java虚拟机堆和栈及OutOfMemory异常产生原因前言JVM系列文章如无特殊说明,一些特性均是基于HotSpot虚拟机和JDK1.8版本讲述。下面这张图我想对于每个学习Java的人来说再熟悉不过了,这就是整个JDK的关系图: 从上图我们可以看到,JavaVirtualMachine位于最底......
  • 停止训练后报错torch.cuda.OutOfMemoryError: CUDA out of memory. 及查看进程和停止
    停止训练后遇到 torch.cuda.OutOfMemoryError 错误,意味着你的GPU内存不足,无法分配更多内存给当前的PyTorch操作。查看进程并关闭相关进程就可恢复。在不同的操作系统中,查看进程的方法有所不同。以下是常见操作系统的命令:在Linux和macOS系统中,你可以使用以下几种方法来......