📌 项目地址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

这篇文章对你有帮助吗?

发表回复