【MySQL】MySQL服务器架构之Storage layer(存储层)


hello大家好😊

前言

前两篇文章里我们了解了MySQL服务器三层架构以及其中的连接层(Connection layer)和SQL层(SQL layer)
文章链接在这里 :
【MySQL】MySQL服务器架构之Connection layer(连接层)
【MySQL】MySQL服务器架构之SQLlayer(SQL层)

这篇文章带大家了解存储层👇

Storage Layer(存储层)

在这里插入图片描述

存储引擎

我们知道,数据可以放在磁盘里,可以放在内存中,也可以被发送到网络上的其他组件。在存储层中,数据通常以表的形式组织。不同的表的存储格式可能不一样。而存储引擎就帮助数据库进行对数据(表)管理。它定义了数据的存储结构、索引方式、事务支持和并发控制。不同的存储引擎可以提供不同的功能和性能特点。创建表时,需要指定那个可用存储引擎管理其数据。一张表一个引擎

MySQL提供多种存储引擎,选择正确的存储引擎对于数据库性能优化至关重要。

下面介绍一些常用的存储引擎:

常见的存储引擎

  • InnoDB:InnoDB 是 MySQL 默认的存储引擎。它支持事务、外键、行级锁定、并发控制和崩溃恢复。InnoDB 使用 B-tree 索引,提供高性能的读写操作,适用于需要高并发和数据完整性的应用
  • MyISAM:用表级锁定,不支持事务和外键,但具有快速读取性能。支持全文搜索索引和表级压缩。适合只读或少写的应用,如数据仓库、日志分析等
  • Memory:支持表级锁定将表数据存储在内存中,提供非常快速的数据访问速度,但数据在数据库重启后会丢失。适用于临时数据存储、高速缓存和临时计算操作
  • Archive:Archive 存储引擎用于归档数据,它使用高度压缩的方式存储数据,适用于只读或少写的历史数据存储。虽然它只支持插入操作,但在存储大量历史数据时,能够有效节省存储空间
  • NDB(NDB Cluster):NDB 存储引擎是 MySQL 的分布式存储引擎,适用于高可用性和实时性要求较高的应用。它支持数据分片、并行处理和自动故障恢复,适用于大规模事务处理和高并发操作
  • BLACKHOLE:它充当空存储引擎,也就是接收数据但不存储它。在某些特定情况下很有用

注意某些功能仅在某些存储引擎中可用。比如:
只有InnoDB和NDB支持外键和事务控制操作
只有InnoDB和MyISAM支持全文索引

每个存储引擎都有其独特的优势和适用场景。选择合适的存储引擎取决于应用的需求,包括性能要求、事务支持、并发控制、数据完整性等。在设计数据库时,选择正确的存储引擎非常重要,可以根据实际需求进行组合和切换

数据目录

在这里插入图片描述

数据目录是数据库管理系统(DBMS)中用于存储数据库文件和相关数据的根目录。在 MySQL 中,数据目录是存储引擎实际存放数据库文件、日志、临时文件和配置文件的根目录。包括表空间文件、日志文件、配置文件、备份文件、临时文件等。每个数据库(包括mysql系统数据库)在数据目录下都有一个目录,也就是数据库目录。

数据目录的位置是可以配置的,在Linux中默认位置是 /var/lib/mysql.

我们现在来一起看下我的虚拟机上的 /var/lib/mysql目录下都有什么:

在这里插入图片描述
我们可以看见几个蓝色的字段,这代表的是目录,也就是数据库目录。比如上面的mysql数据库(系统数据库),这个目录包含了 MySQL 系统表空间和系统数据。其中的数据存储了 MySQL 数据库系统的元数据和权限信息

在这里插入图片描述
ibdata1, ibdata2, …这些是 InnoDB 存储引擎的主表空间文件,它们存储着所有数据库的数据、索引和元数据。这些文件可能包含了多个数据库的信息

在这里插入图片描述
ib_logfile0, ib_logfile1这些是 InnoDB 存储引擎的事务日志文件,用于记录事务的操作。这些文件负责确保数据的持久性和一致性

数据目录中通常还包含了 MySQL 服务器的错误日志文件(error.log)、查询日志文件(query.log)和慢速查询日志文件等等。

InnoDB表空间

表空间是数据库中用于存储数据、索引、临时数据和元数据等的物理空间。它将逻辑数据库对象(如表、索引)映射到实际的磁盘存储区域。通过使用表空间,数据库可以将数据分组存储,提高数据管理的效率和灵活性

在 MySQL 数据库中,特别是 InnoDB 存储引擎,表空间的概念得到了广泛应用。InnoDB 表空间分为主表空间和独立表空间。主表空间(ibdata 文件)存储系统表和共享数据,独立表空间存储每个表的数据和索引。这种分离的方式允许优化、备份和恢复单个表

  • 主表空间:主表空间文件通常命名为 ibdata1。这个文件存储着一些核心系统表、事务日志、数据字典等信息
  • 独立表空间:每个表都有其自己的表空间。每个 InnoDB 表都存储在一个独立的文件中,这个文件通常具有形如 ibd 的扩展名。
  • 表空间文件的组织:InnoDB 表空间文件包含了表的数据、索引、元数据、系统信息和 undo 日志。每个表空间文件都有一个独立的文件头,用于描述表空间的相关信息
  • 表空间的管理和优化:InnoDB 表空间的大小和数量可以通过配置进行调整。可以通过重新组织表来优化表空间,例如执行数据压缩或重建索引操作
  • 备份和恢复:在备份数据库时,除了备份主表空间文件外,还需要备份所有独立表空间文件。在恢复数据库时,可以根据需要还原单个表的独立表空间文件

感谢 💖

好啦,这次的分享就到这里,感谢大家看到这里🤞

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不怕娜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值