Skip to content

Instantly share code, notes, and snippets.

@ideawu
Created December 31, 2020 05:01
Show Gist options
  • Save ideawu/29c2afaa75074347dc3724acc5198720 to your computer and use it in GitHub Desktop.
Save ideawu/29c2afaa75074347dc3724acc5198720 to your computer and use it in GitHub Desktop.
数据库引擎性能优化的本质

读优化

内存延迟是1, 磁盘顺序读延迟是10, 磁盘随机读延迟是100. 本质是将磁盘IO转化为内存操作, 或者将磁盘随机访问转化为磁盘顺序访问.

  • 历史: 基于历史热点统计
  • 预测: 基于排序后局部性原理预测

因为数据多版本的原因, 还需要减少访问次数.

  • 读放大: 最优的场景是每个数据只有1个版本

写优化

磁盘顺序写延迟是10, 磁盘随机写延迟是100.

  • 顺序写: WAL
  • 写放大: 每个数据版本, 最优的场景是只有1次磁盘IO

如果数据的生命周期小于WAL的生成周期, 则写放大倍数是1. 如果针对WAL创建一个日志序号的bitmap, 那么写放大倍数可能小于1, 例如删除一个资源, 可以转化为对bitmap的操作.

实现

先按哈希(随机访问)原则写数据, 需要解决空间空洞问题. 再依赖用户告知, 历史统计(AI)等手段, 调整数据的组织, 预先加载.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment