
一起写个数据库
文章平均质量分 89
何人听我楚狂声
A programmer
展开
-
一起写个数据库 —— 6. 记录的版本与事务隔离
本文原载于我的博客:https://ziyang.moe/article/mydb6.html本章涉及代码都在 https://github.com/CN-GuoZiyang/MYDB/tree/master/src/main/java/top/guoziyang/mydb/backend/vm 中。前言从这一章开始,我们开始讨论 Version Manager。VM 基于两段锁协议实现了调度序列的可串行化,并实现了 MVCC 以消除读写阻塞。同时实现了两种隔离级别。类似于 Data Mana原创 2021-12-26 00:47:29 · 2019 阅读 · 2 评论 -
一起写个数据库 —— 10. 服务端客户端的实现及其通信规则
本文原载于我的博客:https://ziyang.moe/article/mydb10.html本章涉及代码都在 https://github.com/CN-GuoZiyang/MYDB/tree/master/src/main/java/top/guoziyang/mydb/backend/server 、 https://github.com/CN-GuoZiyang/MYDB/tree/master/src/main/java/top/guoziyang/mydb/client 与 https://原创 2021-12-26 00:45:39 · 1727 阅读 · 0 评论 -
一起写个数据库 —— 9. 字段与表管理
本文原载于我的博客:https://ziyang.moe/article/mydb9.html本章涉及代码都在 https://github.com/CN-GuoZiyang/MYDB/tree/master/src/main/java/top/guoziyang/mydb/backend/parser 与 https://github.com/CN-GuoZiyang/MYDB/tree/master/src/main/java/top/guoziyang/mydb/backend/tbm 中。前言原创 2021-12-25 18:28:51 · 1540 阅读 · 0 评论 -
一起写个数据库 —— 8. 索引管理器
本文原载于我的博客:https://ziyang.moe/article/mydb8.html本章涉及代码都在 https://github.com/CN-GuoZiyang/MYDB/tree/master/src/main/java/top/guoziyang/mydb/backend/im 中。前言IM,即 Index Manager,索引管理器,为 MYDB 提供了基于 B+ 树的非聚簇索引。目前 MYDB 只支持基于索引查找数据,不支持全表扫描。感兴趣的同学可以自行实现。在依赖关系图中可以原创 2021-12-24 23:21:31 · 1712 阅读 · 0 评论 -
一起写个数据库 —— 7. 死锁检测与 VM 的实现
本文原载于我的博客:https://ziyang.moe/article/mydb7.html本章涉及代码都在 https://github.com/CN-GuoZiyang/MYDB/tree/master/src/main/java/top/guoziyang/mydb/backend/vm 中。前言本节将收尾 VM 层,介绍一下 MVCC 可能导致的版本跳跃问题,以及 MYDB 如何避免 2PL 导致的死锁,并将其整合为 Version Manager。版本跳跃问题说到版本跳跃之前,顺便提一原创 2021-12-23 23:53:23 · 2068 阅读 · 3 评论 -
一起写个数据库 —— 5. 页面索引与 DM 层的实现
本文原载于我的博客:https://ziyang.moe/article/mydb5.html本章涉及代码都在 https://github.com/CN-GuoZiyang/MYDB/tree/master/src/main/java/top/guoziyang/mydb/backend/dm/pageIndex、https://github.com/CN-GuoZiyang/MYDB/tree/master/src/main/java/top/guoziyang/mydb/backend/dm/dat原创 2021-12-11 22:00:17 · 2057 阅读 · 5 评论 -
一起写个数据库 —— 4. 日志文件与恢复策略
本文原载于我的博客:https://ziyang.moe/article/mydb4.html本章涉及代码都在 https://github.com/CN-GuoZiyang/MYDB/tree/master/src/main/java/top/guoziyang/mydb/backend/dm/logger 和 https://github.com/CN-GuoZiyang/MYDB/blob/master/src/main/java/top/guoziyang/mydb/backend/dm/Reco原创 2021-12-11 15:05:22 · 2598 阅读 · 4 评论 -
一起写个数据库 —— 3. 数据页的缓存与管理
本文原载于我的博客:https://ziyang.moe/article/mydb3.html本章涉及代码都在 https://github.com/CN-GuoZiyang/MYDB/tree/master/src/main/java/top/guoziyang/mydb/backend/dm/pageCache 和 https://github.com/CN-GuoZiyang/MYDB/tree/master/src/main/java/top/guoziyang/mydb/backend/dm/p原创 2021-12-05 17:12:04 · 2270 阅读 · 3 评论 -
一起写个数据库 —— 2. 引用计数缓存框架和共享内存数组
本文原载于我的博客:https://ziyang.moe/article/mydb2.html本章涉及代码都在 https://github.com/CN-GuoZiyang/MYDB/tree/master/src/main/java/top/guoziyang/mydb/backend/common 中。前言从这一章中,我们开始讨论 MYDB 中最底层的模块 —— Data Manager:DM 直接管理数据库 DB 文件和日志文件。DM 的主要职责有:1) 分页管理 DB 文件,并进行缓存;原创 2021-12-01 01:07:53 · 3053 阅读 · 4 评论 -
一起写个数据库 —— 1. 从最简单的 TM 开始
本文原载于我的博客:https://ziyang.moe/article/mydb1.html本章涉及代码都在 https://github.com/CN-GuoZiyang/MYDB/tree/master/src/main/java/top/guoziyang/mydb/backend/tm 中。如第 0 章所述:TM 通过维护 XID 文件来维护事务的状态,并提供接口供其他模块来查询某个事务的状态。XID 文件下面主要是规则的定义了。在 MYDB 中,每一个事务都有一个 XID,这个原创 2021-11-28 17:45:40 · 4252 阅读 · 2 评论 -
一起写个数据库 —— 0. 项目结构和一些不得不说的话
本文原载于我的博客:https://ziyang.moe/article/mydb0.html项目地址:https://github.com/CN-GuoZiyang/MYDB前言(一些废话)或许是造轮子上瘾了,也有可能更有可能只是觉得需要补一补数据库的基本原理,大概花了大半个月,利用下班到半夜这段时间,我做完了这个项目。和数据库也算有点渊源的,在学校开设数据库系统这门课的时候,我恰巧在深圳实习。于是乎,上网课成了我实习期间名正言顺的摸鱼理由,除了听课,其他啥都干。同样,操作系统也是在那个时候教授的原创 2021-11-27 17:17:49 · 6606 阅读 · 28 评论