Skip to content

k0mondor/minisql

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MiniSQL

本项目基于课程 MiniSQL 框架实现,补齐了存储管理、记录管理、Catalog、B+Tree 索引、执行器、恢复与并发控制等核心模块,并保留了单元测试与验收脚本,便于复现和继续开发。

功能概览

  • 支持数据库创建、切换、删除与持久化恢复
  • 支持建表、删表、插入、删除、更新、查询
  • 支持主键和单列 unique 约束校验
  • 支持 B+Tree 索引创建、删除和基于索引的查询
  • 支持 execfile 批量执行 SQL
  • 支持按实验文档顺序执行验收脚本

已实现模块

  • DiskManagerBufferPoolManagerLRUReplacerCLOCKReplacer
  • RowFieldSchemaColumn 的序列化与反序列化
  • TableHeapTablePageTableIterator
  • CatalogManagerTableMetadataIndexMetadata
  • BPlusTreeIndex、索引遍历器与索引扫描
  • SeqScanIndexScanInsertDeleteUpdateValues 执行器
  • RecoveryManagerLockManager

当前状态

  • 全量单元测试通过:45/45
  • 已补充 CLOCKReplacerRecoveryManagerLockManager 的增强测试
  • 已联调通过课程验收脚本中的主要流程

环境要求

  • Linux / macOS,或 Windows + WSL2
  • gcc / g++
  • cmake
  • make
  • python3

说明:

  • 仓库已包含生成后的 parser 源码,通常不需要额外安装 flex / bison
  • 推荐使用 Release 构建以获得更稳定的性能表现

构建

mkdir -p build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j4

主要产物:

  • 主程序:build/bin/main
  • 全量测试:build/test/minisql_test
  • 单项测试:build/test/<test_name>

运行

启动交互式 MiniSQL:

cd build/bin
./main

测试

运行全部单元测试:

cd build/test
./minisql_test --gtest_color=no

运行单个测试示例:

cd build/test
./lock_manager_test --gtest_color=no

使用脚本顺序执行全部测试目标:

python3 scripts/run_all_tests.py --build-dir build

验收脚本

仓库中提供了按实验文档整理好的验收 SQL 和运行器:

  • SQL 脚本:scripts/acceptance_doc_order.sql
  • 运行脚本:scripts/run_minisql_script.py

示例:

python3 scripts/run_minisql_script.py scripts/acceptance_doc_order.sql --binary build/bin/main --max-lines 8

说明:

  • 运行器会生成临时日志和中间数据,这些内容已加入 .gitignore
  • 若要复现实验报告中的 100000 数据测试,需要自行准备对应输入数据文件;大文件与运行产物不随仓库提交

目录结构

src/        核心实现
test/       单元测试
scripts/    测试与验收脚本
thirdparty/ 第三方依赖

版本控制约定

以下内容属于本地构建或运行产物,不纳入版本控制:

  • build/build-wsl/cmake-build-*
  • dbfiles/datas/databases/
  • acceptance_tmp/
  • syntax_tree_*.txt
  • 本地报告、截图和大体积验收数据文件

关键优化

  • TableHeap 增加尾页缓存,避免批量插入时重复扫描尾页
  • delete from table; 增加整表删除快路径
  • 为验收运行器增加步骤标题、结果摘要与时间汇总

About

A lightweight educational relational database built on the MiniSQL framework, featuring storage management, B+Tree indexing, catalog, executors, recovery, and concurrency control.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors