5盛放记录的大盒子 —— InnoDB 数据页结构
InnoD 数据页结构标签: MySQL 是怎样运行的
不同类型的页简介前边我们简单提了一下页的概念,它是InnoDB管理存储空间的基本单位,一个页的大小一般是16KB。InnoDB为了不同的目的而设计了许多种不同类型的页,比如存放表空间头部信息的页,存放Insert Buffer信息的页,存放INODE信息的页,存放undo日志信息的页等等等等。当然了,如果我说的这些名词你一个都没有听过,就当我放了个屁吧~ 不过这没有一毛钱关系,我们今儿个也不准备说这些类型的页,我们聚焦的是那些存放我们表中记录的那种类型的页,官方称这种存放记录的页为索引(INDEX)页,鉴于我们还没有了解过索引是个什么东西,而这些表中的记录就是我们日常口中所称的数据,所以目前还是叫这种存放记录的页为数据页吧。
数据页结构的快速浏览数据页代表的这块16KB大小的存储空间可以被划分为多个部分,不同部分有不同的功能,各个部分如图所示:
从图中可以看出,一个InnoDB数据页的存储空间大致被划分成了7个部分,有的部分占用的字节数是确定的,有的部分占用的字节数是不确定的。下边我们用表格的方式来大致描述一下这7个部分都存储 ...
4从一条记录说起—— InnoDB 记录结构
InnoDB记录存储结构标签: MySQL 是怎样运行的
准备工作到现在为止,MySQL对于我们来说还是一个黑盒,我们只负责使用客户端发送请求并等待服务器返回结果,表中的数据到底存到了哪里?以什么格式存放的?MySQL是以什么方式来访问的这些数据?这些问题我们统统不知道,对于未知领域的探索向来就是社会主义核心价值观中的一部分,作为新一代社会主义接班人,不把它们搞懂怎么支援祖国建设呢?
我们前边唠叨请求处理过程的时候提到过,MySQL服务器上负责对表中数据的读取和写入工作的部分是存储引擎,而服务器又支持不同类型的存储引擎,比如InnoDB、MyISAM、Memory啥的,不同的存储引擎一般是由不同的人为实现不同的特性而开发的,真实数据在不同存储引擎中存放的格式一般是不同的,甚至有的存储引擎比如Memory都不用磁盘来存储数据,也就是说关闭服务器后表中的数据就消失了。由于InnoDB是MySQL默认的存储引擎,也是我们最常用到的存储引擎,我们也没有那么多时间去把各个存储引擎的内部实现都看一遍,所以本集要唠叨的是使用InnoDB作为存储引擎的数据存储结构,了解了一个存储引擎的数据存储结构之 ...
3乱码的前世今生 —— 字符集和比较规则
字符集和比较规则标签: MySQL 是怎样运行的
字符集和比较规则简介字符集简介我们知道在计算机中只能存储二进制数据,那该怎么存储字符串呢?当然是建立字符与二进制数据的映射关系了,建立这个关系最起码要搞清楚两件事儿:
你要把哪些字符映射成二进制数据?
也就是界定清楚字符范围。
怎么映射?
将一个字符映射成一个二进制数据的过程也叫做编码,将一个二进制数据映射到一个字符的过程叫做解码。
人们抽象出一个字符集的概念来描述某个字符范围的编码规则。比方说我们来自定义一个名称为xiaohaizi的字符集,它包含的字符范围和编码规则如下:
包含字符'a'、'b'、'A'、'B'。
编码规则如下:
采用1个字节编码一个字符的形式,字符和字节的映射关系如下:
1234'a' -> 00000001 (十六进制:0x01)'b' -> 00000010 (十六进制:0x02)'A' -> 00000011 (十六进制:0x03)' ...
2MySQL的调控按钮 —— 启动选项和系统变量
启动选项和配置文件标签: MySQL 是怎样运行的
如果你用过手机,你的手机上一定有一个设置的功能,你可以选择设置手机的来电铃声、设置音量大小、设置解锁密码等等。假如没有这些设置功能,我们的生活将置于尴尬的境地,比如在图书馆里无法把手机设置为静音,无法把流量开关关掉以节省流量,在别人得知解锁密码后无法更改密码~ MySQL的服务器程序和客户端程序也有很多设置项,比如对于MySQL服务器程序,我们可以指定诸如允许同时连入的客户端数量、客户端和服务器通信方式、表的默认存储引擎、查询缓存的大小吧啦吧啦的设置项。对于MySQL客户端程序,我们之前已经见识过了,可以指定需要连接的服务器程序所在主机的主机名或IP地址、用户名及密码等信息。
这些设置项一般都有各自的默认值,比方说服务器允许同时连入的客户端的默认数量是151,表的默认存储引擎是InnoDB,我们可以在程序启动的时候去修改这些默认值,对于这种在程序启动时指定的设置项也称之为启动选项(startup options),这些选项控制着程序启动后的行为。在MySQL安装目录下的bin目录中的各种可执行文件,不论是服务器相关的程序(比如mys ...
1装作自己是个小白 —— 重新认识MySQL
初识MySQL标签: MySQL是怎样运行的
MySQL的客户端/服务器架构以我们平时使用的微信为例,它其实是由两部分组成的,一部分是客户端程序,一部分是服务器程序。客户端可能有很多种形式,比如手机APP,电脑软件或者是网页版微信,每个客户端都有一个唯一的用户名,就是你的微信号,另一方面,腾讯公司在他们的机房里运行着一个服务器软件,我们平时操作微信其实都是用客户端来和这个服务器来打交道。比如狗哥用微信给猫爷发了一条消息的过程其实是这样的:
消息被客户端包装了一下,添加了发送者和接受者信息,然后从狗哥的微信客户端传送给微信服务器;
微信服务器从消息里获取到它的发送者和接收者,根据消息的接受者信息把这条消息送达到猫爷的微信客户端,猫爷的微信客户端里就显示出狗哥给他发了一条消息。
MySQL的使用过程跟这个是一样的,它的服务器程序直接和我们存储的数据打交道,然后可以有好多客户端程序连接到这个服务器程序,发送增删改查的请求,然后服务器就响应这些请求,从而操作它维护的数据。和微信一样,MySQL的每个客户端都需要提供用户名密码才能登录,登录之后才能给服务器发请求来操作某些数据。我们日常 ...
0万里长征第一步(非常重要) —— 如何愉快的阅读本小册
购买前警告⚠️
此小册并非数据库入门书籍,需要各位知道增删改查是啥意思,并且能用 SQL 语言写出来,当然并不要求各位知道的太多,你甚至可以不知道连接的语法都可以。不过如果你连SELECT、INSERT这些单词都没听说过那本小册并不适合你。
此小册非正经科学专著,亦非十二五国家级规划教材,也没有大段代码和详细论证,有的全是图,喜欢正经论述的同学请避免购买本小册。
此小册作者乃一无业游民,非专业大佬,没有任何职称,只是单单喜欢把复杂问题讲清楚的那种快感,所以喜欢作者有 Google、Facebook 高级开发工程师,二百年工作经验等 Title 的同学请谨慎购买。
此小册是用于介绍 MySQL 的工作原理以及对我们程序猿的影响,并不是介绍概念设计、逻辑设计、物理设计、范式化之类的数据库设计方面的知识,希望了解上述这些知识的同学来错地方了。
文章标题中的“从根儿上理解MySQL”其实是专门雇了 UC 震惊部小编起的,纯属为了吸引大家眼球。严格意义上说,本书只是介绍MySQL内核的一些核心概念的小白进阶书籍。大家读完本小册也不会一下子晋升业界大佬,当上 CTO,迎娶白富美,走上人生巅 ...
深入浅出领域驱动设计 (DDD):从分层架构到上下文映射
在软件开发中,我们经常面临业务逻辑复杂、代码耦合度高、难以维护的困境。领域驱动设计 (Domain-Driven Design, DDD) 提供了一套完整的思想体系,帮助我们通过将软件实现与核心业务概念紧密绑定,来解决复杂业务系统的设计问题。
本文将从战术设计(分层架构)和战略设计(限界上下文与映射)两个维度,为你梳理 DDD 的核心概念。
一、 战术设计:分层架构 (Layered Architecture)DDD 的分层架构旨在通过 **关注点分离 (Separation of Concerns)**,确保业务逻辑的纯粹性,不被技术实现细节污染。
1. 典型的四层架构在 DDD 中,标准的架构通常分为四层,从上到下依次为:
(1) 用户接口层 (User Interface / Presentation Layer)
职责:系统与外界(人或外部系统)交互的窗口。负责向用户展示信息和解释用户指令。
包含:Controller、DTO、API 接口定义。
核心原则:不包含任何业务逻辑。只负责数据格式转换(如 JSON 转对象)和简单校验。
(2) 应用层 (Applicat ...
Docker容器-基础篇
docker容器-基础篇1、docker容器的安装1.1 初始化安装安装docker容器需要先配置好一台centos虚拟机,并配置好网络连接,以及挂载完iso镜像文件。确保yum可以正常使用
1234先安装必要的包yum -y install gccyum -y install gcc-c++yum install -y yum-utils
配置stable镜像仓库 并从国内下载
123456(阿里)yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo (官网)yum-config-manager --add-repo https://download.docker.com/linux/linux/centos/docker-re.repo配置完后可以使用yum install vim 测试一下yum是否还能正常使用,如不能,请检查当前网络环境,然后重新执行上一句命令。
更新yum软件包索引(可以跳过、缓存yum加快下载速度)
1yum makeca ...
MySQL MVCC & 并发更新实验笔记
MySQL MVCC & 并发更新实验笔记
本文记录了使用 HeidiSQL 和 MySQL InnoDB 引擎进行的 MVCC 实验过程,验证版本链行为、事务隔离可见性以及连接行为。
⚠️ 一、数据库并发问题并发读写会引发以下四类经典问题:
脏读(Dirty Read) 读取到了其他事务尚未提交的数据。
不可重复读(Non-Repeatable Read) 在同一事务中多次读取同一行数据,每次结果不同(其他事务修改了这行并提交)。
幻读(Phantom Read) 同一事务中两次执行相同条件的 SELECT,结果集行数不同(其他事务插入或删除了符合条件的行)。
🔒 二、事务隔离级别(SQL 标准)
隔离级别
脏读
不可重复读
幻读
实现方式
READ UNCOMMITTED
✅ 可能
✅ 可能
✅ 可能
无 MVCC
READ COMMITTED
❌ 防止
✅ 可能
✅ 可能
部分 MVCC
REPEATABLE READ
❌ 防止
❌ 防止
✅ 可能
完整 MVCC
SERIALIZABLE
❌ 防止
❌ 防止
❌ 防止
加锁 ...
CSS 高斯模糊背景图的实现技巧
CSS 高斯模糊背景图的实现技巧:完整实战与原理拆解在现代 Web 页面中,常见一种视觉效果:清晰的前景图 + 虚化的背景图层。这类设计可以让页面更加美观、聚焦重点,并广泛应用于音乐播放器、视频平台、官网头图等界面。
本文将通过一个完整 HTML 示例,逐步剖析如何使用 padding + margin + blur 高效、安全地实现该效果,并详解背后的盒模型原理。
📷 效果预览与结构概览我们最终实现的页面包含以下几种状态的背景展示:
原始背景图(无处理)
只加 padding
加 padding + margin
模糊背景图 + 清晰前景图
✅ 核心原理:三步实现“模糊不偏移”的背景图步骤一:使用 padding 为模糊留出空间padding: 10px;
模糊(blur)会向外扩散一定像素,因此必须预留空间。否则边缘会出现白边或被裁剪。
视觉效果:图片像是“缩进”了,显示更多边缘内容。
步骤二:使用 margin: -10px 拉回视觉偏移margin: -10px;
因为上一步原内容区域被缩小了,所以我们使用负外边距将原区域拉回正确的位置,避免内容视觉错位 ...
