Day4 MySQL 框架学习

摘要

本文主关于 MySQL 框架的问题。主要涉及 InnoDB 引擎。

MySQL 目录结构

研究 MySQL 的目录,主要目的在于研究配置文件、数据目录、日志文件等。在 Linux 操作系统下,MySQL 目录结构如下:

配置文件:

/etc/my.cnf

这里包含所有 MySQL 的配置参数。如果要修改 MySQL 配置参数,则需要重启 MySQL

数据目录:

/var/lib/mysql

这里包含 MySQL 的表文件。每一个 DB 对应一个文件夹。

MySQL 逻辑框架

MySQL 逻辑框架指的是 MySQL 服务的逻辑。

包括:

Connectors

Connector 用来连接 MySQL

MySQL Server

MySQL Server 包括:Connection Pool 以及处理 SQL 语句的部分

Engine

MySQL Engine 用来管理数据。常用的 Engine 为 InnoDB

Disk

MySQL Disk 用来存储数据并接受 Engine 的管理。

InnoDB 引擎结构

InnoDB 用来管理数据。这里分为磁盘结构和内存结构。磁盘结构用来保存该表的相关信息,内存结构用来保存某个数据页的相关信息。

磁盘结构

系统表空间

ibdata1

1.数据字典

2.双写缓冲区

3.修改缓冲区,早期叫做插入缓冲区

对数据进行增删改操作时,辅助索引需要对应的进行更新操作。为了提高修改效率,辅助索引的变化先写入修改缓冲区暂存,然后更新到磁盘。

4.回滚段:保存 undo log,默认情况下回滚日志保存在系统表空间

用户表空间

保存 用户数据 的磁盘文件。

默认情况下,每个表都对应一个 用户表空间 就是 ibd 文件。

用户表空间的创建由 innodeb_file_per_table 控制。

默认时,该值是 true;如果设为 false,则所有用户表空间中的数据会被转存到 系统表空间 中去。

重做日志

保证数据不丢失的重要文件。

数据先写到 redo log 中,然后再转到磁盘中。

redo log 是顺序写,速度比直接写入磁盘快(写入磁盘是随机写)

在磁盘中,重做日志由两个文件保存:ib_logfile0 与 ib_logfile1。每个文件的大小都是 50M ,写入方式为循环写入。

内存结构

内存中保存数据页。MySQL Server 可对内存中的数据页进行增删改查。但最后会通过 checkpoint 写入到磁盘中。

Buffer Pool

mysql 读取数据的单位:页 (16K)

mysql 查询时,是以 页 为单位从磁盘中读取数据的。将一页数据读取到内存中,这样当需要该页中的其它数据时,不需要再次从磁盘中读取数据。

1.数据页

2.索引页

3.自适应hash索引(由 innodb 控制的索引)

4.修改缓存(Change buffer)用来保存需要修改的辅助索引。

log buffer(redo log 缓冲区)

redo log 记录了对数据操作的所有动作(增删改操作)。

日志信息放到内存中暂存,定时写入到磁盘的 redo log 中。

结论

本文主要介绍 InnoDB 引擎的主要构造。其中最重要的是 redo log。redo log 是保证数据不丢失的重要依据。

接下来的任务:

  1. 脏页落盘机制

  2. InnoDB 引擎

售票系统中 分段售票 问题

这里的设计思路:建立一个存储 座位 的表。每列为乘车区间。当某人买了 A-D 的车票时,该座位中所有以B C 为起点,以 A,B,C 为终点的区间都被设为 “已出售”。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值