# SDOLP
**Repository Path**: cxzhang0508/sdolp
## Basic Information
- **Project Name**: SDOLP
- **Description**: 小型数据库项目,SQL编译器、存储系统
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-09-08
- **Last Updated**: 2025-09-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# MiniDB: 一个用 Java 从零打造的关系型数据库内核



欢迎来到 MiniDB!
**MiniDB** 是一个由小组合作开发、用 Java 从零开始构建的、功能丰富的关系型数据库管理系统。本项目旨在通过从零开始构建,深入探索数据库内核的实现原理,涵盖了从SQL解析、查询优化、执行引擎到存储管理、事务控制和崩溃恢复的全过程。
> **Note**
> 这是一个数据库系统课程的小组项目。完整的源代码和项目历史,请访问我们的原始 Gitee 仓库:
> **https://gitee.com/cxzhang0508/sdolp**
## ✨ 核心特性
- **标准 SQL 支持**: 实现了 SQL-92 的一个子集,支持完整的 DDL, DML, DCL 和查询操作。
- **DDL**: `CREATE/DROP/ALTER TABLE`, `CREATE/DROP DATABASE`, `CREATE INDEX`
- **DML**: `INSERT`, `UPDATE`, `DELETE`, `SELECT` (支持 `JOIN`, `WHERE`, `GROUP BY`, `ORDER BY`, `LIMIT`)
- **DCL**: `CREATE USER`, `GRANT`
- **辅助命令**: `SHOW TABLES/DATABASES`, `USE`
- **客户端/服务器架构**:
- **原生TCP服务器** (`ServerHost`): 为项目自带的 `InteractiveShell` 客户端提供服务。
- **MySQL 协议兼容** (`ServerRemote`): 允许使用 Navicat, DBeaver, MySQL Workbench 等标准工具连接。
- **分层式编译器**: 包含一个经典的四阶段查询编译器:
1. **词法分析器 (Lexer)**
2. **语法分析器 (Parser)** -> 抽象语法树 (AST)
3. **语义分析器 (Semantic Analyzer)**
4. **计划生成器 (Planner)** -> 物理执行计划
- **火山模型执行引擎**: 采用标准的火山迭代模型(`TupleIterator`),支持多种执行算子(扫描, 过滤, 投影, 连接, 排序, 聚合等)。
- **ACID 事务支持**:
- **预写日志 (WAL)**: 确保操作的原子性和持久性。
- **ARIES 崩溃恢复**: 保证数据库在意外崩溃后能恢复到一致的状态。
- **页级并发控制**: 通过共享锁(S-Lock)和排他锁(X-Lock)实现并发控制。
- **可插拔存储引擎**:
- **缓冲池管理器 (`BufferPoolManager`)**: 支持 LRU/FIFO 替换策略,高效管理内存与磁盘的数据页交换。
- **B+树索引**: 实现了高性能的 B+树索引结构,支持快速查询。
- **完善的辅助工具**:
- `DataReader`: 交互式工具,用于查看表数据或将数据库**导出为 `.sql` 备份文件**。
- `LogReader`: 用于解析和可读化展示 WAL 日志的调试工具。
## 🚀 如何运行
### 编译项目
本项目使用 Maven 进行管理。首先,在项目根目录下编译所有代码:
```bash
mvn clean install
```
### 1\. 启动数据库服务器
你有两种选择来启动服务器:
* **兼容 MySQL 协议的服务器 (推荐)**:
允许使用 Navicat 等标准工具连接。
```bash
java -cp target/classes org.csu.sdolp.cli.server.ServerRemote
```
服务器将启动并监听 `9999` 端口。
* **原生 TCP 服务器**:
仅供项目自带的 `InteractiveShell` 使用。
```bash
java -cp target/classes org.csu.sdolp.cli.server.ServerHost
```
服务器将启动并监听 `8848` 端口。
### 2\. 连接数据库
* **使用 Navicat / DBeaver**:
新建一个 MySQL 连接,主机填 `localhost`,端口填 `9999`,用户名 `root`,密码 `root_password` (或你在代码中设置的其他用户)。
* **使用项目自带的交互式 Shell**:
```bash
java -cp target/classes org.csu.sdolp.cli.client.InteractiveShell
```
按照提示输入用户名即可开始执行 SQL。
### 3\. 使用辅助工具
* **数据读取与导出工具**:
```bash
java -cp target/classes org.csu.sdolp.cli.tool.DataReader
```
程序会列出所有数据库,并引导你进行查看或导出操作。
* **日志分析工具**:
```bash
java -cp target/classes org.csu.sdolp.cli.tool.LogReader
```
程序会引导你选择要分析的数据库日志。
## 📁 模块化架构详解
为了提升代码的可读性、可维护性和可扩展性,本项目采用了高度模块化的设计。每个模块权责分明,共同构成一个完整的关系型数据库内核。
> 注意:如果在本页面无法直接点击链接,请确保您是在项目的 Gitee/Github 仓库中查看此 README 文件。
**点击下方链接查看每个模块的详细设计文档:**
- [**📄 1. SQL 编译器 (Compiler)**](./docs/Compiler.md)
- [**📄 2. 执行引擎 (Execution Engine)**](./docs/Common&Utilities.md)
- [**📄 3. 存储引擎 (Storage Engine)**](./docs/StorageEngine)
- [**📄 4. 事务与并发控制 (Transaction & Concurrency)**](./docs/Transaction&Concurrency.md)
- [**📄 5. 元数据管理 (Catalog)**](./docs/Catalog.md)
- [**📄 6. 网络服务与客户端 (Networking & Client)**](./docs/Networking&Client.md)
- [**📄 7. 通用模型与工具 (Common & Utilities)**](./docs/Common&Utilities.md)
- [**📄 8. 全面集成测试指南 (Comprehensive Test Guide)**](./docs/Test.md)
## 📁 项目目录结构
经过重构,项目现在拥有一个清晰、职责分离的目录结构:
📁 点击展开完整目录结构
```
src/main/java/org/csu/sdolp/
├── catalog/ # 元数据管理模块 (系统目录)
├── cli/ # 命令行接口 (CLI)
│ ├── client/ # 客户端程序
│ ├── server/ # 服务端程序
│ └── tool/ # 辅助开发工具
├── common/ # 通用模块
│ ├── exception/ # 自定义异常
│ └── model/ #核心数据模型 (Tuple, Schema, Value等)
├── compiler/ # SQL 编译器
│ ├── lexer/ # 词法分析器
│ ├── parser/ # 语法分析器
│ │ └── ast/ # -> 抽象语法树节点 (按DDL/DML/DCL等分类)
│ ├── planner/ # 计划生成器
│ │ └── plan/ # -> 执行计划节点 (按DDL/DML/Query等分类)
│ └── semantic/ # 语义分析器
├── engine/ # 执行引擎核心
├── executor/ # 执行器 (算子)
│ ├── ddl/ # DDL 操作执行器
│ ├── dml/ # DML 操作执行器
│ ├── dcl/ # DCL 操作执行器
│ ├── show/ # SHOW 命令执行器
│ └── expressions/ # WHERE/ON 子句的谓词表达式
├── storage/ # 存储引擎
│ ├── buffer/ # 缓冲池管理器
│ ├── disk/ # 磁盘管理器
│ ├── index/ # B+树索引实现
│ └── page/ # 页面布局管理
└── transaction/ # 事务与恢复
├── log/ # 日志管理器
└── ... # 锁管理器, 恢复管理器等
```