HuaDB 为清华大学数据库内核课程的实验框架,实验说明可参阅课程文档,课程资料可在课程主页查阅。
本课程于每年春季学期进行,最新版本为 2024-final 版。
如果在实验中遇到任何问题,可以在 Discussions 中讨论。如果发现了实验框架的 bug 可以提交 Issue 或 Pull request。
运行如下命令进行编译:
make lab1-debug
你也可以通过设置 CMAKE_BUILD_PARALLEL_LEVEL 环境变量来并行编译:
CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) make lab1-debug
运行如下命令进入数据库交互界面:
make shell
实验框架主要包含以下几个模块,加粗部分为实验中涉及到的、需要你来补充的模块:
- binder: 语义解析模块
- catalog: 系统表模块
- common: 工具模块,包含字符串处理函数、异常相关类等
- database: 数据库引擎
- executors: 查询执行模块
- log: 日志模块
- operators: 查询计划树节点
- optimizer: 优化器
- planner: 查询计划生成模块
- storage: 存储模块
- table: 表相关类及函数
- transaction: 事务模块
本项目包含了如下第三方库代码:
- argparse:使用 C++17 编写的命令行解析器,可以轻松定义用户友好的命令行参数
- fmt: 提供了类似 Python 的字符串插值功能,可以方便地将变量插入到字符串中
- libfort: 用于在终端输出表格,提供了表格布局和样式设置的功能
- libpg_query: 由 DuckDB 改写的支持 PostgreSQL 语法的解析器,用于查询解析
- linenoise: 用于创建交互式命令行界面,简化了用户输入的处理和历史记录的管理
在 HuaDB 的设计和开发过程中,我们参考了如下优秀的开源数据库项目,对他们的工作表示感谢:
- BusTub: The BusTub Relational Database Management System (Educational)
- DuckDB: An in-process SQL OLAP Database Management System
- PostgreSQL: The World's Most Advanced Open Source Relational Database