Skip to content

Repository files navigation

bbolt 深度源码解析

一套从源码出发、面向原理的中文知识库,逐模块解析 bbolt 嵌入式数据库的设计与实现。


这是什么?

本项目是对 bbolt(etcd 官方维护的嵌入式 key-value 数据库)的深度中文源码解析

bbolt 是 etcd 的存储引擎,也被 Kubernetes 等大量生产系统使用。它在 1 万行 Go 代码里实现了:

  • 全可序列化 ACID 事务
  • 无锁 MVCC(多读单写)
  • B+ 树 + mmap 的混合存储架构
  • 自带崩溃恢复的两阶段提交

这套知识库的目标不是 API 手册,而是回答那些官方文档不讲、源码里藏得很深的问题:

  • mmap 重映射时,正在进行的读事务怎么办?
  • Inline Bucket 何时升级为独立页?升级过程会不会丢数据?
  • Commit 的六步里,哪一步崩溃会导致数据丢失?
  • DB.Batch() 到底批量了什么?真的能提升写入吞吐吗?

文章目录

# 文章 核心主题 状态
00 项目总览 项目背景、历史血脉(LMDB→Bolt→bbolt)、设计哲学
01 架构设计 DB/Tx/Bucket/Cursor 四大核心类型、锁体系、数据访问路径
02 磁盘文件格式 Page 结构、Meta 页、双 Meta 崩溃恢复、两阶段写入
03 内存映射与页管理 mmap 只读映射、mmaplock 并发模型、allocate 双轨制、pagePool
04 B+树与Cursor Cursor 栈模型、spill/rebalance、dereference 深度解析
05 Bucket 机制 Inline Bucket 升降级、嵌套实现、MoveBucket O(1)、Sequence
06 事务系统 MVCC 原理、Commit 六步流程、Batch 优化、失效场景雷区
07 Freelist 管理 空闲页管理、Array vs HashMap 实现 📝 计划中
08 Cursor 与遍历 Cursor 实现细节、范围查询 📝 计划中
09 并发模型 读写锁、多读单写、事务隔离保证 📝 计划中
10 Compact 与维护 数据库压缩、Surgery 工具 📝 计划中
11 CLI 工具详解 bbolt 命令行全部子命令 📝 计划中
12 API 使用指南 完整 API 参考 + 实战代码示例 📝 计划中
13 对比分析 bbolt vs LMDB vs 原版 Bolt vs BadgerDB 📝 计划中
14 性能特征与调优 性能模型、调优参数、最佳实践 📝 计划中
15 测试与可靠性 测试策略、故障注入、鲁棒性 📝 计划中

写作风格

每篇文章遵循固定结构:

  1. 为什么(设计动机)——先讲问题,再讲方案,让你理解"为什么这么设计"
  2. 是什么(数据结构/算法)——精确的数据结构描述 + ASCII/Mermaid 图示
  3. 怎么做(代码走读)——关键代码片段逐行注释,附源文件行号
  4. 失效场景(雷区)——什么情况下会出错,为什么,怎么避免
  5. 常见问题——面向实际使用的 FAQ

分析的源码版本

  • bbolt 版本v1.4.x(etcd-io/bbolt)
  • Go 版本go1.21+

适合谁读

  • 想深入理解嵌入式数据库实现原理的 Go 工程师
  • 准备面试需要理解 etcd 存储层的工程师
  • 想从 bbolt 源码里学习 B+ 树、mmap、MVCC 实现的学习者

相关资源

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors