Skip to content

EasyArchAyuan/kirin_db

Repository files navigation

Kirin_DB

手写实现MySQL的基本功能,涵盖文件系统实现,redo实现,buffer pool实现,undo实现,事务实现,并发控制实现,锁实现,record记录实现,表扫描实现。。。

1.file_manager文件系统模块

2.log_manager日志模块实现

3.buffer_manager缓存模块实现

4.undo回滚日志实现(tx目录下)

CHECKPOINT 、START 、COMMIT 、ROLLBACK 、SETINT 、SETSTRING六种日志的实现

5.事务对象实现

一个事务对象包括三个部分:
BufferList:用于管理当前被pin的buffer对象
RecoverMgr:用于事务恢复或者回滚
CocurrentMgt:用于管理并发请求

6.锁实现

S锁和X锁

7.并发控制实现

8.record记录实现

Layout:1.插槽的大小;2.记录中每个字段的名称,类型,长度以及字段在记录中的偏移量

两种实现策略:

1.固定长度的记录,一个文件所有区块都存储来自同一张表的记录,同时记录采用固定长度.

多增加一个字节用于表示这个插槽是否已经被使用。0表示插槽可用,1表示插槽被占用
寻址:记录长度 * 记录所在编号 + 字段偏移量

2.字段可变长.专门开辟一个溢出区间,一旦有记录变长需要跨区块时,新分配的区块就会从溢出空间获取.

一个溢出区间装不下,就从溢出空间分配多个区块,通过指针链接在一起形成一个队列.
寻址:引入一个id_table一维数组,元素的标号对应记录的插槽号,元素的值对应记录的起始地址
区块开头放id_table,数据从尾插

9.记录的读取:表扫描

把表的记录当做数组来读取,通过挪到一个记录指针来遍历表的记录,它的作用类似于cursor

10.表管理器

About

Go实现数据库存储

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages