# c-plus-personal-learning **Repository Path**: openrainning/c-plus-personal-learning ## Basic Information - **Project Name**: c-plus-personal-learning - **Description**: 个人C++学习仓库,专注于C++编程技术的实践与提升,包含基础练习、项目实战和算法挑战,适合各阶段开发者。 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-24 - **Last Updated**: 2025-05-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 简化版的 MySQL/PostgreSQL,详细设计路线图: --- ## 1. 总体架构设计 ```text +-------------------------+ | SQL 接口层 | | Parser + Planner + AST | +-----------+-------------+ | +-----------v-------------+ | 执行引擎(Executor) | +-----------+-------------+ | +-----------v-------------+ | 查询优化器(可后期扩展)| +-----------+-------------+ | +-----------v-------------+ | 存储引擎(Storage) | | B+Tree / Hash / Table Heap| +-----------+-------------+ | +-----------v-------------+ | WAL / PageCache | +-----------+-------------+ | +-----------v-------------+ | 磁盘 / 文件系统 | +-------------------------+ ``` --- ## 2. 模块拆解和开发路线 ### 2.1 SQL 解析(Parser) * 使用 [`sqlparser-rs`](https://github.com/sqlparser-rs/sqlparser-rs) 支持 ANSI SQL; * 将 SQL 解析为 AST,然后做逻辑计划生成。 > 可扩展实现 DDL(如 CREATE TABLE)、DML(如 SELECT、INSERT)和事务语句(BEGIN、COMMIT、ROLLBACK)。 --- ### 2.2 执行引擎(Executor) 执行语法树表示的查询/插入/更新等操作。 支持功能: * 表扫描、过滤(WHERE) * 投影(SELECT 字段) * 插入/删除/更新 * 后期支持 join/hash join/sort merge join 等 --- ### 2.3 多线程并发(Concurrency & MVCC) * 使用 `tokio` 实现请求级并发; * 内部数据结构支持 `RwLock` 或实现简易版 MVCC(支持读写隔离); * 支持事务的锁机制(行级锁、表锁、死锁检测等)。 --- ### 2.4 存储引擎 #### 2.4.1 表数据存储(Table Heap) * 定长 or 可变长记录; * 行式或列式存储(初期推荐行式); * 页结构:类似 InnoDB,每页大小固定,例如 8KB。 #### 2.4.2 索引模块(Index) * 支持: * **B+ Tree**:主键索引 / 范围查询; * **Hash Index**:适合等值查询; * 可用 `Arc>` 管理节点并发访问。 --- ### 2.5 WAL 和持久化 Write-Ahead Logging 模块: * 所有写操作先写 WAL 文件,再写页缓存; * WAL 支持恢复操作; * 实现 checkpoint 概念减少恢复时间; * 推荐使用 `BufWriter` 或 mmap 提高写入性能。 --- ### 2.6 Page Cache 和 Buffer Pool(可选进阶) * 实现类似 InnoDB 的页缓存管理器; * LRU 策略 + 脏页刷盘机制。 --- ### 2.7 网络服务层 * 使用 `tokio` + `tokio::net::TcpListener` 实现服务端; * 自定义协议或兼容 PostgreSQL 协议; * 建议先自定义协议:如 `Text-Based SQL Protocol` 类似 Redis RESP。 --- ## 3. 技术选型 | 组件 | 推荐库 | 描述 | | ---------- | ---------------------- | ----------------- | | SQL Parser | `sqlparser-rs` | 支持 ANSI SQL | | 并发 | `tokio`, `parking_lot` | 异步和锁 | | 序列化 | `bincode`, `serde` | 用于存盘 | | 索引结构 | 自研或参考 `btree` crate | B+ 树 / Hash 实现 | | 日志 | `BufWriter`, `mmap` | 高效 WAL | | 网络层 | `tokio`, `axum`(进阶) | 可搭建简单 HTTP/SQL 接口 | --- ## 4. 项目结构示例 ``` mydb/ ├── src/ │ ├── sql/ # SQL解析器与语义分析器 │ ├── executor/ # 查询执行器 │ ├── planner/ # 查询计划生成 │ ├── storage/ # 表数据、B+树、页管理 │ ├── wal/ # 日志模块 │ ├── index/ # 索引模块(B+ Tree、Hash) │ ├── concurrency/ # 锁、事务、多版本控制 │ ├── server/ # 网络模块,支持 SQL 协议 │ └── lib.rs ├── Cargo.toml ``` --- ## 5. 开发顺序 | 阶段 | 模块 | 功能 | | -- | ----------------------- | --------------- | | 1 | SQL Parser + Table Heap | 支持创建表 + 插入 + 查询 | | 2 | Executor + B+Tree Index | 支持索引加速查找 | | 3 | WAL + 恢复机制 | 支持持久化 | | 4 | 并发引擎 + 简易事务 | 多线程读写 + 回滚 | | 5 | SQL 网络协议 | 启动服务,远程连接 | | 6 | 优化器 + JOIN 支持 | 提升性能 | ---