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

MYDB运行环境的搭建

前言

再将该项目跑起来之前,我想你的环境应该是准备的差不多啦!只需要稍稍的配置一下即可。

我在本地已经跑通了,说是兼容JDK8,但我本地刚好有11就用了11啦,跑起来的方法在仓库的 readme 里写的很清楚。

在运行mvn compile命令时出现

在bug知识库记录啦!已解决。

注意首先需要在 pom.xml 中调整编译版本,如果导入 IDE,请更改项目的编译版本以适应你的 JDK

首先执行以下命令编译源码

mvn compile

接着执行以下命令以 /tmp/mydb 作为路径创建数据库:其中路径改为我本地的D:\tmp\mydb

完成以上步骤之后,开启终端。

开两个终端启动

先启动 Server

随后通过以下命令以默认参数启动数据库服务:

mvn exec:java -Dexec.mainClass="top.guoziyang.mydb.backend.Launcher" -Dexec.args="-open D:\tmp\mydb"

再启动 client。

这时数据库服务就已经启动在本机的 9999 端口。重新启动一个终端,执行以下命令启动客户端连接数据库:

mvn exec:java -Dexec.mainClass="top.guoziyang.mydb.client.Launcher"

会启动一个交互式命令行,就可以在这里输入类 SQL 语法,回车会发送语句到服务,并输出执行的结果。

初识项目

MYDB 分为前端和后端,前后端通过 socket 进行通信,前端读取用户输入,发送到后端,输出返回结果,并等待下一次输入;后端则负责解析 SQL,如果是合法的 SQL 就执行并返回结果。


 

不包括解析器的话,MYDB 分了五个模块:

  1. transaction manager(TM),通过维护 XID 文件来维护事务状态,并提供接口供其他模块来查询某个事务的状态。
  2. data manager(DM),管理数据库 DB 文件和日志文件。
  3. version manager(VM),基于两段锁协议实现调度序列的可串行化,并实现 mvcc 以消除读写阻塞,并实现两种隔离级别。
  4. index manager(IM),基于 B+ 树的索引。
  5. Table manager(TBM),实现对字段和表的管理,同时解析 SQL 语句并根据语句操作表。

还有雷锋同学总结了 select 语句 insert 语句的执行流程,比如说现在要执行 insert into student values "偶你家" 2012141461290 这条语句。

假设. 执行过程如下:

  1. 1、TBM接受语句, 并进行解析.
  2. 2、TBM将values的值二进制化.
  3. 3、TBM利用VM的insert操作, 将二进制化后的数据, 插入到数据库文件.
  4. 4、VM为该条数据建立版本控制, 并利用DM的insert操作, 将数据插入到数据库.
  5. 5、DM将数据插入到数据库, 并返回其被存储的地址.
  6. 6、VM将得到的地址, 作为该条记录的handler, 返回给TBM.
  7. 7、TBM计算该条语句的key, 并将handler作为data, 并调用IM的insert, 建立索引.
  8. 8、IM利用DM提供的read和insert等操作, 将key和data存入索引中.
  9. 9、TBM返回客户端插入成功的信息.

总结

以上为拿到该项目做的第一件事情,源地址我已经放在下面啦,本着学习的心态输出一些内容,检测监督自己学习。

新的地址:MYDB

http://www.lryc.cn/news/348754.html

相关文章:

  • Flink Stream API实践
  • AI图像生成-原理
  • 【JavaScript】尺寸和位置
  • Express框架下搭建GraphQL API
  • 发布订阅模式
  • 【Java 演示灵活导出数据】
  • 一对一WebRTC视频通话系列(六)——部署到公网
  • 【数据结构】线性表----链表详解
  • 【小程序】小程序如何适配手机屏幕
  • 第15节 编写shellcode加载器
  • JAVA学习-练习试用Java实现爬楼梯
  • [SWPUCTF 2021 新生赛]PseudoProtocols、[SWPUCTF 2022 新生赛]ez_ez_php
  • Hive-拉链表的设计与实现
  • AI应用案例:会议纪要自动生成
  • 基于光纤技术的新能源汽车电池安全监测--FOM²系统
  • 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (二)
  • Spring MVC(三) 参数传递
  • 常见加解密算法02 - RC4算法分析
  • 如何使用 ERNIE 千帆大模型基于 Flask 搭建智能英语能力评测对话网页机器人(详细教程)
  • Java全局异常处理,@ControllerAdvice异常拦截原理解析【简单易懂】
  • 代码随想录35期Day38-Java(Day37休息)
  • 力扣HOT100 - 739. 每日温度
  • 【爬虫之scrapy框架——尚硅谷(学习笔记one)--基本步骤和原理+爬取当当网(基本步骤)】
  • C++ QT设计模式:责任链模式
  • 基于springboot+mybatis+vue的项目实战之(后端+前后端联调)
  • 【教程向】从零开始创建浏览器插件(六)实战篇
  • 如何用 OceanBase做业务开发——【DBA从入门到实践】第六期
  • Element-UI快速入门
  • 【JavaWeb】网上蛋糕商城后台-商品管理
  • Django Admin后台管理:高效开发与实践