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.hqwc.cn/news/701657.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springcloud简单了解及上手

springcloud微服务框架简单上手 文章目录 springcloud微服务框架简单上手一、SpringCloud简单介绍1.1 单体架构1.2 分布式架构1.3 微服务 二、SpringCloud与SpringBoot的版本对应关系2022.x 分支2021.x 分支2.2.x 分支 三、Nacos注册中心3.1 认识和安装Nacos3.2 配置Nacos3.3 n…

银行核心背后的落地工程体系丨混沌测试的场景设计与实战演练

本文作者: 张显华、窦智浩、卢进文 与集中式架构相比,分布式架构的系统复杂性呈指数级增长,混沌工程在信创转型、分布式架构转型、小机下移等过程中有效保障了生产的稳定性。本文分享了 TiDB 分布式数据库在银行核心业务系统落地中进行混沌测…

基于yolov2深度学习网络的单人口罩佩戴检测和人脸定位算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ..............................................................I0 imresize…

Uncaught InternalError: too much recursion

今天在敲代码的时候偶然间发现项目因为一次操作导致浏览器变得非常卡,而且控制台还报错了 Uncaught InternalError: too much recursior 页面截图如下 : 突如起来的报错和页面异常卡顿给我整不会了ovo,点开报错的地方,直接跳转到对…

数据丢失了!如何恢复手机数据?

“下雨天手机丢失了,找回来的时候以前的数据都丢失了,也不知道发生了什么!全都是重要的数据和回忆,丢失后给我带来了不少麻烦,有没有办法能够帮我找回手机里的数据啊?” 随着智能手机的普及,我…

风电功率预测 | 基于RF随机森林的风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测完整代码风电功率预测 基于随机森林(Random Forest, RF)的风电功率预测是一种常用且有效的方法。以下是基于RF的风电功率预测的一般步骤: 数据准备:收集与风电场发电功率相关的数据,包括风速、风向、温度、湿度等气象数据以及风电场的历史功率数…

i春秋-Test

题目 解题 参考WP https://blog.csdn.net/qq_40654505/article/details/107142533/目录扫描 复现wp payload为: search.php?searchtype5&tid&areaeval($_POST[cmd])使用蚁剑连接 http://eci-2ze4iyhwj7xvb68bsb2t.cloudeci1.ichunqiu.com:80/search.ph…

10,hadoop优化与LZO压缩

hadoop多目录与LZO压缩 1.HDFS存储多目录 存储多目录: namenode, datanode namenode: 可以在当前节点中创建几个 namenode的多目录, 就是 虽说可以是多个目录,但是这个namenode多目录中,内容都是一样, 就…

Elasticsearch分词及其自定义

文章目录 分词发生的阶段写入数据阶段执行检索阶段 分词器的组成字符过滤文本切分为分词分词后再过滤 分词器的分类默认分词器其他典型分词器 特定业务场景的自定义分词案例实战问题拆解实现方案 分词发生的阶段 写入数据阶段 分词发生在数据写入阶段,也就是数据索…

PHP 自提时间

前端: 后台设置: 代码: public function getBusinessHour(){// 需求单门店$data (new StoreModel())->limit(1)->select()->toArray();$days explode(,, $data[0][shop_hours]);$businessHours $days[1];// 使用 explode 分割字符串,获取开始和结束时…

Leetcode 第 129 场双周赛题解

Leetcode 第 129 场双周赛题解 Leetcode 第 129 场双周赛题解题目1:3127. 构造相同颜色的正方形思路代码复杂度分析 题目2:3128. 直角三角形思路代码复杂度分析 题目3:3129. 找出所有稳定的二进制数组 I思路代码复杂度分析 题目4:…

LLM应用-prompt提示:让大模型总结生成思维导图

第一步:大模型生成markdown思维导图格式 例如:kimi 总结pdf文档案例: 生成的markdown格式: # 知识图谱的构建及应用 ## 一、知识图谱的构建 ### 1. 数据采集 - 来源:结构化数据库、半结构化网页、非结构化文本 - 预处…