本项目是andy本人于2025.11开始开发,2026.2基本完成的的一个关系型数据库内核,最初目的是提高C++代码能力和工程能力。从本章博客开始讲解如何从0开始开发一个数据库内核。期望在后续的开发过程中能把他转型成满足特定需求场景的工业级数据库。
项目采用分层架构:
自底向上:
- 存储层:磁盘存储和内存缓冲管理
2.索引层:B+树索引结构实现
3.执行层:基于火山模型的查询执行引擎
4.并发层:事务管理与并发控制(锁管理器)
5.日志层:Write-Ahead Logging 与恢复机制
6.网络层:客户端服务接口
项目结构:
AltasDB/
│
├── README.txt // 项目说明文档
├── 开发计划.md // 接下来一个月详细开发计划
│
├── include/ // 头文件目录(33个文件)
│ ├── buffer/ // 缓冲池管理
│ │ ├── BufferPoolManager.h // 缓冲池管理器(已实现基础功能)
│ │ ├── Clock.h // Clock 替换策略(已实现)
│ │ ├── Page.h // 页面抽象(已实现)
│ │ ├── QueryPlan.h // 查询计划基类
│ │ └── QueryPlanCache.h // 查询计划缓存(框架完成)
│ │
│ ├── storage/ // 存储管理
│ │ ├── DiskManager.h // 磁盘管理器(已实现基础功能)
│ │ ├── table_heap.h // 表堆存储(已实现基础功能)
│ │ └── CatalogManager.h // 目录管理器(框架完成)
│ │
│ ├── index/ // 索引系统
│ │ ├── BPlusTree.h // B+ 树索引(已实现基础功能)
│ │ └── index_iterator.h // 索引迭代器(已实现)
│ │
│ ├── executor/ // 查询执行器(7个文件)
│ │ ├── executor.h // 执行器基类(已实现)
│ │ ├── SeqScanExecutor.h // 顺序扫描执行器(已实现基础功能)
│ │ ├── IndexScanExecutor.h // 索引扫描执行器(已实现基础功能)
│ │ ├── InsertExecutor.h // 插入执行器(已实现基础功能)
│ │ ├── JoinExecutor.h // 连接执行器(框架完成)
│ │ ├── AggregationExecutor.h // 聚合执行器(框架完成)
│ │ └── SortExecutor.h // 排序执行器(框架完成)
│ │
│ ├── concurrency/ // 并发控制(5个文件)
│ │ ├── DeadLockDector.h // 死锁检测器(已实现)
│ │ ├── LockManager.h // 锁管理器(框架完成)
│ │ ├── ServerManager.h // 服务管理器(网络层框架)
│ │ ├── Transaction.h // 事务抽象(已实现)
│ │ └── TransactionManager.h // 事务管理器(已实现)
│ │
│ ├── log/ // 日志系统(5个文件)
│ │ ├── LockTable.h // 锁表(框架完成)
│ │ ├── LogBuffer.h // 日志缓冲区(框架完成)
│ │ ├── LogRecord.h // 日志记录(已定义)
│ │ ├── WALManager.h // WAL 管理器(框架完成)
│ │ └── CheckpointManager.h // 检查点管理器(框架完成)
│ │
│ ├── optimizer/ // 查询优化
│ │ └── QueryOptimizer.h // 查询优化器(框架完成)
│ │
│ ├── parser/ // 解析器
│ │ └── SQLParser.h // SQL 解析器(框架完成)
│ │
│ └── benchmark/ // 性能测试
│ └── BenchmarkRunner.h // 基准测试运行器(框架完成)
│ │
│ └── common/
│ ├── config.h // 配置常量
│ ├── rid.h // 记录标识符
│ └── types.h // 类型定义
│
├── src/ // 源文件目录(28个文件)
│ ├── buffer/ // 缓冲池实现(4个文件)
│ │ ├── BufferPoolManager.cpp // 缓冲池管理器实现
│ │ ├── Clock.cpp // Clock 算法实现
│ │ ├── Page.cpp // 页面管理实现
│ │ └── QueryPlanCache.cpp // 查询计划缓存实现
│ │
│ ├── storage/ // 存储实现(3个文件)
│ │ ├── DiskManager.cpp // 磁盘管理器实现
│ │ ├── table_heap.cpp // 表堆存储实现
│ │ └── CatalogManager.cpp // 目录管理器实现
│ │
│ ├── index/ // 索引实现(1个文件)
│ │ └── BPlusTree.cpp // B+ 树索引实现
│ │
│ ├── executor/ // 执行器实现(7个文件)
│ │ ├── executor.cpp // 执行器基类实现
│ │ ├── SeqScanExecutor.cpp // 顺序扫描执行器实现
│ │ ├── IndexScanExecutor.cpp // 索引扫描执行器实现
│ │ ├── InsertExecutor.cpp // 插入执行器实现
│ │ ├── JoinExecutor.cpp // 连接执行器实现
│ │ ├── AggregationExecutor.cpp // 聚合执行器实现
│ │ └── SortExecutor.cpp // 排序执行器实现
│ │
│ ├── concurrency/ // 并发控制实现(5个文件)
│ │ ├── DeadLockDector.cpp // 死锁检测器实现
│ │ ├── LockManager.cpp // 锁管理器实现
│ │ ├── ServerManager.cpp // 服务管理器实现
│ │ ├── Transaction.cpp // 事务实现
│ │ └── TransactionManager.cpp // 事务管理器实现
│ │
│ ├── log/ // 日志系统实现(4个文件)
│ │ ├── LockTable.cpp // 锁表实现
│ │ ├── LogBuffer.cpp // 日志缓冲区实现
│ │ ├── WALManager.cpp // WAL 管理器实现
│ │ └── CheckpointManager.cpp // 检查点管理器实现
│ │
│ ├── optimizer/ // 优化器实现(1个文件)
│ │ └── QueryOptimizer.cpp // 查询优化器实现
│ │
│ ├── parser/ // 解析器实现(1个文件)
│ │ └── SQLParser.cpp // SQL 解析器实现
│ │
│ ├── benchmark/ // 基准测试实现(1个文件)
│ │ └── BenchmarkRunner.cpp // 基准测试运行器实现
│ │
│ └── common/ // 公共组件实现(1个文件)
│ └── config.cpp // 配置常量实现
│
├── test/ // 测试目录(5个测试文件)
│ ├── buffer_pool_test.cpp // 缓冲池测试(框架完成)
│ ├── b_plus_tree_test.cpp // B+ 树测试(框架完成)
│ ├── executor_test.cpp // 执行器测试(框架完成)
│ ├── lock_manager_test.cpp // 锁管理器测试(框架完成)
│ └── sql_parser_test.cpp // SQL 解析器测试(框架完成)
│
├── build/ // 构建输出目录
│
└── CMakeLists.txt // 构建脚本
浙公网安备 33010602011771号