📌 项目地址:tursodatabase/turso | ⭐ 20,203 颗星 | 🔧 Rust | 📜 未标注
为什么需要关注 Turso?
SQLite 无处不在——从移动端到浏览器,从小型桌面应用到嵌入式设备。但它有一个长期痛点:写入并发能力弱。默认的 SQLite 以文件锁实现写保护,多个写操作只能串行执行;跨进程场景更是麻烦。同时,SQLite 原生不提供变更数据捕获(CDC)、向量搜索等功能,开发者要额外集成 Kafka、Elasticsearch 等组件。
Turso 的答案是:做一个与 SQLite 完全兼容,但内功增强的数据库引擎。它用 Rust 重写,保留 SQLite 的 SQL 方言、文件格式和 C API,在此之上加入了 MVCC 多版本并发控制(通过 BEGIN CONCURRENT 实现更高的写入吞吐)、CDC、向量支持、异步 I/O(利用 Linux io_uring)、以及多进程 WAL 协调等特性。如果你已经在用 SQLite,Turso 可以平滑替换,同时获得更强的并发能力和现代数据库必需的基础设施。
五分钟快速上手
Turso 提供了命令行工具(CLI)和多种编程语言绑定。下面是 README 中给出的几种启动方式。
1. 安装命令行客户端
在 macOS/Linux 上运行:
curl --proto '=https' --tlsv1.2 -LsSf
https://github.com/tursodatabase/turso/releases/latest/download/turso_cli-installer.sh | sh
之后在终端输入 tursodb 即可启动交互式 Shell:
$ tursodb
首次启动会连接到临时内存数据库,如需持久化,用 .open FILENAME 打开或创建文件。例如:
Turso
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database
turso> CREATE TABLE users (id INT, username TEXT);
turso> INSERT INTO users VALUES (1, 'alice');
turso> INSERT INTO users VALUES (2, 'bob');
turso> SELECT * FROM users;
1|alice
2|bob
这个交互式 Shell 与 sqlite3 非常类似,可以无缝过渡。
2. 在 Rust 项目中使用
添加依赖:
cargo add turso
然后参考以下模式(来自 README 中的示例片段):
use turso::Builder;
let db = Builder::new_local("sqlite.db").build().await?;
// 使用 db.conn() 获取连接,执行 SQL
由于 README 中示例未完整给出,完整的 Rust API 请查阅 bindings/rust 文档 或官方手册。
3. Docker 用户
项目根目录下提供了 Docker 构建脚本:
make docker-cli-build &&
make docker-cli-run
Turso 与 SQLite 的核心差异
| 能力 | SQLite | Turso |
|---|---|---|
| 写入并发 | 单写锁,串行 | BEGIN CONCURRENT + MVCC,允许多个写操作同时进行,吞吐量显著提升 |
| 变更数据捕获 | 无 | 内置 CDC,支持实时跟踪数据库变更 |
| 向量支持 | 无 | 支持精确向量搜索和向量操作 |
| 异步 I/O | 依赖同步系统调用 | Linux 上使用 io_uring,低延迟 |
| 全文搜索 | 内置 FTS5,但功能有限 | 实验性扩展:基于 Tantivy 的高性能全文搜索 |
| 加密 | 需第三方扩展(如 SQLCipher) | 实验性内置“静态加密” |
| 多进程 WAL 协作 | 不支持 | 实验性 .tshm 侧车文件,允许多个进程读写同一个 WAL |
| 增量计算 | 无 | 实验性 DBSP 集成,支持增量视图维护和查询订阅 |
| 跨平台 | 桌面/移动/Web | 除桌面外,还支持浏览器(通过 WebAssembly) |
对于大多数已有 SQLite 应用,Turso 最大的吸引力在于兼容性 + 并发提升。你不需要修改 SQL 语句,也不需迁移数据文件(文件格式兼容),只需更换数据库驱动即可获得 MVCC 带来的写入吞吐优化(尤其适合写入密集但不需要分布式事务的场景)。
需要注意的几件事
- 当前处于 Beta 阶段:README 明确警告“可能含有 bug 和未预期的行为”,生产环境务必备份数据,谨慎使用。
- 实验性功能:加密、全文搜索、多进程 WAL、增量计算等均为实验性,API 或行为可能在未来版本变化。
- 生态成熟度:虽然已有 Go、Java、Python、.NET、JS 等语言绑定,但相比 SQLite 数十年的生态,Turso 的第三方工具、ORM 适配、文档深度仍有差距。
- 非分布式数据库:Turso 依然是单机嵌入式数据库,不具备分布式事务、自动分片等能力。如果你的场景需要云原生弹性,可以关注其云服务(Turso.tech),但开源版本身是本地嵌入式的。
总结
Turso 不是要替代 SQLite,而是补上了 SQLite 最被诟病的短板:写入并发、变更捕获、向量搜索、异步 I/O。对于已经在用 SQLite 的 Rust/C 项目,或者希望快速获得 SQLite 兼容 + MVCC + CDC 的嵌入式场景,Turso 值得跟踪试用。如果你是前端或移动端开发者,也可以尝试通过 WebAssembly 在浏览器中运行它,实现客户端-服务端统一的数据库逻辑。
进一步用法请参阅 Turso Database Manual。