MiniDB项目简介
约 482 字大约 2 分钟
2025-01-15
1.项目介绍
本项目是使用Java实现的一个简易数据库,实现了事务管理、数据管理、MVCC、日志管理、索引管理以及表管理,支持简单的DML语句
为什么想做MiniDB项目?
之前在看一本关于MySQL的书,《MySQL是怎样运行的》, 最吸引我的地方是MVCC多版本并发控制的实现,所以我也想从头实现一次,加深自己对数据库的理解
代码仓库:https://github.com/haipeng-lin/MiniDB
2.整体结构
分为前端和后端,前后端通过socket交互。前端接受用户输入,并将命令传给后端,后端则解析命令并进行数据库操作
五大模块:
- 事务管理器(TM):管理事务文件,并提供接口供其他模块查询事务状态
- 数据管理器(DM):
- 分页管理数据文件,进行缓存
- 管理日志文件,保障数据库崩溃时的数据一致性
- 抽象出更加模块化的数据操作函数和格式,供上层调用
- 版本管理器(VM):基于2PL实现了调度序列的可串行化,并实现MVCC消除读写冲突,实现了读已提交和可重复读隔离级别
- 索引管理器(IM):实现了基于B+树的索引,目前
where
子句仅支持已索引的字段 - 表管理器(TBM):实现对字段和表的管理
3涉及的文件
- .xid:TM来操作,用于管理事务id及对应状态
- .db:DM来操作,用于存储数据库文件
- .log:DM来操作,用户存储日志
- .bt:booter文件,用户与存储数据库中的第一个表的id(目前的项目只支持一个数据库,不支持多数据库)