KiteSQL:698⭐的 Rust 嵌入式关系数据库
SQLite 是嵌入式数据库的事实标准,但它不是用 Rust 写的。如果你正在构建一个 Rust 应用,想要一个原生嵌入的 SQL 数据库,KiteSQL 值得关注。
这是一个 698 stars 的纯 Rust 嵌入式关系型数据库,支持标准 SQL 查询、ACID 事务,甚至可以编译为 WebAssembly 在浏览器中运行。
项目定位
| 特性 | 说明 |
|---|---|
| 类型 | 嵌入式关系型数据库 |
| 语言 | 纯 Rust 实现 |
| SQL 支持 | 标准 SQL 语法 |
| 架构 | 基于 Volcano 模型的查询引擎 |
| 存储 | 基于 RocksDB 的 KV 存储 |
| WASM 支持 | 可编译为 WebAssembly |
核心特性
🗃️ SQL 支持
KiteSQL 实现了标准 SQL 解析器和执行器:
-- 建表
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
-- 插入
INSERT INTO users (id, name, email) VALUES (1, 'Alice', 'alice@example.com');
-- 查询
SELECT * FROM users WHERE id = 1;
-- 聚合
SELECT COUNT(*) FROM users;
🔗 原生 Rust API
除了 SQL,KiteSQL 提供直观的 Rust API:
use kitesql::connection::Connection;
// 创建内存数据库连接
let conn = Connection::memory().unwrap();
// 执行 SQL
conn.execute("CREATE TABLE t (a INTEGER, b TEXT)").unwrap();
conn.execute("INSERT INTO t VALUES (1, 'hello')").unwrap();
// 查询
let rows = conn.query("SELECT * FROM t").unwrap();
for row in rows {
println!("{:?}", row);
}
⚡ 性能优化
- RocksDB 后端:基于成熟的 LSM-Tree 存储引擎
- 向量化执行:部分算子支持批量处理
- SIMD 加速:利用 Rust 的 SIMD 指令优化
🌐 WASM 支持
KiteSQL 可以编译为 WebAssembly,在浏览器中运行:
// WASM 环境下同样可用
#[wasm_bindgen]
pub fn query(sql: String) -> String {
let conn = Connection::memory().unwrap();
let result = conn.query(&sql).unwrap();
format!("{:?}", result)
}
架构设计
KiteSQL 采用经典的数据库架构分层:
┌─────────────────────────────────────┐
│ SQL Parser │ ← sqlparser-rs
├─────────────────────────────────────┤
│ Logical Planner │
├─────────────────────────────────────┤
│ Optimizer (RBO) │
├─────────────────────────────────────┤
│ Physical Planner │
├─────────────────────────────────────┤
│ Execution Engine │ ← Volcano 模型
├─────────────────────────────────────┤
│ Storage Layer │ ← RocksDB
└─────────────────────────────────────┘
适用场景
| 场景 | 说明 |
|---|---|
| Rust 应用内嵌 | 需要本地 SQL 数据库的桌面/服务端应用 |
| 边缘计算 | 编译为 WASM 在边缘环境运行 |
| 测试/原型 | 快速启动的内存数据库 |
| 教学研究 | 学习数据库实现的参考代码 |
与 SQLite 的对比
| 特性 | KiteSQL | SQLite |
|---|---|---|
| 语言 | Rust | C |
| 嵌入方式 | Rust crate | C library |
| WASM 支持 | 原生支持 | 需 Emscripten |
| 成熟度 | 新兴项目 | 20+ 年历史 |
| 功能完整度 | 基础功能完善 | 功能极其丰富 |
选择建议:
- 如果是纯 Rust 项目且需要 WASM 支持 → KiteSQL
- 如果需要生产级稳定性或复杂功能 → SQLite
快速开始
# Cargo.toml
[dependencies]
kitesql = "0.1"
use kitesql::connection::Connection;
fn main() {
let conn = Connection::memory().unwrap();
conn.execute("CREATE TABLE t (a INTEGER)").unwrap();
conn.execute("INSERT INTO t VALUES (42)").unwrap();
let rows = conn.query("SELECT * FROM t").unwrap();
assert_eq!(rows.len(), 1);
}
项目信息
| 属性 | 详情 |
|---|---|
| GitHub | KipData/KiteSQL |
| Stars | 698 |
| License | Apache 2.0 |
| 文档 | kitesql-web |
| 创建时间 | 2023年6月 |
| 最后更新 | 2026年4月 |
局限性
- 功能有限:不支持 JOIN、子查询等复杂 SQL 特性
- 生态早期:API 可能不稳定
- 生产待验证:建议用于实验性项目
总结
KiteSQL 展示了用 Rust 从头构建关系型数据库的可能性。虽然功能上还不能与 SQLite 相提并论,但对于想要纯 Rust 技术栈的开发者来说,它提供了一个有趣的替代方案——特别是当你需要 WASM 支持时。
698 stars 反映了这个项目的潜力,值得关注其后续发展。