0791fe04469da03c6b3e9f8fe2583ae67c6044ff
ChuSQL
本项目是一个简单的数据库项目,服务端采用Haskell和Rust联合编写,采取B/S模式,管理客户端运行在浏览器网页上。
仓库布局
| 目录 | 语言 | 组件 |
|---|---|---|
chusql-engine/ |
Haskell | 执行引擎:词法分析与AST、表达式求值、关系代数、内存表、服务端接口 |
chusql-storage/ |
Rust | 存储引擎:磁盘IO、B+树、缓冲池、WAL、崩溃恢复、并发控制 |
chusql-web/ |
前端 | 浏览器端管理客户端 |
架构分层
Haskell部分
作为函数式编程语言,从语言层面契合SQL语句解析和代数数学运算,同时有强大的类型安全系统。
- SQL词法分析、AST
- 事务处理
- 查询优化、内存表管理
- 关系代数运算
- 服务端接口与请求相应
Rust部分
高性能、内存安全且具有强大并行异步编程能力的现代编程语言。
- 磁盘IO
- B+树、页面管理
- 缓冲池
- WAL
- 事务日志和崩溃恢复
- 并发控制
前端部分
- 前端部分目前还没想好选型架构,暂且使用简单前端三件套做一个简单的仿CLI WebUI即可。后期可能会加上Rust编写的CLI前端
Rust和Haskell部分的通信通过管道实现,后期跨平台到Linux后使用Unix Domain Socket
如果找到了较好的Rust+Haskell集成方法也会及时替换
代码规模
| 语言 / 类别 | 文件数 | 行数 | 说明 |
|---|---|---|---|
| Haskell(引擎) | 11 | 902 | chusql-engine/src/ 10 个模块 + app/Main.hs |
| Haskell(测试) | 1 | 1058 | test/Spec.hs,124 条用例 |
| Haskell(基准) | 1 | 118 | benchmark/chusql-engine/src/Main.hs |
| Rust | 0 | 0 | chusql-storage/ 尚未开工 |
| 前端 | 0 | 0 | chusql-web/ 尚未开工 |
| Markdown 文档 | 6 | 1456 | README.md + docs/ 3 篇 + benchmark/ 2 篇 |
| 构建 / 配置 | 9 | 231 | cabal、stack.yaml(.lock)、tasks.json、.gitignore、LICENSE |
| 项目计划 | 1 | 368 | chusql-engine/projectplan.txt |
| 合计 | 29 | 4133 | 另有 3 个 .gitkeep 占位文件未计入 |
最近更新:2026-09-19
性能基准
测试环境:Windows / GHC 9.10.3 / -O2
数据规模:users、orders 各 500 行,两表配对共 25 万对
计时方式:CPU 时间,自适应批量(累计超过 0.3 秒后折算成单次耗时)
| 查询 | 结果行数 | 未优化 | 优化后 | 加速 |
|---|---|---|---|---|
JOIN + WHERE u.age > 90 |
45 | 125.0 ms | 7.1 ms | 17.7x |
JOIN(无 WHERE,只有投影) |
500 | 132.8 ms | 105.5 ms | 1.3x |
JOIN + WHERE + ORDER BY + LIMIT 10 |
10 | 171.9 ms | 10.3 ms | 16.8x |
单表 WHERE age > 90(对照组) |
45 | 0.111 ms | 0.153 ms | 0.7x |
最近更新:2026-09-19
Languages
Haskell
64.4%
Rust
22.4%
JavaScript
5.7%
PowerShell
2.7%
Shell
2.6%
Other
2.2%