基于java实现MYDB数据库

  1. 整体结构
    --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文件管理的事务个数;

posted @   proxy09  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示