【MySQL】磁盘数据存储原理

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 浅析数据存储原理

MySQL系列文章


磁盘存储数据原理

  1. 数据持久化通常是指存储在硬盘里,硬盘是由很多的盘片组成,为什么叫磁盘就是因为通过盘片表面的磁性物质来存储数据。计算机中所有的数据传输归根结底都是二进制,把盘片放在显微镜下放大,可以看到盘片表面是凹凸不平的,凸起的地方被磁化,代表数字 1,凹的地方没有被磁化,代表数字 0,因此磁盘本质上还是通过硬件磁化突起来存储二进制数据。
  2. 硬盘是都是由盘片、磁头、盘片主轴、控制电机、磁头控制器、数据转换器、接口、缓存等几个部分组成。所有的盘片都固定主轴上。所有的盘片之间是绝对平行的,在每个盘片的盘面上都有一个磁头。数据读取的过程本质上就是磁头在盘片旋转中识别二进制数据的过程
  3. 硬件及操作系统往往将主存和磁盘存储分割为连续的大小相等的块。每个存储块称为一页(在许多操作系统中,页的大小通常为 4k),主存和磁盘以页为单位交换数据,从磁盘读取数据时并不是要多少读多少,而是每次都会预读,即使只需要一个字节,磁盘也会从这个位置开始,顺序向后读取一定长度的数据放入内存


MySQL的存储结构

  1. 表空间table space->段segment->区extends->页page
  2. 页的概念
  1. 页是InnoDB中数据管理的最小单位。当我们查询数据时,其是以页为单位,将磁盘中的数据加载到缓冲池中的。同理,更新数据也是以页为单位,将我们对数据的修改刷回磁盘。
  2. 每个数据页16kb,一个数据页大约16k,也就是说一个数据区可以包含64个连续的数据页。
  3. image.png
  4. page头部保存了两个指针,分别指向前一个Page和后一个Page,头部还有Page的类型信息和用来唯一标识Page的编号。根据这个指针分布可以想象到Page链接起来就是一个双向链表


聚簇索引与非聚簇索引

  1. 聚簇索引
  1. 聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据。这个特性决定了索引组织表中数据也是索引的一部分,每张表只能拥有一个聚簇索引。
  2. 优点:数据访问更快,因为聚簇索引将索引和数据保存在同一个B+树中,因此从聚簇索引中获取数据比非聚簇索引更快,聚簇索引对于主键的排序查找和范围查找速度非常快
  3. 缺点:
  1. 插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键
  2. 更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。
  3. 二级索引(手动添加的索引)访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。
  1. 非聚簇索引
  1. 在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找
  2. 辅助索引叶子节点存储的不再是行的物理位置,而是主键值。
  3. 通过辅助索引首先找到的是主键值,再通过主键值去主键索引树中找到对应的数据行。


页分裂

  1. 首先页分裂的主要目的是为了保证两个连续的数据页内的主键值保证顺序
  2. 两个数据页之间会有指针相连,前一个数据页指后一页,后一个数据页指向前一页。形成双向链表。
  3. 之所以建表建议用自增Id做主键其中之一的原因就是,自增字段会避免页分裂。
  4. 主键字段保证连续递增可以保证每个数据页之间的主键有序性,后面数据页中的数据行的主键值需要大于前一个数据页中数据行的主键值查找数据时可以直接用二分查找快速定位到主键行位置。
  5. 如果自定义主键的话会导致数据页中的主键值大小不能满足有序二分查找的使用的条件,此时就会通过数据移动的方式产生页分裂满足数据页之间的数据有序。


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
SQL 关系型数据库 MySQL
MySQL中主从复制的原理和配置命令
要原因包括提高性能、实现高可用性、数据备份和灾难恢复。了解两大线程( I/O 和 SQL)I/O线程:目的:I/O线程主要负责与MySQL服务器之外的其他MySQL服务器进行通信,以便复制(replication)数据。 功能: 当一个MySQL服务器作为主服务器(master)时,I/O线程会将变更日志(binary log)中的事件传输给从服务器(slave)。从服务器上的I/O线程负责接收主服务器的二进制日志,并将这些事件写入本地的中继日志(relay log)。 配置: 在MySQL配置文件中,你可以通过配置参数如和来启用二进制日志和指定服务器ID。log-bin server
MySQL中主从复制的原理和配置命令
|
11天前
|
存储 SQL 关系型数据库
【MySQL】主从同步原理、分库分表
【MySQL】主从同步原理、分库分表
19 0
|
5天前
|
存储 SQL 关系型数据库
你有这么高效的MySQL版本号排序,记住我给出的原理
在MySQL中,对版本号进行正确排序遇到了问题,表现为不符合常规的版本比较逻辑,如“1.0.12”被错误地排在“1.0.2”之后。这可能是由于接口在处理版本号比较时的算法或逻辑错误。为解决这个问题,提出了四个优化方案。
|
11天前
|
存储 算法 关系型数据库
MySQL连接的原理⭐️4种优化连接的手段性能提升240%🚀
MySQL连接的原理⭐️4种优化连接的手段性能提升240%🚀
|
11天前
|
SQL 存储 关系型数据库
MySQL查询原理,看这一篇就够了!
MySQL查询原理,看这一篇就够了!
|
11天前
|
存储 关系型数据库 MySQL
【MySQL系列笔记】InnoDB引擎-数据存储结构
InnoDB 存储引擎是MySQL的默认存储引擎,是事务安全的MySQL存储引擎。该存储引擎是第一个完整ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和 CPU。因此很有必要学习下InnoDB存储引擎,它的很多架构设计思路都可以应用到我们的应用系统设计中。
210 4
|
11天前
|
存储 关系型数据库 MySQL
MySQL 8 索引原理详细分析
了解索引的详细原则,不仅有助于优化,能把索引搞清楚的,面试中优势也会很突显。 关于数据库优化的话题,V哥觉得还有很多地方可以聊,如果你有兴趣,欢迎关注一起讨论。
MySQL 8 索引原理详细分析
|
11天前
|
关系型数据库 MySQL Linux
【mysql】MySql主从复制,从原理到实践!
【mysql】MySql主从复制,从原理到实践!
35 0
|
9天前
|
关系型数据库 MySQL API
实时计算 Flink版产品使用合集之可以通过mysql-cdc动态监听MySQL数据库的数据变动吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
86 0
|
4天前
|
存储 SQL 关系型数据库
【MySQL】数据库基础 -- 详解
【MySQL】数据库基础 -- 详解