上周被 Supabase 收购的 Turso,这两天发了 v0.8.2。GitHub 上 2.4 万 star,仓库当天还有提交。
收购的新闻大家可能看过:Supabase 每周新建 100 万个数据库,七成由 AI agent 创建,它需要一个能「像创建文件一样创建数据库」的引擎。这篇讲技术上它到底强在哪。
先说它是什么
Turso 是 SQLite 的 Rust 从零重写版,原代号 Limbo。文件级兼容:能打开 SQLite 的库文件,也能生成 SQLite 格式的文件。MIT 协议,开放贡献,目前 260 多个贡献者。
和 SQLite 的 C 实现相比,这份重写有两个先天优势。
并发写用 MVCC。 SQLite 的单写者瓶颈在服务器场景是硬伤,多进程写同一个库要排队。Turso 把这事解掉了,路数和 Postgres 一样。
I/O 全异步。 接口设计成天生适合 io_uring 和现代事件循环,这也是它能编译成 WASM 在浏览器里跑的原因。
重点:一个引擎,两种方言
SQLite 的内核其实是一台虚拟机:SQL 先编译成一种叫 VDBE 的字节码,再在虚拟机上执行。这不是通用语言,是数据库专用的指令集,里面有「在 B 树里找一条记录」这种高层操作。
Turso 保留了这个设计,然后在上面做了件激进的事:把前端做成可插拔的。SQLite 方言是第一个前端,Postgres 方言是第二个。
实现路径不绕弯:用真正的 Postgres 解析器(pg_query)接受语法,翻译成 Turso 自己的 AST,编译到同一套 VDBE 字节码执行。wire protocol v3 的服务端已经就位,psql 和主流 ORM 可以直接连。
之前把 SQLite 和 Postgres 拉到一起的项目,基本都在查询翻译层做文章,把一种 SQL 翻成另一种。两边方言差异太大,这条路死过一批项目。Turso 换了打法:表层不同没关系,底下每个 SQL 数据库都是 B 树加索引,在字节码层汇合。官方管这叫「数据库界的 LLVM」,一个内核,多个前端。
他们甚至写了一个 C 到 VDBE 的编译器,把 Doom 编译成数据库字节码,在浏览器标签页里真跑起来了。这不是噱头,它在证明这台虚拟机的图灵完备程度。
两种方言共享什么
存储、事务、查询编译器、虚拟机,全部共享。所以:
数据库还是单个文件。 能像 SQLite 一样嵌进应用,能同步到本地,能编译成 WASM。
物化视图是活的。 Postgres 用户等了二十年的自动更新物化视图,Turso 做成了增量计算自动维护,不会为了兼容做一个需要手动 REFRESH 的版本。
官方明确说不追求 100% 兼容 Postgres。目标是主流应用不改代码能跑通,语法层全收(真 PG 解析器),执行层还在补。主流的 SELECT、JOIN、子查询、事务都能跑,边角的功能(比如 ALTER COLUMN TYPE)还有缺口。
现在能用吗
beta 阶段,v0.8.x。正式包还没发布,源码编译:
cd postgres/cli && cargo run被 Supabase 收购后,这个项目的确定性反而变高了:平台继续运营,开源继续开源,Postgres 前端是官方主线而不是实验分支。
选型上,嵌入式场景现在就可以试;替换生产 Postgres 再等等。
如果你在选一个 agent 场景的轻量数据库,或者想要「单文件但会讲 Postgres 话」的本地库,这个项目值得进观察清单第一位。
参考来源
- Turso Postgres 前端技术博客:https://turso.tech/blog/a-new-modern-version-of-postgres-in-rust
- Turso GitHub 仓库(v0.8.2):https://github.com/tursodatabase/turso
- Supabase 官宣收购 Turso:https://supabase.com/blog/supabase-is-acquiring-turso
- Turso 官宣加入 Supabase:https://turso.tech/blog/turso-is-joining-supabase
- Limbo 立项公告:https://turso.tech/blog/introducing-limbo-a-complete-rewrite-of-sqlite-in-rust
文章评论