基于java实现MYDB数据库
- 整体结构
--MYDB分为后端和前端,前后端通过socket进行交互
前端(客户端)用于读取用户输入,并发送到后端执行,输出返回结果
MYDB后端需要解析SQL
--MYDB的后端分为5个模块
分别是:
1、Transaction Manager事务管理器
2、Data Manager数据管理器
3、Version Manager版本管理器
4、Index Manager指针管理器
5、Table Manager表管理器
依赖关系如图:
实现顺序是:TM->DM->VM->IM->TBM
--每个模块的职责
1、TM通过维护XID文件来维护事务的状态,并提供接口供其他模块来查询某个事务的状态
2、DM直接管理数据库DB文件和日志文件
DM的主要职责:1、分页管理DB文件 并进行缓存 2、管理日志文件 保证在发生错误的时候可以根据日志进行恢复 3、抽象DB文件为DataItem供上层模块使用 并提供缓存
3、VM基于两段锁协议实现了调度序列的可串行化,并实现了MVCC以消除读写阻塞,同时实现了两种隔离级别
4、IM实现了基于B+树的索引
5、TBM实现了对字段和表的管理 同时解析SQL语句 并根据语句操作表
2、TM(TM通过维护XID文件来维护事务的状态 并提供接口供其他模块来查询某个事务的状态)
--XID文件
在MYDB中,每个事务都有一个XID,这个ID唯一标识了这个事务。事务的XID从1开始标号,并自增,不可重复。并且规定XID 0是一个超级事务Super Transaction。当一些操作想在没有申请事务的情况下进行,那么可以将操作的XID设置为0,XID为0的事务的状态永远是committed。
--事务的状态
1、active 正在进行未结束
2、committed 已提交
3、aborted 已撤销(回滚)
--XID文件
XID文件给每个事务分配了一个字节的空间,用来保存其状态;
在XID文件头部,还保存了一个8字节的数字,记录了这个XID文件管理的事务个数;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix