为什么我用原始 C++ 从头构建数据库(以及我为何禁用 STL)

发布: (2026年5月3日 GMT+8 05:02)
3 分钟阅读
原文: Dev.to

Source: Dev.to

我学习方式的问题

很长一段时间,我写的代码能够运行,但我根本不知道它为什么能运行。我使用了抽象、API 和库,这些东西把所有有趣的细节都隐藏了起来。我可以构建功能,但无法解释内存、磁盘或硬件层面到底发生了什么。这让我感到不安。

NanoDB 实际是什么

NanoDB 是我为了解决上述问题而做的尝试。它是一个分阶段构建的自定义存储引擎:

  • Phase 0 — 原始 C++ 基础,没有安全网
  • Phase 1 — 页面管理器,原始磁盘 I/O
  • Phase 2 — 带 LRU 驱逐的缓冲池
  • Phase 3 — 堆文件和元组布局
  • Phase 4 — B+ 树索引
  • Phase 5 — 查询层
  • Phase 6 — 预写日志(WAL)
  • Phase 7 — 使用 2PL 的并发控制
  • Phase 8 — 基准测试与研究文档

我目前正处于 Phase 0。不会假装自己已经走得更远。

为什么要禁用 STL?

因为 STL 解决了我尚未亲身经历的问题。如果在我还不了解动态内存分配之前就使用 std::vector,我就学不到 std::vector 实际上是如何工作的。这个限制迫使我感受到抽象层隐藏的痛苦,而这种痛苦正是学习的过程。

为什么现在写这篇文章,而不是先写代码?

为了自我约束。并且“为什么”与“做什么”同样重要。我会在这里记录每个阶段——我构建了什么,哪里出错了,我学到了什么,以及哪些地方让我困惑。没有光鲜的成功案例,只有真实的艰难过程。

如果你也在探索系统编程或底层 C++,欢迎一起跟进。我们可以一起摸索。

Phase 0 现在开始。 ⚔️

0 浏览
Back to Blog

相关文章

阅读更多 »

Python 入门指南

今天我开始学习 Python,并且探索了一些基本概念,这些概念帮助我了解 Python 在幕后是如何实际工作的。Python 是什么?...