当前位置: 首页 > news >正文

看 MySQL InnoDB 和 BoltDB 如何写磁盘

写磁盘问题

DB 产品,会 WAL 后再写磁盘; WAL 日志又称 redo 日志,用于失败时的恢复操作

似乎挺严谨,但是还是有问题:如果写磁盘的那页还没写完,断电

该页使用 redo 日志文件也无法恢复正确了

看下 MySQL InnoDB 存储引擎、 BoltDB 是如何解决该问题

MySQL InnoDB 存储引擎的两次写

顾名思义,就是写 2 次:
0. 从胀页缓存(内存)到两次写缓存(内存)

  1. 先顺序写到磁盘共享表空间中(连续存储,顺序写,性能很高)
  2. 再离散写磁盘页(真正落地)

写坏情况恢复:

  1. 如果 2 步骤写坏,从 1 的磁盘共享表空间恢复
  2. 如果 1 步骤写坏,从 redo 日志恢复

因为实际磁盘页未被写坏,因此总能 redo 正确

BoltDB 双 meta 页切换

BoltDB 当前 meta 页指向磁盘 B+ 树

写操作:

  1. 写时拷贝 meta 页到副本 meta 页
  2. 查找复制目标叶子页(新),写磁盘
  3. 叶子页(新)到副本 meta 页的root 间的中间节点页,也重新指向并写磁盘
  4. 最后切换 meta 页

BoltDB 的实现构思巧妙,相当于新建 1 棵 B+ 树,原子切换 meta 页

需要写的页数 1 页到 N 页不等(数据少,就在 meta 页)

MySQL InnoDB 和 BoltDB 实现对比

  1. MySQL InnoDB 实现朴实; BoltDB 构思精巧
  2. MySQL InnoDB 写入算法稳定; BoltDB 根据数据量大小,需要写的页数不稳定
  3. 根据产品应用角度, MySQL InnoDB 的写入算法应该更实用

相关文章:

  • Vivado IP核之定点数累加Accumulator使用说明
  • vscode接入DeepSeek 免费送2000 万 Tokens 解决DeepSeek无法充值问题
  • 向量数据库的选择与应用:AI工程实践
  • Android Retrofit 框架注解定义与解析模块深度剖析(一)
  • HarmonyOS NEXT开发实战:DevEco AI辅助编程工具(CodeGenie)的使用
  • requests中post中data=None, json=None两个参数区别
  • Git 的详细介绍及用法
  • JESD204B协议及IP仿真
  • 什么是进程线程
  • ubuntu 和 RV1126 交叉编译Mosqutiio-1.6.9
  • linux批量使用多个用户名登录脚本、为了给主机增加一个指定用户名的登录记录、无需root密码的主机切换到root方式
  • 【玩转全栈】---- Pinia 组件状态管理器
  • 卷积神经网络与计算机视觉:从数学基础到实战应用
  • 沉浸式CSS学习路径
  • 【贪心算法3】
  • git设置本地仓库和远程仓库
  • 解决 word 2016 粘贴图片老是乱飘的问题
  • 十分钟用DeepSeek v3快速搭建企业级本地私有知识库(保姆级教程),AI终于私有化了!
  • Java糊涂包(Hutool)的安装教程并进行网络爬虫
  • 训练大模型LLM选择哪种开发语言最好
  • 网站预算/磁力搜索引擎torrentkitty
  • wordpress延时加载插件/谷歌seo推广服务
  • 陕西省信用建设门户网站/南宁做网站公司
  • 网站上的网站地图怎么做/制作网页的步骤
  • 网站建设永远在路上/百度推广外包哪家不错
  • 卡盟怎么做网站/企业网站设计与推广