一周浅谈:InnoDB数据页结构
不同类型的页页是 InnoDB 管理存储空间的基本单位,一个页的大小一般是 16KB。InnoDB 为了不同的目的而设计了多种不同类型的页,比如: 存放表空间头部信息的页 存放 Change Buffer 信息的页 存放 INODE 信息的页 存放 undo 日志信息的页 这次我们关心的是那些存放表中记录的那种类型的页,官方称这种存放记录的页为索引(INDEX)页。鉴于我们还没有介绍过索引是什么,而这些表中的记录就是我平时所说的数据,所以我暂时把将这种存放记录的页称为数据页 数据页结构数据页代表这块 16KB 大小的存储空间可以划分为多个部分,不同部分有不同含义,如下啊图所示:>图 5-1 InnoDB 数据页结构示意图表 5-1 InnoDB 数据页结构 名称中文名占用空间简答描述File Header文件头部38 字节页的一些通用信息Page Header页面头部56 字节数据页专有的一些信息Infimum + Supremum页面中的最小记录和最大记录26 字节两个虚拟的记录User Records用户记录不确定用户存储的记录内容Free Space空闲空间不确...
一周浅谈:InnoDB记录存储结构
前言之前的文章,mysql 对于我们来说还只是一个 “黑盒”,我们只负责使用客户端发送请求,并且等待服务器返回结果。但是我们现在需要去搞清楚三个问题: 表中的数据存到哪里(where) 存放格式(what) mysql 以书面方式来访问数据(how) 接下来,我就重点总结一下 mysql 默认的存储引擎 InnoDB,其他存储引擎的设计思路也大差不差,只不过特性不同罢了,设计思路差不多 InnoDB 页简介InnoDB 是一个将表中的数据存储到磁盘上的存储引擎,即使我们关闭并且重启服务器,数据还是存在的。而真正处理数据的过程发生在内存中,所以是要把磁盘中的数据加载到内存中。如果是处理写入或修改请求,就还需要把内存中的内容刷新到磁盘上。 InnoDB 行格式我们平时都是以记录为单位向表中插入数据的,这些记录在磁盘中的存放形式也被称为行格式或者记录格式。InnoDB 的设计者设计了 4 中不同类型的行格式: COMPACT REDUNDANT DYNAMIC COMPRESSED 指定行格式的语法可以在创建或者修改表的语句中指定记录所使用的的行格式: 123CREATE ...
一周浅谈:Mysql - 字符集和比较规则
前言计算机中实际存储的是二进制数据,是没有办法直接存储字符串的,因此为了存储字符是建立在字符与二进制数据的映射关系之上。建立这个关系,我们首先需要解决两个问题: 要把哪些字符映射成二进制数据? 怎么映射?把字符映射成二进制数据叫做编码,将二进制数据映射到字符叫做解码 12345'a' -> 00000001 (十六进制0x01)'b' -> 00000010 (十六进制0x02)'A' -> 00000011 (十六进制0x03)'B' -> 00000100 (十六进制0x04) 现在有了我们自己的字符集,我们就可以用二进制表示一些字符串了,例如: ‘bA’ -> 0000001000000011 (十六进制 0x0203) ‘baB’ -> 000000100000000100000100 (十六进制 0x020104) ‘cd’ -> 无法表示,因为 huyizhou 字符集里不包含 ‘c’ 和 ‘d’ 字符比较规则其实字符的比较,最容易想到的...
一周浅谈:Mysql整体架构设计
前言最近刚开始再看《Mysql 是怎样运行的 – 从根儿上理解 MySQL》,迫于见明的压力,在此开始写一些笔记也好或者对于该书获取的一些知识点提炼出来 架构图> 建立连接 就跟大部分的开源组件的模式一样,client 和 server。client 具体为 api,在不同的应用方进行调用;server 具体实现业务如存储,查询,分词等一些逻辑。当然,client 与 server 之间的连接是有通过我们熟悉的 tcp 连接,还有命名管道和共享内存,UNIX 域套接字 解析与优化 mysql 服务器从客户端那获得了文本形式的请求,接下来数据要从存储中取出来,还需要很多前置的过程,比如:要取什么数据(对于 sql 语句需要做出分析传递给下一层),怎么取是最快,这部分做这件事情 存储引擎 当服务完成了查询优化以后,都还没有真正地去访问真实的表中数据(在查询期间可能会访问表中少量的数据)。因此,mysql 服务器把数据的存储和提取操作都封装到存储引擎模块(表处理器)中。从逻辑上,表示一行一行的记录组成。在物理上,如何表示记录,怎么读取记录,把数据写入具体的物理存储器...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new "My New Post" More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment