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集成方法也会及时替换

性能基准

测试环境:Windows / GHC 9.10.3 / -O2 数据规模:users、orders 各 500 行,两表配对共 25 万对 计时方式:CPU 时间,自适应批量(累计超过 0.3 秒后折算成单次耗时)

查询 结果行数 未优化 优化后 加速
JOIN + WHERE u.age > 90 45 242.2 ms 16.6 ms 14.6x
JOIN(无 WHERE,只有投影) 500 210.9 ms 195.3 ms 1.1x
JOIN + WHERE + ORDER BY + LIMIT 10 10 164.1 ms 14.2 ms 11.6x
单表 WHERE age > 90(对照组) 45 0.175 ms 0.290 ms 0.6x

最近更新:2026-09-22(绝对值受机器状态影响,倍率更稳定;同机同法可复现)

S
Description
个人博客
Readme
1.6 MiB
0 Stars 1 Watchers 0 Forks
Languages
Rust 77.5%
Python 18.9%
Dockerfile 1.9%
Shell 1.7%