【免费下载链接】stoolap
A Modern Embedded SQL Database written in Rust
Stoolap是一个用纯 Rust 编写的现代嵌入式 SQL 数据库,主打低延迟事务与实时分析。它和老牌选手SQLite放在一起跑了 53 项基准测试,结果显示 Stoolap 在绝大多数场景下显著领先——有些查询快了 300 倍以上。嵌入式数据库的性能天花板,到底能捅到多高?这篇文章带你拆开看这份对比报告。
这套基准测试是怎么做的
公平对比的关键在于“同一起跑线”。这次测试把 Stoolap、SQLite、DuckDB 拉到完全相同的工作负载下:
| 参数 | 取值 |
|---|---|
| 数据量 | 10,000 行 |
| 迭代次数 | 点查 500 / 中等 250 / 重度 50 |
| 模式 | 内存模式(In-memory) |
| 平台 | Apple Silicon |
| 采样 | Stoolap 取 3 会话 30 轮最优,SQLite/DuckDB 取 10 轮最优 |
| 驱动 | rusqlite v0.40.2、duckdb v1.10501.0 |
测试代码放在独立的对比 crate 里,用 prepared statement 保证两边执行路径一致,数据分布也完全相同。完整配置与结果见 BENCHMARKS.md,对比逻辑源码在 compare/ 目录,可复现的样例在 examples/benchmark.rs。
53 项测试总览:三档覆盖
53 项测试分成三档,从“日常点查”一路压到“刁钻瓶颈”:
- 基础操作(11 项):SELECT / INSERT / UPDATE / DELETE、索引查询、聚合 GROUP BY
- 进阶操作(13 项):JOIN、子查询、CTE、窗口函数、UNION、CASE
- 瓶颈猎手(29 项):DISTINCT、LIKE、NOT IN、多列排序、嵌套子查询、OFFSET 分页等
总战绩:Stoolap 在 53 项里拿下绝大多数,整体胜率超过 90%,仅有个别简单表达式场景被 SQLite 小幅反超。
快得夸张的几项:最高 360 倍
最能拉开差距的,是那些“看起来不复杂、实则吃优化器”的查询。挑几个最有代表性的:
| 操作 | Stoolap | SQLite | 加速比 |
|---|---|---|---|
| COUNT DISTINCT | 0.26 us | 92.07 us | 360x |
| Compare with subquery | 4.78 us | 1273.44 us | 266x |
| DELETE complex | 2.20 us | 338.53 us | 154x |
| Scalar subquery | 7.91 us | 330.70 us | 42x |
| 聚合(GROUP BY) | 42.12 us | 1126.52 us | 27x |
| NOT IN 子查询 | 64.28 us | 1668.07 us | 26x |
| DISTINCT + ORDER BY | 4.46 us | 121.32 us | 27x |
点查(SELECT by ID)更是压到了0.11 微秒,比 DuckDB 快约 634 倍。换句话说,一次主键查询只花掉不到千分之一毫秒。
优势场景:事务型 + 实时分析
从数据分布看,Stoolap 的强项非常清晰:
- OLTP 点查:主键查询、单行增删改,延迟极低
- 实时聚合:DISTINCT、GROUP BY、COUNT DISTINCT 大幅领先
- 半连接模式:EXISTS、IN 子查询走索引下推
- 复杂 DML:带条件的批量删除、更新
- 内存安全:纯 Rust,无 C/C++ 依赖链
诚实说明:SQLite 赢在哪
好的对比必须保留“输掉的部分”。SQLite 在几项简单表达式上小幅领先,差距普遍在 1.1~1.4 倍之间:
| 操作 | SQLite | Stoolap | 倍数 |
|---|---|---|---|
| COALESCE + IS NOT NULL | 2.56 us | 3.52 us | 1.4x |
| 多 CTE(2 个) | 14.77 us | 19.73 us | 1.3x |
| 字符串拼接(||) | 4.74 us | 5.86 us | 1.2x |
| UPDATE by ID | 0.53 us | 0.59 us | 1.1x |
这些都是微秒级的绝对差距,对绝大多数业务几乎无感,但说明 SQLite 在“简单、单线程”的轻量场景里依然是极强对手。
架构差异才是性能分水岭
为什么差距这么大?答案藏在存储与执行模型里:
| 维度 | Stoolap | SQLite |
|---|---|---|
| 存储模型 | 热行内存 MVCC,检查点落为不可变列式 volume(LZ4 + 字典 + zone map) | 行式 B-tree 页 |
| 并发 | MVCC | WAL / 锁 |
| 查询优化 | 基于统计信息的代价优化 + 自适应执行 | 规则式代价优化 |
| 并行执行 | 支持(Rayon) | 不支持 |
| 语言 | 纯 Rust(内存安全) | C |
简单说,Stoolap 用“内存 MVCC + 列式落盘 + 代价优化器 + 并行”的组合拳,把点查和聚合的常数项压到了极低;而 SQLite 以行式 B-tree 见长,在简单查询上稳定可靠。
该选哪一个
- 选 Stoolap:低延迟 OLTP、实时分析、半连接/子查询密集、需要 MVCC 事务与时间旅行(AS OF)、追求纯 Rust 内存安全的嵌入式或边缘场景。
- 选 SQLite:单线程轻量应用、简单嵌套连接、追求极致兼容性与生态成熟度。
结语
这份 53 项基准测试给出的信号很明确:在点查、聚合和子查询这类“日常却高频”的负载上,纯 Rust 的 Stoolap 把嵌入式数据库的延迟下限又往下推了一大截。当然,基准是“某一刻、某台机器、某份工作负载”的快照——官方也提醒,务必在你自己的硬件与数据分布上复跑验证。但方向上,现代嵌入式 SQL 数据库的速度,确实比我们想象的更快。
【免费下载链接】stoolap
A Modern Embedded SQL Database written in Rust
相关推荐
游戏逆向工程完全指南:从零开始掌握游戏内部机制
游戏逆向工程完全指南:从零开始掌握游戏内部机制 游戏逆向工程是一个令人着迷的技术领域,它让你能够窥探游戏背后的秘密世界。想象一下,你可以像游戏开发者一样理解游戏
文档教程逆向工程CANN/asc-devkit SIMT数学函数lgammaf
lgammaf 产品支持情况 <! npu="950" id1 Ascend 950PR/Ascend 950DT:支持 <! end id1 <! npu="
人工智能深度学习算子库CANNAscend嵌入式存储终极性能对决:LittleFS vs SPIFFS 深度基准测试
嵌入式存储终极性能对决:LittleFS vs SPIFFS 深度基准测试 在嵌入式系统开发中,选择合适的文件系统至关重要。LittleFS 和 SPIFFS
嵌入式存储系统编程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考