Blog

Ch04-MySQL 之 存储结构

October 31, 2021
MySQL
Mysql

Page # 索引页 组成 说明 File Header 表示页的一些通用信息,占固定的 38 字节。 Page Header 表示数据页专有的一些信息,占固定的 56 个字节。 Infimum + Supremum 两个虚拟的伪记录,分别表示页中的最小和最大记录,占固定的 26 个字节。 User Records 真实存储我们插入的记录的部分,大小不固定。 Free Space 页中尚未使用的部分,大小不确定。 Page Directory 页中的某些记录相对位置,也就是各个槽在页面中的地址偏移量,大小不固定,插入的记录越多,这个部分占用的空间越多。 File Trailer 用于检验页是否完整的部分,占用固定的 8 个字节。 Row # 格式 说明 compact redundant dynamic 与 compact 行格式挺像,但它不会在记录的真实数据处存储字段真实数据的前 768 个字节,而是把所有的字节都存储到其他页面中,只在记录的真实数据处存储其他页面的地址 compressed 会采用压缩算法对页面进行压缩,以节省空间 参考文献 # MySQL 之数据页结构 MySQL 之 InnoDB 表空间 MySQL 之 InnoDB 存储结构总结 附件 #

Ch02-数据库理论 之 RBO

October 10, 2021
Database
Database

Rule-Based Optimization 基于规则的优化器 RBO 规则 说明 谓词重写 LIKE 规则,BETWEEN-AND 规则,IN 转 OR 规则,IN 转 ANY 规则,OR 转 ANY 规则,ALL/ANY 转聚合,NOT 规则,OR 转 UNION 规则 谓词预处理 1 < a => a > 1 , 10 != id => id != 10 谓词下推 t1.id = 1 t1 left join t2 on t1.id = t2.id => t1 left join t2 on t1.id = t2.id and t1.id = 1 列裁剪优化 常量传递 表达式计算 参考文献 # 数据库查询优化器,RBO 优化规则介绍及示例

Ch06-Elasticsearch 之 Update

August 21, 2021
Elasticsearch
Elasticsearch

更新操作也是写操作。Elasticsearch 在创建新文档时,Elasticsearch 将为该文档分配一个版本号。对文档的每次更改都会产生一个新的版本号。当执行更新时,旧版本在.del 文件中被标记为已删除,并且新版本在新的分段中编入索引。旧版本可能仍然与搜索查询匹配,但是从结果中将其过滤掉。

...

Ch07-Elasticsearch 之 Segment Merge

August 21, 2021
Elasticsearch
Elasticsearch

在 Elasticsearch 中,为了让插入的让数据更快的被检索使用。用一句话来概括就是”开新文件”。但是从另一个方面看,开新文件也会给服务器带来负载压力。因为默认每 1 秒,都会有一个新文件产生,每个文件都需要有文件句柄,内存,CPU 使用等各种资源。一天有 86400 秒,设想一下,每次请求要扫描一遍 86400 个文件,这个响应性能绝对好不了。为了解决这个问题,Elasticsearch 引入了 Merge 操作。

...

Ch04-Elasticsearch 之 Search

August 15, 2021
Elasticsearch
Elasticsearch

Elasticsearch 的 Search 操作包含两个阶段,一个是 QueryPhase,另一个是 FetchPhase。QueryPhase 在初始查询阶段,查询会广播到索引中每一个分片副本 (主分片或副分片)。每个分片在本地执行搜索并构建一个匹配文档的优先队列(优先队列是一个存有 topN 匹配文档的有序列表,即 doc id。优先队列大小为分页参数 from + size),注意该队列中并没有取具体的数据。FetchPhase 会根据获取到的 doc id 向对应的节点依次发送 GET 请求,获取结果,然后合并,聚合,排序最终返回结果。

...