【MyDB】1-MyDB环境配置及项目结构

0.前言

参考MyDB实现的一个数据库轮子项目。

在这里记录学习实现的过程

项目地址如下

xianghua-2/MYDB: 一个仿MySQL的简易数据库 (github.com)

1. 环境配置及示例运行

由于我最开始一直都是用Idea2023自带的maven来配置,所有电脑上没有安装maven,但是在mydb中需要用电脑自带的maven来编译运行。因此先进行了maven的下载与安装。

我的运行环境为:win11+JDK17+Idea2024.1.4

1.1 Windows Maven配置(可选)

参考博客为:

[(2024.11.25)最新版MAVEN的安装和配置教程(超详细)maven最新版本-CSDN博客](https://blog.csdn.net/mn17275664673zx/article/details/144022555#:~:text=本文介绍了 Maven 的安装与配置流程。 首先阐述因新版本存在兼容性、性能等不稳定因素,建议选择稳定版下载。 接着依次说明解压操作及新建本地仓库文件夹,详细讲解环境变量配置,包括,MAVEN_HOME、M2_HOME 及 path 路径添加。 还介绍了配置阿里云镜像、JDK 的方法,以及如何建立本地仓库。)

在cmd中mvn -v 可用,但是idea的terminal不可用解决办法!_为什么cmd可以查看yarn版本,idea查看不了-CSDN博客

1.1.1 下载安装

官网下载稳定的3.8.8 版本Download Apache Maven – Maven

在这里插入图片描述

下载后解压到本地,在maven的目录下创建一个repository文件夹作为本地仓库
在这里插入图片描述

1.1.2 修改环境变量

修改环境变量。在系统变量下新建两个环境变量

 变量名:MAVEN_HOME
 变量值:D:\develop\apache-maven\apache-maven-3.8.8
 // 此处请修改为你自己的目录地址 
 
  变量名:M2_HOME
 变量值:D:\develop\apache-maven\apache-maven-3.8.8\repository
  // 此处请修改为你自己的目录地址

在这里插入图片描述

之后编辑系统变量中的Path路径,添加以下路径 %MAVEN_HOME%\bin

1.1.3 修改conf/setting.xml文件

1.配置阿里云仓库
在这里插入图片描述

     <!-- 阿里云仓库 -->
    <mirror>
      <id>alimaven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
    </mirror>

2.修改jdk版本

profiles标签中插入以下内容

在这里插入图片描述

    <profile>
          <id>jdk-1.8</id>
          <activation>
            <activeByDefault>true</activeByDefault>
            <jdk>1.8</jdk>
          </activation>
    
          <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
          </properties>
    </profile>

3.修改本地仓库路径配置
在这里插入图片描述

  <localRepository>D:\SoftWare\apache-maven-3.8.8\repository</localRepository>

1.1.4 安装mvn

运行 mvn help:system

在这里插入图片描述

运行成功结果如下
在这里插入图片描述

检验是否安装成功,输入mvn --version,出现如下内容则安装成功

在这里插入图片描述

1.1.5 Idea配置

安装完成后,命令行窗口能识别mvn命令,但是idea中不可以。

修改Idea的settings中的tools下的teminal为cmd,之后重启idea,并用管理员的方式启动idea即可。

在这里插入图片描述

1.2 windows 下 编译运行

1.2.1 编译代码

在idea中打开命令行,执行以下命令编译代码

mvn compile

1.2.2 新建数据库

接着执行以下命令以 temp\mydb为路径创建数据库

D盘目录下新建一个temp\mydb文件夹

原先的命令为

mvn exec:java -Dexec.mainClass="top.xianghua.mydb.server.Launcher" -Dexec.args="-create /tmp/mydb"

但是我这样会报错,修改以上命令如下后,成功创建

mvn exec:java -D"exec.mainClass"="top.xianghua.mydb.server.Launcher" -D"exec.args"="-create D:\temp\mydb"

1.2.3 启动数据库

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

# 这是github上的命令,会报错
mvn exec:java -Dexec.mainClass="top.xianghua.mydb.server.Launcher" -Dexec.args="-open D:\temp\mydb"

其实是运行下面命令

mvn exec:java -D"exec.mainClass"="top.xianghua.mydb.server.Launcher" -D"exec.args"="-open E:\temp\mydb"

我猜原作者是在linux服务器上运行的。所以命令之间会有区别。我是在windows服务器下复现的。

1.2.4 连接数据库

mvn exec:java -D"exec.mainClass"="top.xianghua.mydb.client.Launcher"

连接成功后执行以下命令

create table test_table id int32, value int32 (index id)

insert into test_table values 10 33

select * from test_table where id = 10

begin

insert into test_table values 20 34

commit

select * from test_table where id>10

begin
delete from test_table where id=10
abort

select * from test_table where id>10

quit

2 项目结构

MYDB 分为后端和前端,前后端通过 socket 进行交互。前端(客户端)的职责很单一,读取用户输入,并发送到后端执行,输出返回结果,并等待下一次输入。MYDB 后端则需要解析 SQL,如果是合法的 SQL,就尝试执行并返回结果。不包括解析器,MYDB 的后端划分为五个模块,每个模块都又一定的职责,通过接口向其依赖的模块提供方法。五个模块如下:

  1. Transaction Manager(TM)
  2. Data Manager(DM)
  3. Version Manager(VM)
  4. Index Manager(IM)
  5. Table Manager(TBM)

五个模块的依赖关系如下:

MYDB 模块依赖

从这个依赖图中,拓扑排序一下就能看出实现顺序。本教程的实现顺序是 TM -> DM -> VM -> IM -> TBM

每个模块的职责如下:

  1. TM 通过维护 XID 文件来维护事务的状态,并提供接口供其他模块来查询某个事务的状态。
  2. DM 直接管理数据库 DB 文件和日志文件。DM 的主要职责有:1) 分页管理 DB 文件,并进行缓存;2) 管理日志文件,保证在发生错误时可以根据日志进行恢复;3) 抽象 DB 文件为 DataItem 供上层模块使用,并提供缓存。
  3. VM 基于两段锁协议实现了调度序列的可串行化,并实现了 MVCC 以消除读写阻塞。同时实现了两种隔离级别。
  4. IM 实现了基于 B+ 树的索引,BTW,目前 where 只支持已索引字段。
  5. TBM 实现了对字段和表的管理。同时,解析 SQL 语句,并根据语句操作表。

参考博客

0. 项目结构和一些不得不说的话 | 信也のブログ (shinya.click)

手写简化版数据库–MYDB-CSDN博客

### Spring Boot项目的`application.yml`配置示例 在Spring Boot项目中,`application.yml`用于外部化配置,使得应用程序可以在不同环境中轻松调整行为而无需重新编译代码。下面是一个典型的`application.yml`文件结构和最佳实践: #### 基本应用属性配置 ```yaml server: port: 8081 # 设置服务器端口 spring: application: name: my-application-name # 应用程序名称 ``` 此部分展示了如何更改服务启动监听的端口号以及指定应用程序的名字[^1]。 #### 数据库连接配置 对于数据库连接池和其他数据源参数,可以通过如下方式来设定: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC username: root password: secret driver-class-name: com.mysql.cj.jdbc.Driver ``` 这里指定了JDBC URL、用户名、密码及驱动器类名等必要信息以便建立到MySQL数据库的链接[^2]。 #### 日志级别控制 日志记录是调试和监控的重要工具之一,在YAML文件里也可以方便地管理各个包的日志输出等级: ```yaml logging: level: root: WARN org.springframework.web: DEBUG com.example.myapplication: INFO ``` 上述片段设置了全局最低日志级别为警告(`WARN`),并对特定组件启用了更详细的诊断消息。 #### 使用环境变量覆盖默认值 为了提高灵活性并增强安全性,推荐利用操作系统的环境变量或命令行参数重写敏感信息或其他可能变化的数据项: ```yaml ${DB_URL:jdbc:h2:mem:testdb} # 如果未提供,则采用内嵌H2内存型数据库URL作为后备方案 ``` 这种做法不仅简化了部署流程而且有助于保护机密资料免受意外泄露的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值