南京,中国
项目2026年5月6日

MYDB

MYDB 是我为了深入理解数据库内核执行链路,从零实现的轻量级关系型数据库。项目覆盖从 SQL 请求进入服务端,到解析、事务管理、索引查找、数据页读写、日志恢复和网络通信的主要路径。 相比业务项目,这个项目更偏底层训练,价值在于把平时使用 MySQL 时经常提到的索引、事务、WAL、MVCC、缓存页等概念真正写成可运行代码。 我独立完成主要模块设计与实现,包括页式存储、DataManager、PageCache、B+ 树聚簇索引、事务管理器、WAL、2PL + MVCC、SQL 解析器和自定义 Socket 协议。
  • 存储层 基于 Java NIO FileChannel 和 ByteBuffer 实现页式磁盘读写,DataManager 统一封装数据页加载、修改和刷盘。
  • 缓存层 PageCache 负责缓存热数据页,减少频繁磁盘 I/O,并管理页的引用和释放。
  • 索引层 实现 B+ 树聚簇索引,支持主键定位和范围查询。
  • 日志层 WAL 在数据页落盘前先写日志,用于崩溃后的 REDO / UNDO 恢复。
  • 事务层 使用 2PL 控制并发写冲突,结合 MVCC 实现可重复读隔离级别。
  • 查询层 自定义 SQL 解析器支持 CREATE、INSERT、SELECT、UPDATE、DELETE 等基础语句。
  • 网络层 使用自定义 Socket 协议完成客户端与服务端通信,支持多客户端并发访问。
  • 从页式存储开始实现数据组织,理解数据库为什么不能直接把对象随意写入磁盘。
  • 通过 PageCache 缓解随机 I/O 压力,并在 DataManager 中集中管理数据页状态。
  • 实现 B+ 树索引后,对比全表扫描和索引查询性能:6 万条数据下,全表扫描约 120ms,索引查询约 1ms。
  • 通过 WAL 保证故障恢复顺序,理解“先写日志,再写数据页”的可靠性边界。
  • 使用 2PL + MVCC 实现可重复读,理解锁、版本链和事务可见性的关系。
Java、NIO、FileChannel、ByteBuffer、B+ Tree、WAL、2PL、MVCC、SQL Parser、Socket 这个项目可以展开聊数据库底层:页式存储和缓存管理怎么做、B+ 树为什么适合磁盘索引、WAL 如何保证崩溃恢复、2PL 和 MVCC 分别解决什么问题,以及为什么索引能把查询从 120ms 优化到约 1ms。

相关项目

金融助手长期记忆服务

面向投顾类 AI Agent 的结构化长期记忆服务,基于 mem0 fork 改造,支持金融记忆写入、召回、过滤、审计与回放。

Ksmart

企业级 RAG 智能知识库平台,覆盖多格式文档解析、异步入库、混合检索、权限控制和 AI 流式问答。