当前位置: 首页 > article >正文

【MyDB】6-TabelManager 字段与表管理 之1-TBM实现思路概览

【MyDB】6-TabelManager 字段与表管理 之1-TBM实现思路概览

  • 前言
  • SQL语句解析
    • Parser
    • Tokenizer
  • SQL语句执行
  • 参考

[!tip]

代码均位于:https://github.com/xianghua-2/MYDB/tree/master/src/main/java/top/xianghua/mydb/server/tbm

前言

现在进入了MyDB的表管理部分。可以说表管理是最上层的抽象。

从上往下思考:当客户端命令行输入SQL语句时,服务端需要完成的事情

1.解析SQL语句(Parser,Tokenizer)

2.执行SQL语句(DDL,DML语句)

因此,TBM也将重点围绕这两部分展开。

解析SQL语句需要靠Parser类以及Tokenizer类。

执行则放在Table以及TableManager中。

回想一下mysql数据库,数据库中的表包含字段以及具体的记录。因此对表的管理也主要围绕这几个方面。

1.DDL(Data Definition Language)数据定义语句,主要进行定义/改变表的结构。

MyDB中实现了对表的创建与删除。没有实现对表结构的修改

2.DML(Data Manipulation Language)语句,数据操纵语言。主要对数据进行增加/删除/修改操作。常用语句关键字为INSERT,UPDATE,DELETE。

最后我们需要考虑数据库表的存储

数据库中的表会以链表的形式存储。那么需要插入新表,使用头插式的方法。

SQL语句解析

代码位于parser/Parser.java, parser/Tokenizer.java

Parser依赖于Tokenizer.,实现对SQL语句的解析。

Parser

传入SQL语句的字节数组,之后得到SQL语句的解析结果。

eg:select * from tb_user where id = 1, 该SQL语句就会被解析为select语句,

解析结果包括tablename和where子句

那SQL是如何不断的得到下一个token呢,也就是例子中的select, * ,tb_user这些token呢?这就依赖于Tokenizer方法

Tokenizer

对外提供peek()和pop()方法,Parser调用peek()方法,即可得到当前语句的token,调用pop()则可消费当前的token

SQL语句执行

所有SQL语句执行相关的表管理部分均位于tbm文件夹下

核心思路是,Booter记录数据库表的元数据,也就是首张表的uid

之后TableManagerImpl通过实现TableManager接口,并且调用table类来对表进行增删改查的操作。

在这中间会依赖于Field类(表的字段信息),FieldCalRes类,字段计算结果

代码位于

tbm/BeginRes 存放 开启事务后,返回的结果(xid,byte[] data)

tbm/Booter 存放数据库表的启动信息,因为是链表式存储,因此要存储首张表的uid

tbm/Field 表的字段信息(字段类型,字段名,是否是索引,属于哪张表)。eg:tb_user(long id,string name),那么field就会记录fieldtype: long,fieldname: id,isIndex true

tbm/FieldCalRes 字段计算结果,包括left和right

tbm/Table 表的具体操作,包括创建,删除,插入,开启事务等

tbm/TableManager 表管理接口,初始化TableManager

tbm/TableManagerImpl 表管理接口实现类。上层通过调用该类实现对表的操作。而该实现类则是依赖于Table来管理表

参考

MYDB 9. 字段与表管理 | 信也のブログ (shinya.click)

字段与表管理 | EasyDB (blockcloth.cn)


http://www.kler.cn/a/593737.html

相关文章:

  • 江小南的题目讲解
  • Vala编程语言教程-语言元素
  • 轮足式机器人运动控制系统设计(大纲)
  • 过程监控——lsof
  • DeepSeek(8):结合Kimi-PPT助手一键生成演示报告
  • 【智能体】| 知识库、RAG概念区分以及智能体是什么
  • Steam游戏实时数据获取API集成文档
  • 从两指到三指:Robotiq机器人自适应夹持器技术解析
  • 将COCO格式的物体检测数据集划分训练集、验证集和测试集
  • Word 小黑第34套
  • 在C语言基础上学Java【Java】【一】
  • 自然语言处理(Natural Language Processing,NLP)入门教程
  • leetcode106 从中序与后序遍历序列构造二叉树
  • 模型部署实战:PyTorch生产化指南
  • mac丝滑安装Windows操作系统【丝滑简单免费】
  • 【大模型-知识库之本地安装Embendding模型(BGE-M3)】
  • ROS机器人建模与仿真设计——模型控制理论
  • 【文章写作】以数字素养筑基,绘治理现代化蓝图
  • Linux笔记之Ubuntu22.04安装IBus中文输入法教程
  • 大模型——Ollama-OCR 简明教程