数据库是所有业务系统的底座,但多数开发者只会用不会造,对存储引擎、索引、事务的实现原理停留在概念层面。本项目旨在从零实现一个可运行的关系型数据库原型,把 B+ 树索引、页面缓存、事务版本控制、日志恢复这些核心机制真正落地成代码,解决"只会调 API 不懂底层"的问题。适用于对数据库内核感兴趣的后端开发者学习参考。
点击空白处退出提示
数据库是所有业务系统的底座,但多数开发者只会用不会造,对存储引擎、索引、事务的实现原理停留在概念层面。本项目旨在从零实现一个可运行的关系型数据库原型,把 B+ 树索引、页面缓存、事务版本控制、日志恢复这些核心机制真正落地成代码,解决"只会调 API 不懂底层"的问题。适用于对数据库内核感兴趣的后端开发者学习参考。
MyDB 是一个从零实现的轻量级关系型数据库原型,采用经典的分层架构,主要包含五个核心模块:数据管理器 DM,负责页面级别的数据存储与读写;页面缓存 PageCache,在内存中缓存热点页面并按 LRU 策略淘汰,减少磁盘 IO;版本管理器 VM,基于 MVCC 实现多版本并发控制,保证读写互不阻塞;日志模块 Logger,记录事务操作日志,支持崩溃后的数据恢复 Recover;以及通用工具层 Common,封装缓存抽象与数组操作等基础能力。项目配有完整的单元测试与 Mock 实现。
项目由我独立设计与实现。负责整体架构分层、各模块接口定义与核心编码。技术栈为纯 Java 实现,不依赖第三方框架,通过分层解耦保证模块可测试性。实现亮点:一是页面缓存采用 LRU 淘汰策略并配合引用计数,避免脏页被提前淘汰;二是版本管理器基于 MVCC,通过版本链与可见性判断实现事务隔离,读写不互相阻塞;三是日志模块采用 WAL 预写日志,配合恢复流程保证崩溃一致性。难点在于并发场景下页面锁的粒度控制,以及版本链回收时机。



评论