🦀 SurrealKV 对决主流嵌入式 KV:原生时间旅行 + 纯 Rust 架构的降维优势
SurrealKV 与同类嵌入式键值存储产品的全面详细对比
引言与背景总结
SurrealKV 是 SurrealDB 团队完全自研的纯 Rust、嵌入式、版本化、ACID 兼容的键值存储引擎,采用 LSM 树 + Wisckey 值日志 + MVCC + 可选 B+Tree 版本索引架构。它的核心目标是彻底取代 SurrealDB 中的 RocksDB 依赖,实现存储层与 SurrealDB 查询模型(尤其是时间旅行查询、历史聚合、版本化图查询)的完美对齐。
截至 2026 年 2 月(最新版本 0.20.2),SurrealKV 已全面集成到 SurrealDB 3.0 中,并在生产环境中验证。其最大亮点是原生内置时间旅行查询(get_at、history),这是绝大多数同类 KV 存储引擎不具备或需二次开发的特性。
本对比选取最相关的 5 款同类产品(均支持嵌入式、高性能持久化 KV):
- RocksDB(SurrealKV 直接替代对象,C++)
- sled(纯 Rust 流行嵌入式 DB)
- redb(纯 Rust B+Tree,ACID 强)
- LMDB(通过 heed crate,内存映射极速)
- BadgerDB(Go LSM + Wisckey 经典参考)
对比基于官方 README、SurrealDB 官方 crud-bench 基准(2025-2026)、SurrealDB 3.0 性能报告、GitHub 讨论及社区反馈。重点维度覆盖架构、功能、性能、运维、适用场景。
全面对比表格(核心维度一览)
| 维度 | SurrealKV (Rust LSM) | RocksDB (C++ LSM) | sled (Rust 自定义) | redb (Rust B+Tree) | LMDB (C 内存映射) | BadgerDB (Go LSM + VLog) |
|---|---|---|---|---|---|---|
| 语言/嵌入性 | 纯 Rust,无外部依赖 | C++(需绑定) | 纯 Rust | 纯 Rust | C(heed Rust 绑定) | Go(需 Go 运行时) |
| 架构 | LSM + Wisckey + MVCC + B+Tree 版本索引 | LSM(LevelDB 进化) | 锁无关页面 + 日志结构 | B+Tree(纯事务) | B+Tree 内存映射 | LSM + Wisckey |
| ACID 支持 | 完整(事务模式:ReadOnly/WriteOnly) | 完整 | 完整(事务) | 完整(强一致) | 完整 | 完整 |
| 并发控制 | Snapshot Isolation(MVCC,无阻塞读写) | Snapshot Isolation(可选) | 乐观并发 | MVCC(B+Tree) | 读写锁 | Snapshot Isolation |
| 版本化/时间旅行 | 原生内置(get_at、history、任意时间点 + 范围扫描) | 无(需手动实现) | 无 | 无 | 无 | 无(需扩展) |
| 值日志分离 (Wisckey) | 原生支持(大值自动分离 + GC) | 可配置 | 无 | 无 | 无 | 原生经典 Wisckey |
| 持久化模式 | Eventual(极致性能) / Immediate(fsync) | 可调 sync | 可调 | 强制 fsync | 强制 fsync | 可调 |
| 压缩 | 按层(L0 无压缩,其余 Snappy) | 多算法 | 无内置 | 无 | 无 | Snappy 等 |
| Checkpoint/备份 | 原生原子快照(秒级) | 手动/工具 | 快照 | 事务一致 | 复制目录 | 手动 |
| 性能(SurrealDB 嵌入式 CRUD,5M 记录,128 客户端) | Create: ~42k OPS Read: ~76k OPS Update: ~38k OPS (SurrealKV 在 SurrealDB 3.0 中较 v2 提升 25x+) | Create: ~253k OPS Read: ~500k OPS (更快,但无版本化) | 接近 RocksDB(单机高并发强) | 中等(小数据集极快) | 极快(读写低延迟) | 与 RocksDB 相当 |
| 写放大/大值优化 | 极低(Wisckey + VLog) | 中等 | 低 | 低(B+Tree) | 低 | 极低(Wisckey) |
| 成熟度/维护 | 高(SurrealDB 生产验证,2026 活跃) | 极高(Meta 维护) | 高(长期维护) | 高 | 极高(Symas) | 高(Dgraph) |
| 平台支持 | Linux/macOS 完美,Windows 有限,WASM 不支持 | 全平台 | 全平台 | 全平台 | 全平台 | 全平台 |
| 许可 | Apache 2.0 | BSD-3 | Apache 2.0 | MIT | OpenLDAP | Apache 2.0 |
| 独特优势 | 时间旅行 + SurrealDB 深度集成 + 纯 Rust 无绑定 | 生态最成熟、插件丰富 | 纯 Rust 高并发、轻量二进制 | 零配置强 ACID、简单 | 极致读性能(mmap) | Go 生态 + Wisckey 经典 |
| 劣势 | 部分 raw 性能暂落后 RocksDB(2026 仍在优化) | C++ 绑定复杂、Windows 痛点 | 无原生时间旅行 | 大数据集写放大较大 | 无版本化、多进程限制 | 非 Rust、需 Go 环境 |
性能备注:数据来源于 SurrealDB 官方 crud-bench(2025 测试,5M 记录,单节点 NVMe)。SurrealKV 在纯 KV 吞吐上落后 RocksDB 约 5-6 倍,但在 SurrealDB 3.0 新执行引擎下,整体查询(含版本化)提升 96%+,并开启了 RocksDB 无法实现的“历史版本聚合”功能。
深度剖析:各产品优劣与适用场景
1. SurrealKV vs RocksDB(最直接替代)
- 胜出点:原生时间旅行(SurrealDB 独有特性)、Wisckey 值分离(写放大更低)、纯 Rust 无绑定、原子 Checkpoint、异步事务 API。
- 落后点:raw CRUD 吞吐较低(尤其 Create/Update),早期版本在 SurrealDB 中被吐槽“牺牲耐久性换性能”(Eventual 模式)。
- 选择建议:需要时间旅行、历史查询、版本化图的场景(审计、IoT、版本控制),直接选 SurrealKV。纯高吞吐无历史需求,仍可暂用 RocksDB(SurrealDB 默认)。
2. SurrealKV vs sled
- sled 是纯 Rust 轻量级嵌入式 DB(二进制仅几百 KB),高并发锁无关设计。
- SurrealKV 胜出:内置 MVCC + 时间旅行 + Wisckey + LSM 可扩展到亿级键。
- sled 胜出:启动更快、内存占用更低、适合中小数据集。
- 选择建议:轻量缓存/状态机用 sled;需要历史版本或 SurrealDB 集成用 SurrealKV。
3. SurrealKV vs redb
- redb 是纯 Rust B+Tree,零依赖、强 ACID、事务简单。
- SurrealKV 胜出:LSM 适合海量写入、Wisckey 大值优化、时间旅行。
- redb 胜出:小数据集随机读写更快、无 compaction 停顿。
- 选择建议:简单事务 + 小数据选 redb;大写负载 + 版本化选 SurrealKV。
4. SurrealKV vs LMDB (heed)
- LMDB 以 mmap + B+Tree 著称,读性能极致。
- SurrealKV 胜出:MVCC 无阻塞、时间旅行、跨进程安全 Checkpoint。
- LMDB 胜出:单机读延迟最低、多进程共享极佳。
- 选择建议:读多写少 + 多进程用 LMDB;写多 + 历史查询用 SurrealKV。
5. SurrealKV vs BadgerDB
- 两者架构最相似(LSM + Wisckey)。
- SurrealKV 胜出:Rust 原生 + 时间旅行 + B+Tree 版本索引(解决乱序时间戳问题)。
- Badger 胜出:Go 生态成熟、部分场景 GC 更激进。
- 选择建议:Rust 项目直接 SurrealKV;Go 项目用 Badger。
生产落地建议与注意事项
- 性能调优:始终开启
with_vlog(true)+with_versioned_index(true)+ L0 无压缩,Eventual 模式可达生产 10w+ QPS。 - SurrealDB 3.0 实测:SurrealKV + 新查询引擎后,整体性能已接近或超越 RocksDB,同时新增版本化能力。
- 避坑:Windows 支持有限;大数据库启动需预热;版本保留需定期
compact_version。 - 迁移路径:SurrealDB 用户可无缝切换(
storage: surrealkv),旧 RocksDB 数据需导出重导。
结论:如何选择 SurrealKV?
- 首选 SurrealKV:需要时间旅行查询、历史版本分析、版本化图数据、纯 Rust 无外部依赖的生产项目(尤其是 SurrealDB 嵌入式)。
- 选择 RocksDB:追求极致 raw 吞吐 + 成熟生态。
- 选择 sled/redb:轻量纯 Rust、小数据集、简单事务。
- 选择 LMDB:极致读性能 + 多进程。
- 选择 Badger:Go 项目 + 大值场景。
SurrealKV 的出现标志着嵌入式 KV 存储进入“版本化时代”。在 SurrealDB 生态中,它已从“实验引擎”成长为生产主力,未来分布式版本(计划中)还将挑战 TiKV/FoundationDB。
立即行动:访问 https://github.com/surrealdb/surrealkv 克隆仓库,结合 SurrealDB 3.0 基准测试你的场景,即可感受到时间旅行带来的革命性体验!
参考资料(最新 2026 年):
- SurrealKV 官方 GitHub & README
- SurrealDB 官方基准报告(crud-bench & 3.0 性能博客)
- Crates.io / docs.rs
- SurrealDB 文档(SurrealKV 章节)
本对比基于公开最新数据,如需特定工作负载定制测试,欢迎提供场景进一步深入!
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)