MiniOB 完整导读:不到 10 万行代码,把 B+ 树索引、事务和 SQL 执行链路一次讲透
MiniOB 完整导读不到 10 万行代码把 B 树索引、事务和 SQL 执行链路一次讲透【免费下载链接】miniobMiniOB is a compact database that assists developers in understanding the fundamental workings of a database.项目地址: https://gitcode.com/GitHub_Trending/mi/miniobMiniOB 是 OceanBase 团队做的一个教学用关系型数据库用 C 写成支持建表、插数、查询、B 树索引和 MVCC 事务。它把真实数据库里最核心的模块都做了一遍但刻意砍掉了安全、高可用这些干扰项代码量控制在 10 万行以内。读完本文你会知道怎么把它编译跑起来、一条 SQL 进去之后内部走了哪几步、B 树索引的源码在哪里改最后还有一个一小时内能完成的小练习。 先跑起来一条命令完成构建环境要求写在 docs/docs/how_to_build.md 里cmake 3.13、GCC 11 或 Clang 14 以上、flex 和 bison都是常见版本Linux 和 macOS 都适用。git clone https://gitcode.com/GitHub_Trending/mi/miniob cd miniob bash build.sh init bash build.sh cd build_debug ./bin/observer -f ../etc/observer.ini -P clibuild.sh init只跑一次把第三方依赖装到deps/3rd/usr/local下后面的build.sh默认编译 debug 版。启动参数-P cli表示直接交互模式不用另开客户端这是新手最省事的姿势。进去之后直接敲create table t1 (a int, b int);再select * from t1;看到空结果集说明服务已经正常。想体验客户端模式的话用-p 6789启动 observer另开终端跑./bin/obclient -p 6789具体参数见 docs/docs/how_to_run.md。️ 跟一条 SQL 走到黑执行链路拆成四步你敲下的select * from t1 where a 1;不会一步到位它要在系统里接力传递。以一条带 where 条件的 select 为例链路是这样的收包与调度。网络模块收到请求交给 TaskHandler它会为这条 SQL 建一个事件对象并绑定当前会话。对应代码在 src/observer/net/。解析。Flex Bison 做词法和语法分析把 SQL 文本变成抽象语法树AST。词法规格在 src/observer/sql/parser/ 里的.l和.y文件里想搞清楚语法到底怎么定义的翻这两个文件比看任何博客都快。语义分析。Resolver 遍历 AST检查表和列是否存在、类型是否匹配然后生成内部的 Stmt 对象比如 SelectStmt代码在 src/observer/sql/stmt/。优化与执行。Optimizer 根据规则调整执行计划Executor 按算子树执行——表扫描、条件过滤这些都在 src/observer/sql/operator/ 下一个算子一个文件结构非常清晰。这四个阶段由 SessionStage 用责任链模式串起来入口在 src/observer/session/session_stage.cpp顺着handle_request一路往下跟链路自然就出来了。 拆一个模块B 树索引怎么把键变成磁盘页B 树是 MiniOB 的默认索引结构也是数据库里最经典的磁盘数据结构。它要解决的问题是表数据动辄几百兆凭什么一次查询只读几次磁盘就能定位到一行答案藏在页的设计里。每个结点就是一个固定大小的 page叶结点按顺序存放索引列值 RIDRID 指向数据行在磁盘上的位置并且用prev_brother/next_brother把相邻叶结点串成链表所以等值查询和范围查询都走同一套叶子路径。内部结点不存数据只存键 子结点 page 号查询从根页出发逐层往下每层只读一个 page。插入时叶结点满了就分裂新建右兄弟、键值对对半搬、把新结点最小键上提如果一路向上都满就新建根页让树长高。删除方向则相反结点键值对少于一半时触发兄弟合并或重构。设计文档 docs/docs/design/miniob-bplus-tree.md 里每一步都配了图实现代码在 src/observer/storage/index/主文件是bplus_tree.cpp。另外src/oblsm/下还有一套完整的 LSM-Tree 引擎memtable sstable compaction想换一种索引思路可以从那边走进去。️ 一个小练习一小时内读懂 B 树的插入路径任务是跑通 B 树单元测试再顺着一次插入把源码跟一遍不用写新代码。确认已经用bash build.sh编译过单测目标默认开启CMake 里的WITH_UNIT_TESTS。在build_debug目录下执行ctest -R bplus_tree会运行bplus_tree_test它覆盖插入、删除、页分裂和日志恢复等场景。测试入口在 unittest/observer/bplus_tree_test.cpp看test_insert函数怎么构造 RID 再往树里灌数据。打开 src/observer/storage/index/bplus_tree.cpp找到插入和分裂相关的函数对照设计文档里的分裂图确认新结点最小键上提到父结点这一步在代码里的位置。做完这一轮你对索引在磁盘上长什么样应该就有具体画面了。想继续加难度可以去 docs/docs/db_course_lab/ 看官方实验题lab1 到 lab4 分别是 LSM 存储、查询引擎、事务引擎和性能测试。❓ 踩坑 FAQ问跑build.sh报build.sh: line 2: $\r: command not found典型的 Windows 换行符污染脚本里的 CRLF 被带进来了。先执行git config --global core.autocrlf false再用git checkout -- .把工作区文件重写一遍重新构建即可。问启动 observer 提示找不到动态链接库依赖默认装在/usr/local下而它不一定在你的动态库搜索路径里。把export LD_LIBRARY_PATH/usr/local/lib64:$LD_LIBRARY_PATH加进~/.bashrc然后source ~/.bashrc重启程序。问想打断点看某条 SQL 的执行入口在哪调试方法写在 docs/docs/dev-env/miniob-how-to-debug.md。最快的一条路是gdb -p \pidof observer挂上已启动的服务然后对do_select或Table::scan_record 下断点单步就能看见 select 从上层算子一路落到存储层的过程。MiniOB 的代码结构对读源码非常友好一层目录对应一个模块一个文件基本对应一个算子或一类页结构配合设计文档可以按图索骥。建议的节奏是先让服务跑起来再挑本文这条 SQL 链路跟一遍最后用 B 树单测收口内核的主要骨架就摸清了。资源索引官方文档目录docs/docs/架构总览在 docs/docs/design/miniob-architecture.md服务端源码入口src/observer/main.cppSQL 与存储分别在 src/observer/sql/ 和 src/observer/storage/单元测试unittest/集成测试test/integration_test/【免费下载链接】miniobMiniOB is a compact database that assists developers in understanding the fundamental workings of a database.项目地址: https://gitcode.com/GitHub_Trending/mi/miniob创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

STM32单片机 RCC与GPIO

STM32单片机 RCC与GPIO

一,外设 (Peripherals)外设是指与主处理器(CPU)连接的硬件模块,这些模块提供了扩展功能,使得单片机可以与外部设备进行交互。常见的外设包括:GPIO(通用输入/输出):用于控…

2026/10/19 1:12:12 阅读更多 →
Stable-Audio-Tools 入门指南:条件音频生成模型的训练、推理与 Gradio 界面跑通

Stable-Audio-Tools 入门指南:条件音频生成模型的训练、推理与 Gradio 界面跑通

Stable-Audio-Tools 入门指南:条件音频生成模型的训练、推理与 Gradio 界面跑通 【免费下载链接】stable-audio-tools Generative models for conditional audio generation 项目地址: https://gitcode.com/GitHub_Trending/st/stable-audio-tools Stable-Au…

2026/10/19 1:12:12 阅读更多 →
3步上手Nemotron-3-Diarization:generate与generate_stream说话人分离调用实战教程

3步上手Nemotron-3-Diarization:generate与generate_stream说话人分离调用实战教程

【免费下载链接】Nemotron-3-Diarization 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Nemotron-3-Diarization 点击查看 免费下载 Nemotron-3-Diarization 是一款基于 MLX 框架的说话人分离(Speaker Diarization)模型&…

2026/10/19 1:12:12 阅读更多 →

最新新闻

FuzzFeed: An Automatic Approach to Weakest Precondition Generation using LLMs and Fuzzing

FuzzFeed: An Automatic Approach to Weakest Precondition Generation using LLMs and Fuzzing

文章主要内容和创新点 主要内容 本文提出了一种名为FuzzFeed的自动生成最弱前置条件(Weakest Precondition, WP)的方法,该方法结合大语言模型(LLMs)和模糊测试(fuzzing)技术,通过模糊测试引导(Fuzzing Guidance, FG)机制优化LLM生成的候选WP,最终提高WP的正确性和…

2026/10/19 1:58:27 阅读更多 →
从网易云和 QQ 音乐批量补齐 LRC 歌词:163MusicLyrics 上手教程

从网易云和 QQ 音乐批量补齐 LRC 歌词:163MusicLyrics 上手教程

从网易云和 QQ 音乐批量补齐 LRC 歌词:163MusicLyrics 上手教程 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 刚整理完一大批曲库,播放器里却有…

2026/10/19 1:58:27 阅读更多 →
如何为Eclim编写自定义插件:完整分步教程让Vim支持你的语言

如何为Eclim编写自定义插件:完整分步教程让Vim支持你的语言

【免费下载链接】eclim Expose eclipse features inside of vim. 项目地址: https://gitcode.com/gh_mirrors/ec/eclim 点击查看 免费下载 Eclim 是一款把 Eclipse 强大功能"搬进" Vim 的开源工具,而它的多语言支持完全靠插件实现——每一门语…

2026/10/19 1:58:27 阅读更多 →
Meta SecAlign: A Secure Foundation LLM Against Prompt Injection Attacks

Meta SecAlign: A Secure Foundation LLM Against Prompt Injection Attacks

文章主要内容总结 该论文介绍了Meta SecAlign,这是首个开源、开放权重的大型语言模型(LLM),其内置模型级防御机制,旨在抵御提示注入(Prompt Injection, PI)攻击,同时保持商业级模型的性能。 研究背景:提示注入攻击是LLM集成应用的主要安全威胁,现有模型级防御虽有效…

2026/10/19 1:58:27 阅读更多 →
【Python3基础】05-容器数据类型

【Python3基础】05-容器数据类型

[TOC] 🛫 系列文章导航 【Python3基础】01-Python 环境与开发工具【Python3基础】02-输入输出与程序运行【Python3基础】03-基本数据类型与表达式【Python3基础】04-字符串与格式化【Python3基础】05-容器数据类型【Python3基础】06-条件判断与循环【Python3基础】…

2026/10/19 1:58:27 阅读更多 →
Folia Sync-Server 完整部署指南:10 分钟让 AI 主题多端同步

Folia Sync-Server 完整部署指南:10 分钟让 AI 主题多端同步

Folia Sync-Server 完整部署指南:10 分钟让 AI 主题多端同步 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major Folia 是一款本地优先…

2026/10/19 1:57:24 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →