Turso 数据库:一个核心,两种方言,SQLite 兼容之外的野心
Rust 中的 SQL 数据库:与 SQLite 兼容,现在也可以使用 Postgres(实验性)。数据库的 LLVM。
秒懂
- 它是什么?
- Turso 是一个用 Rust 写的进程内 SQL 数据库,兼容 SQLite,并实验性地支持 Postgres 方言与线协议。它的核心是一个类似 LLVM 的虚拟机,本文评估其架构、上手路径与适用边界。
- 适合谁用?
- 适合需要 SQLite 文件格式兼容、但又想尝试 MVCC 并发控制或 CDC 的嵌入式应用开发者,尤其是 Rust、Go 或 JavaScript 生态的团队。不适合需要成熟 Postgres 兼容性的生产环境,因为 Postgres 前端仍标注为实验性,且文档未给出完整的功能对照。
- 能商用吗?
- 可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库在最近一天内有新的提交。
- 用什么语言写的?
- 主要是 Rust(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。
开源项目深度解析
一个数据库,两种 SQL 方言,核心是一台虚拟机
Turso 的自我定位不是又一个 SQLite 替代品,而是数据库界的 LLVM。README 里明确写着:它把 SQL 编译成字节码,跑在自己的虚拟机上,这个虚拟机叫 VDBE。SQLite 是第一个前端,Postgres 是第二个,未来还会有更多。这个架构的直接后果是,你不需要为每种 SQL 方言重写存储引擎。核心只负责执行字节码,方言差异被隔离在前端编译层。这个设计很优雅,但也意味着兼容性永远取决于前端编译器的完成度。SQLite 前端是主战场,追踪 3.50.4 版本;Postgres 前端则明确标注为实验性。如果你需要的是稳定的 Postgres 服务,现在还不是时候。
从命令行到多种语言绑定:上手路径清晰
安装很简单,一条 curl 命令就能装好 CLI。启动后进入交互式 shell,默认连到内存数据库,用 .open 可以切换持久化文件。README 给的示例从建表到查询都直白,没有多余配置。除了 CLI,官方提供了六种语言的绑定:Go、JavaScript、Java、.NET、Python、Rust,还有 WebAssembly。每个绑定都给了最小示例,比如 Rust 里用 Builder::new_local("sqlite.db").build().await 打开文件,Python 里用 turso.connect("sqlite.db")。这些示例都只有几行,说明核心 API 设计得足够简单。但要注意,Rust 示例用了 .await,说明连接是异步的,这跟 SQLite 的同步 C API 有本质区别。如果你在现有同步代码里集成,可能需要处理异步运行时。
BEGIN CONCURRENT 与 MVCC:写并发不是空谈
SQLite 的写锁是全局的,一次只有一个连接能写。Turso 引入了 BEGIN CONCURRENT,用多版本并发控制(MVCC)来提升写吞吐。这不是一个宣传口号,而是写在 feature 列表里的具体机制。README 没有给出性能数字,但至少在设计上承认了 SQLite 的写瓶颈并试图解决。代价是复杂度:MVCC 意味着底层文件格式和事务语义可能与 SQLite 原生实现有细微差别。如果你依赖 SQLite 的某些锁行为,比如在多个进程中共享同一个数据库文件,那么 Turso 的 .tshm 侧车文件(用于跨进程 WAL 协调)也需要纳入考虑。这个特性标注为实验性,意味着它可能还没经过大规模生产验证。
实验特性清单:CDC、加密、全文搜索,还有增量计算
Turso 的实验特性列表很长,而且每一项都值得单独审视。CDC(变更数据捕获)用于实时跟踪数据库变化,这对事件驱动架构有吸引力。加密静态数据是另一个亮点,但 README 只说了“protecting the data locally”,没提具体算法或密钥管理方式。全文搜索基于 tantivy 库,这是一个成熟的 Rust 搜索库,但集成深度未知。最激进的是增量计算,用 DBSP 做增量视图维护和查询订阅,这几乎是一个独立的数据库功能。这些特性都标注为实验性,意味着 API 可能变动,行为可能不稳定。如果你在评估 Turso 是否适合生产,应该把这些特性当作“存在但未验证”,而不是现成的功能。
向量支持与路线图:从精确搜索到近似索引
向量支持已经出现在 feature 列表里,包括精确搜索和向量操作。但路线图里提到,近似向量搜索(类似 libSQL 的向量搜索)还在计划中。这意味着如果你需要海量向量的 ANN 检索,Turso 目前只能做精确搜索,这在数据量小的时候没问题,但数据量大了性能会下降。libSQL 是 Turso 生态里的另一个项目,路线图明确说会借鉴它。这暴露了 Turso 的一个定位问题:它想成为 LLVM,但向量搜索这类功能更像是应用层特性,而不是核心虚拟机能力。如果你选 Turso 是为了向量检索,现在可能不如直接用专门的向量数据库。
平台支持与异步 I/O:io_uring 是亮点也是限制
Turso 支持 Linux、macOS、Windows 和浏览器(通过 WebAssembly)。在 Linux 上,它支持 io_uring 异步 I/O。这是一个非常具体的优势,因为 io_uring 能显著降低高并发场景下的系统调用开销。但注意,这是 Linux 专属,macOS 和 Windows 上不会有这个特性。README 没有说明其他平台的 I/O 模型,所以如果你跨平台部署,性能表现可能不一致。另外,WebAssembly 支持意味着你可以在浏览器里跑 Turso,这对边缘计算或纯前端应用有吸引力。但浏览器环境的存储持久化能力有限,可能只适合内存或临时数据场景。
维护成本与许可证:MIT 下的双刃剑
Turso 使用 MIT 许可证,这对商业集成很友好,没有 copyleft 约束。但 MIT 也意味着没有任何担保,尤其对于实验特性,你需要自己承担风险。维护成本方面,项目最近发布频繁,v0.8.0-pre 系列在几天内连续更新,说明开发节奏很快。但预发布版本意味着 API 可能不稳定,升级时可能需要适配。文档只提到 COMPAT.md 和 postgres/COMPAT.md 两个兼容性参考文件,但没有列出具体差异。这意味着你需要自行检查这些文件,才能确定你的 SQL 用法是否被支持。对于一个声称兼容 SQLite 的数据库,这种文档粒度偏薄。
编辑结论
适合需要 SQLite 文件格式兼容、但又想尝试 MVCC 并发控制或 CDC 的嵌入式应用开发者,尤其是 Rust、Go 或 JavaScript 生态的团队。不适合需要成熟 Postgres 兼容性的生产环境,因为 Postgres 前端仍标注为实验性,且文档未给出完整的功能对照。也不适合需要与 SQLite 完全一致行为(包括所有边缘 case)的项目,因为 COMPAT.md 只承诺追踪 3.50.4 版本,但未列出全部差异。采用前应先检查 COMPAT.md 和 postgres/COMPAT.md 中列出的限制,并在你的真实工作负载上验证 BEGIN CONCURRENT 和 WAL 协调是否按预期工作。另一个具体验证点是加密与增量计算特性目前仅存在于 roadmap 或实验标记中,不要依赖它们作为选型依据。
社区笔记