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 的对比

特性KiteSQLSQLite
语言RustC
嵌入方式Rust crateC 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);
}

项目信息

属性详情
GitHubKipData/KiteSQL
Stars698
LicenseApache 2.0
文档kitesql-web
创建时间2023年6月
最后更新2026年4月

局限性

  • 功能有限:不支持 JOIN、子查询等复杂 SQL 特性
  • 生态早期:API 可能不稳定
  • 生产待验证:建议用于实验性项目

总结

KiteSQL 展示了用 Rust 从头构建关系型数据库的可能性。虽然功能上还不能与 SQLite 相提并论,但对于想要纯 Rust 技术栈的开发者来说,它提供了一个有趣的替代方案——特别是当你需要 WASM 支持时。

698 stars 反映了这个项目的潜力,值得关注其后续发展。