南京,中国
项目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

相关项目

通用 AI 评测和计量引擎

面向内部 LLM、通用 LLM 与 Agent 的配置驱动评测平台,统一管理数据、模型、Agent、环境、指标与任务。

金融助手长期记忆服务

面向投顾类 AI Agent 的长期记忆服务,支持结构化写入、跨轮召回、状态过滤、审计回放与删除治理。

Ksmart

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