基于java的数据库

阅读: 评论:0

基于java的数据库

基于java的数据库

MyDB

       MYDB 是一个 Java 实现的简单的数据库,部分原理参照自 MySQL、PostgreSQL 和 SQLite。实现了以下功能:

  • 数据的可靠性和数据恢复
  • 两段锁协议(2PL)实现可串行化调度
  • MVCC
  • 两种事务隔离级别(读提交和可重复读)
  • 死锁处理
  • 简单的表和字段管理
  • 简陋的 SQL 解析
  • 基于 socket 的 server 和client

       MYDB 分为后端和前端,前后端通过 socket 进行交互。前端(客户端)的职责很单一,读取用户输入,并发送到后端执行,输出返回结果,并等待下一次输入。MYDB 后端则需要解析 SQL,如果是合法的 SQL,就尝试执行并返回结果。不包括解析器,MYDB 的后端划分为五个模块,每个模块都又一定的职责,通过接口向其依赖的模块提供方法。

       TM 通过维护 XID 文件来维护事务的状态,并提供接口供其他模块来查询某个事务的状态。
       DM 直接管理数据库 DB 文件和日志文件。DM 的主要职责有:1) 分页管理 DB 文件,并进行缓存;2) 管理日志文件,保证在发生错误时可以根据日志进行恢复;3) 抽象 DB 文件为 DataItem 供上层模块使用,并提供缓存。
       VM 基于两段锁协议实现了调度序列的可串行化,并实现了 MVCC 以消除读写阻塞。同时实现了两种隔离级别。
       IM 实现了基于 B+ 树的索引,BTW,目前 where 只支持已索引字段。
       TBM 实现了对字段和表的管理。同时,解析 SQL 语句,并根据语句操作表。

Transaction Manager(TM)

  • 定义规则

       每个事物都有对应的xid,它唯一地标识了事物的状态。事务的xid从1开始,不断递增并且不可重复。规定XID=0是一个超级事务,当一些操作想在没有申请事务的情况下进行,可以将操作的XID设置为0,超级事务的状态永远是committed。其他事务的状态包括:
              0 - active,正在进行,尚未结束
              1 - committed,已提交
              2 - aborted,已撤销(回滚)
       TM维护了一个.XID格式的文件,用于保存事务的状态。XID文件为咩哥事务分配了一个字节的空间来保存其状态,另外文件还有长度8个字节的文件头,来表示文件管理的事务个数。所以,事务n在文件中的状态就储存在(n-1)+8个字节处,n-1是因为xid=0事务状态不需要记录。

public interface TransactionManager {long begin();                       // 开启一个新事务void commit(long xid);              // 提交一个事务void abort(long xid);               // 取消一个事务boolean isActive(long xid);         // 查询一个事务的状态是否是正在进行的状态boolean isCommitted(long xid);      // 查询一个事务的状态是否是已提交boolean isAborted(long xid);        // 查询一个事务的状态是否是已取消void close();                       // 关闭TM
}

另外还有两个静态方法:create() 和 open(),分别表示创建一个 xid 文件并创建 TM 和从一个已有的 xid 文件来创建 TM。从零创建 XID 文件时需要写一个空的 XID 文件头,即设置 xidCounter 为 0,否则后续在校验时会不合法。

// XID文件头长度
static final int LEN_XID_HEADER_LENGTH = 8;
// 每个事务的占用长度
private static final int XID_FIELD_SIZE =

本文发布于:2024-02-03 07:15:22,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170691572249471.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据库   java
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23