# MYDB **Repository Path**: limoni/mydb ## Basic Information - **Project Name**: MYDB - **Description**: 参考 GitHub 实现的简单数据库,根据项目的基本框架,改造成 Java 版的数据库 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 1 - **Created**: 2023-03-11 - **Last Updated**: 2025-02-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MYDB #### 前言 参考 GitHub 上开源项目,实现的简单数据库,根据项目的基本框架,实现的 Java 版数据库。 熟悉数据库的基本原理,锻炼自己的思考能力,编程能力。 #### 实现功能 - 数据的可靠性和数据恢复 - 引用计数缓存 - 两段锁协议(2PL)实现可串行化调度 - MVCC - 两种事务隔离级别(读提交和可重复读) - 死锁处理 - 简单的表和字段管理 - 简单的 SQL 解析 - 索引管理 #### 项目结构 前端 + 后端 前端:读取用户输入,发送到后端执行,输出返回结果,等待下一次输入 后端:解析 SQL,如果是合法的 SQL,尝试执行并返回结果 后端划分为五个模块,每个模块通过接口向其依赖的模块提供方法 五个模块: ``` 1. Transaction Manager (TM) ==> 事务管理模块 2. Data Manager (DM) ==> 数据管理模块 3. Version Manager (VM) ==> 版本管理模块 4. Index Manager (IM) ==> 索引管理模块 5. Table Manager (TBM) ==> 表管理模块 ``` ![输入图片说明](https://foruda.gitee.com/images/1678601138368698392/bdba9daa_9303279.png "module.png") #### 开发环境 Window 10 + idea 2021 + JDK 8 #### 运行方式 1. 执行以下命令编译源码: ``` mvn compile ``` 2. 执行以下命令以 \tmp\mydb 作为路径创建数据库: ``` mvn exec:java -Dexec.mainClass="com.flsldl.mydb.backend.Launcher" -Dexec.args="-create C:\Users\DL\Desktop\tmp\mydb" ``` 3. 执行以下命令以启动数据库服务: ``` mvn exec:java -Dexec.mainClass="com.flsldl.mydb.backend.Launcher" -Dexec.args="-open C:\Users\DL\Desktop\tmp\mydb" ``` 4. 此时数据库服务已经启动在本机的 9999 端口。重新启动一个终端,执行以下命令启动客户端连接数据库: ``` mvn exec:java -Dexec.mainClass="com.flsldl.mydb.client.Launcher" ``` 会启动一个交互式命令行,就可以在这里输入类 SQL 语法,回车会发送语句到服务,并输出执行的结果。 ------ 或使用 idea 启动: CreateDB: ![输入图片说明](https://foruda.gitee.com/images/1678601257612178658/4a316740_9303279.png "CreateDB.png") OpenDB: ![输入图片说明](https://foruda.gitee.com/images/1678601308395749738/21d650fe_9303279.png "OpenDB.png") Client: ![输入图片说明](https://foruda.gitee.com/images/1678601346562991440/12a35718_9303279.png "Client.png") ------ 示例: ![输入图片说明](https://foruda.gitee.com/images/1678601365407590042/fd4972ad_9303279.png "Example.png")