MuziDB数据库-0.项目描述

news/2024/11/8 23:41:13/

前言

该项目写完也有一段时间了,为了避免以后忘记该项目的一些实现的原理,所以写下这篇博客来记录一下该项目的设计等

项目整体

MuziDB分为前端与后端,前后端交互通过socket进行交互,前端的作用就是读取用户输入并发送到后端进行执行然后输出返回结果,并等待下一次的输入,后端则需要解析SQL,尝试执行并返回结果。MuziDB的后端分为五个模块

Transaction Manager (TM )
Data Manager (DM)
Version Manager (VM)
Index Manager (IM)
Table Manager (TBM)

项目结构

在这里插入图片描述

TM:维护XID文件来维护事务的状态,并提供接口给其它模块来查询某个事务的状态
DM:直接管理数据的DB文件和日志文件
VM:基于两段锁协议实现调度序列的可串行化,并实现了MVCC消除读写阻塞
IM:实现了B+树的索引
TBM:实现了对字段和表的管理,同时解析SQL语句并根据语句操作表

项目涉及四个文件

在这里插入图片描述

根据UID可以定位到是那个页面多少偏移量,因为pgno是int类型,offset是short类型,而我们返回的UID是long类型所以long占八个字节而UID = ((long)pgno << 32) | (long)offset,所以前四个字节是pgno所占用的,最后2个字节是offset占用的,所以只需要再经过简单换算就可以换算出来对应的pgno与offset,所以.db中的每个资源都有着唯一的UID,所以UID的作用可以相当于一个资源定位符

.bt文件
该文件只有8个字节,当创建一张新表的时候就会把新表的UID复制到这个文件保存

.xid文件
这个文件就是管理事务的文件,里面会保存首先8个字节的XIDCounter,然后接下来的每个字节就是保存一个事务的状态
在这里插入图片描述

这个文件对应的功能就是比较简单的TM,只需要保证事务的开启、提交、取消即可
事务对应着三种状态

0 - active
1 - committed
2 - aborted

.log文件

为什么一直不说.db文件呢,因为.db文件中的要素过多留到最后来讲
.log文件就是记录操作过程中产生的日志,为什么要记录日志呢,有了.db文件,.db文件中不是就已经存储了数据了吗?那MySQL数据中为啥又会存在redo、undo log日志呢,而且记录日志有助于后面实现可重复读,假如不记录日志的话,那么可重复读就不能够实现

日志文件格式如下 前四个字节记录所有日志的校验和,后面就是一个一个的[Log]对象即 [xchecksum] [log1] [log2] … [logn] [BadTail] ,badTail有可能会出现,比如当你记录最后一条日志的时候但是你没有记录完但是数据库宕机了那么这就是badTail
每个日志对象即[log]的形式是 [size][checksum][data]
其中size占四个字节,checksum占四个字节,data所占字节就是size所描述的

在这里插入图片描述

.db文件

.db文件是最重要的一个文件了,里面包含表结构数据、表中数据、Node节点数据等,.db文件中保存的都是一个一个的DataItem结构,.db文件是以页来区分,每个页面大小为8k但是你也可以设置更大的容量,每个页面的前2个字节为该页面的偏移量(便宜量就是当前页面要从哪里开始写入新数据),
DataItem中存在三个字段
ValidFlag 1字节的标志位代表是否有效
Size 2字节Data的字段的大小
Data 就是数据

在这里插入图片描述


http://www.ppmy.cn/news/2044.html

相关文章

为什么我推荐你一定要学Python?

很多初学者都听说python很火&#xff0c;可是为啥要学Python&#xff0c;下面谈谈我的感悟 python语言是我目前为止用的最爽的语言&#xff0c;因为它真的很优美.虽然c,c,java也非常的强大和伟大&#xff0c;但是每一种语言伟大的背后都是有一定的时代背景。 说起Python这门编…

OpenCV入门(C++/Python)- 使用OpenCV标注图像(六)

使用OpenCV标注图像用颜色线标注图像绘制圆绘制实心圆绘制矩阵绘制椭圆绘制带轮廓和填充半椭圆使用文本注释图像为图像和视频添加标注的目的不止一个&#xff0c;包含&#xff1a;向视频中添加信息在对象检测的情况下&#xff0c;在对象周围绘制边界框&#xff0c;用不同颜色的…

Django DRF API(GET/POST/PUT)序列化和反序列化(一对多,多对多)demo-模型类序列化器ModelSerializer

一. 前言 在开发REST API接口时&#xff0c;视图中做的最主要有三件事&#xff1a; 将请求的数据&#xff08;如JSON格式&#xff09;转换为模型类对象操作数据库将模型类对象转换为响应的数据&#xff08;如JSON格式&#xff09; 序列化&#xff1a; 将程序中的一个数据结…

嵌入式开发--STM32硬件SPI驱动74HC595

本篇是硬件SPI口驱动74HC595。 IO口模拟时序软件驱动74HC595见这一篇文章&#xff1a;嵌入式开发–IO口扩展–74HC595 硬件连接如下&#xff1a; 只用了一个74HC595&#xff0c;如果需要多个74HC595级联&#xff0c;参考前面的链接&#xff0c;里面有电路&#xff0c;不需要额…

防火墙nat理论讲解

♥️作者&#xff1a;小刘在C站 ♥️每天分享云计算网络运维课堂笔记&#xff0c;疫情之下&#xff0c;你我素未谋面&#xff0c;但你一定要平平安安&#xff0c;一 起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;愿…

Unity 动画系统(Animation,Animator,Timeline)

文章目录1. Animation1.1 创建Animation1.2 Animation 属性2. Animator2.1 Animator 组件2.2 Animation 状态2.3 状态控制参数2.4 代码中控制状态3. 代码控制动画的播放/暂停/继续播放1. Animation 1.1 创建Animation 选中需要添加动画的物体&#xff0c;打开Animation面板 …

ArgoDB 5.1 正式发布:多模融合、实时分析和数据安全多重升级

Transwarp ArgoDB是星环科技自主研发的高性能分布式分析型数据库&#xff0c;在PB级数据量上提供极致的数据分析能力。ArgoDB支持标准SQL语法和分布式事务&#xff0c;提供高并发高速数据写入、复杂查询、多模分析、数据联邦、隐私计算和动态脱敏等能力。基于星环科技ArgoDB数据…

Java高效率复习-MySQL上篇[MySQL]

前言 本文章是用于总结尚硅谷MySQL教学视频的记录文章&#xff0c;主要用于复习&#xff0c;非商用 原视频连接&#xff1a;https://www.bilibili.com/video/BV1iq4y1u7vj/?p21&spm_id_frompageDriver&vd_sourcec4ecde834521bad789baa9ee29af1f6c https://www.bilib…