2026-09-19 19:22:50 +08:00
|
|
|
|
# ChuSQL
|
|
|
|
|
|
|
|
|
|
|
|
本项目是一个简单的数据库项目,服务端采用Haskell和Rust联合编写,采取B/S模式,管理客户端运行在浏览器网页上。
|
|
|
|
|
|
|
|
|
|
|
|
## 仓库布局
|
|
|
|
|
|
|
|
|
|
|
|
| 目录 | 语言 | 组件 |
|
|
|
|
|
|
| ----------------- | ------- | ----------------------------------------------------------------- |
|
|
|
|
|
|
| `chusql-engine/` | Haskell | 执行引擎:词法分析与AST、表达式求值、关系代数、内存表、服务端接口 |
|
|
|
|
|
|
| `chusql-storage/` | Rust | 存储引擎:磁盘IO、B+树、缓冲池、WAL、崩溃恢复、并发控制 |
|
|
|
|
|
|
| `chusql-web/` | 前端 | 浏览器端管理客户端 |
|
|
|
|
|
|
|
|
|
|
|
|
# 架构分层
|
|
|
|
|
|
|
|
|
|
|
|
## Haskell部分
|
|
|
|
|
|
|
|
|
|
|
|
作为函数式编程语言,从语言层面契合SQL语句解析和代数数学运算,同时有强大的类型安全系统。
|
|
|
|
|
|
|
|
|
|
|
|
- SQL词法分析、AST
|
2026-09-22 21:26:54 +08:00
|
|
|
|
- 语义分析:表/列存在性与类型检查(执行前的关卡)
|
2026-09-19 19:22:50 +08:00
|
|
|
|
- 事务处理
|
|
|
|
|
|
- 查询优化、内存表管理
|
|
|
|
|
|
- 关系代数运算
|
|
|
|
|
|
- 服务端接口与请求相应
|
|
|
|
|
|
|
|
|
|
|
|
## Rust部分
|
|
|
|
|
|
|
|
|
|
|
|
高性能、内存安全且具有强大并行异步编程能力的现代编程语言。
|
|
|
|
|
|
|
|
|
|
|
|
- 磁盘IO
|
|
|
|
|
|
- B+树、页面管理
|
|
|
|
|
|
- 缓冲池
|
|
|
|
|
|
- WAL
|
|
|
|
|
|
- 事务日志和崩溃恢复
|
|
|
|
|
|
- 并发控制
|
|
|
|
|
|
|
|
|
|
|
|
## 前端部分
|
|
|
|
|
|
|
|
|
|
|
|
- 前端部分目前还没想好选型架构,暂且使用简单前端三件套做一个简单的仿CLI WebUI即可。后期可能会加上Rust编写的CLI前端
|
|
|
|
|
|
|
|
|
|
|
|
> Rust和Haskell部分的通信通过管道实现,后期跨平台到Linux后使用Unix Domain Socket
|
|
|
|
|
|
|
|
|
|
|
|
> 如果找到了较好的Rust+Haskell集成方法也会及时替换
|
2026-09-21 23:44:37 +08:00
|
|
|
|
|
|
|
|
|
|
# 性能基准
|
|
|
|
|
|
**测试环境**:Windows / GHC 9.10.3 / `-O2`
|
|
|
|
|
|
**数据规模**:`users`、`orders` 各 500 行,两表配对共 25 万对
|
2026-09-24 23:56:07 +08:00
|
|
|
|
**计时方式**:CPU 时间;每批至少 8 次迭代、累计超过 0.3 秒后固定批次,取 3 批中位数(避开时钟量化误差)
|
2026-09-21 23:44:37 +08:00
|
|
|
|
|
|
|
|
|
|
| 查询 | 结果行数 | 未优化 | 优化后 | 加速 |
|
|
|
|
|
|
| ------------------------------------------ | -------: | -------: | ----------: | --------: |
|
2026-09-24 23:56:07 +08:00
|
|
|
|
| `JOIN` + `WHERE u.age > 90` | 45 | 156.3 ms | **12.2 ms** | **12.8x** |
|
|
|
|
|
|
| `JOIN`(无 WHERE,只有投影) | 500 | 169.9 ms | 146.5 ms | 1.2x |
|
|
|
|
|
|
| `JOIN` + `WHERE` + `ORDER BY` + `LIMIT 10` | 10 | 175.8 ms | **13.7 ms** | **12.9x** |
|
|
|
|
|
|
| 单表 `WHERE age > 90`(对照组) | 45 | 0.183 ms | 0.275 ms | 0.7x |
|
2026-09-21 23:44:37 +08:00
|
|
|
|
|
2026-09-24 23:56:07 +08:00
|
|
|
|
> 跑法:`cd benchmark/chusql-engine && stack run`(可选参数:`用户行数 订单数 单批目标秒数`,默认 `500 500 0.3`)
|
|
|
|
|
|
> 最近更新:2026-09-24
|