首页 > 数据库 >自定义数据库项目工程

自定义数据库项目工程

时间:2023-02-14 14:36:14浏览次数:48  
标签:insert DM 自定义 工程 read 数据库 VM TBM IM

 

 


各模块功能及依赖总结

通过几个例子, 来看一下各个模块之间是怎么相互工作的.

总结来自NYADB作者,针对声哥的源码进行简单修改。https://qw4990.gitbooks.io/nyadb/content/chapter7.html

先总结一下各个模块提供的操作

– DM: insert(x), update(x), read(x)

DM提供了针对数据项(data item)的基本插入, 更新, 读取操作, 且这些操作是原子性的. DM会直接对数据库文件进行读写.

– TM: begin, commit(T), abort(T), isActive(T),isCommitted(T),isAborted(T)

TM提供了针对事务的开始, 提交, 回滚操作, 同时提供了对数据项状态的查询操作.

– VM: insert(X), update(X), read(X), delete(X)

VM提供了针对记录(entry)的增删查改操作, VM在内部为每条记录维护多个版本, 并根据不同的事务, 返回不同的版本.

VM对这些实现, 是建立在DM和TM的各个操作上的,还有一个事务可见性类Visibility。

– TBM: execute(statement)

TBM就是非常高层的模块了, 他能直接执行用户输入的语句(statement), 然后进行执行. TBM对语句的执行是建立在VM和IM提供的各个操作上的.

– IM: value search(key), insert(key, value)

IM提供了对索引的基本操作.

read语句的流程

假设现在要执行read * from student where id = 2012141461290, 并且在id上已经建有索引. 执行过程如下:

1、TBM接受语句, 并进行解析.

2、TBM调用IM的search方法, 查找对应记录所在的地址.

3、TBM调用VM的read方法, 并将地址作为参数, 从VM中尝试读取记录内容.

4、VM通过DM的read操作, 读取该条记录的最新版本.

5、VM检测该版本是否对该事务可见, 其中需要Visibility.isVisible()方法.

6、如果可见, 则返回该版本的数据.

7、如果不可见, 则读取上一个版本, 并重复5, 6, 7.

8、TBM取得记录的二进制内容后, 对其进行解析, 还原出记录内容.

9、TBM将记录的内容返回给客户端.

insert语句的流程

假设现在要执行insert into student values “zhangyuanjia” 2012141461290这条语句. 执行过程如下:

1、TBM接受语句, 并进行解析.

2、TBM将values的值, 二进制化.

3、TBM利用VM的insert操作, 将二进制化后的数据, 插入到数据库.

4、VM为该条数据建立版本控制, 并利用DM的insert操作, 将数据插入到数据库.

5、DM将数据插入 到数据库, 并返回其被存储的地址.

6、VM将得到的地址, 作为该条记录的handler, 返回给TBM.

7、TBM计算该条语 句的key, 并将handler作为data, 并调用IM的insert, 建立索引.

8、IM利用DM提供的read和insert等操作, 将key和data存入 索引中.

9、TBM返回客户端插入成功的信息.

标签:insert,DM,自定义,工程,read,数据库,VM,TBM,IM
From: https://www.cnblogs.com/wk-missQ1/p/17119471.html

相关文章