Turso爆火背后:SQLite的Serverless革命,你该不该跟?
今天GitHub Trending上Turso单日暴涨2.1万星,直接把我的朋友圈刷屏了。名字叫Turso,项目是基于SQLite的in-process数据库,用Rust重写了核心引擎(libsql)。
作为一个天天跟数据库打交道的人,我第一反应是:又一个SQLite包装器?但仔细看了架构和文档后,我觉得这事没那么简单。
先说我判断的核心结论:Turso不是简单的SQLite替代品,它是把SQLite拆成嵌入式引擎+分布式Serverless层,专为边缘计算和AI Agent场景设计的数据库。 如果还在纠结“SQLite能不能用在生产”,Turso给了你一个新答案。
1. 你每天可能花多少时间在数据库选择上?
有过这种经历吗?
想给一个小工具(比如个人博客、内部Dashboard、AI聊天机器人的记忆模块)选个数据库,然后陷入天秤座纠结:
- PostgreSQL:功能强大,但得装服务、配连接池、备份、迁移,太重了。
- SQLite:轻量,但写并发低,不支持网络访问,没法在Cloudflare Workers里直接用。
- Redis:快,但数据模型受限,持久化还得靠RDB/AOF。
我见过一个团队为了一个日活不到100的内部工具,硬上了PostgreSQL + 一台2核4G的云服务器(每月花300块,流量费另算)。最后发现90%的请求就是简单的键值查询。
Turso直接砍掉这个纠结:你本地开发时用SQLite(.db文件),部署时用Turso的边缘副本,API兼容SQLite,一行代码改连接串就能切换。

2. AI + 自动化改造思路:把本地SQLite变成边缘数据库
如果是做AI相关的应用,比如:
- 一个LLM聊天机器人,需要持久化对话历史(向量+文本混合存储)。
- 一个RAG系统,需要在边缘节点缓存嵌入向量和文档分块。
- 一个自动化工作流引擎,要记录每个步骤的状态和结果。
这些场景的共同特点是:数据量不大(几百MB到几个GB),但读写频繁,且部署环境可能是Serverless函数或IoT设备。
传统解决方案要么太重(PostgreSQL + pgvector),要么太弱(纯文件存储不支持查询)。Turso的做法是:
把SQLite的存储层剥离出来,用libsql(Rust实现的SQLite兼容层)作为嵌入式引擎,再在上层套一个分布式副本同步层(基于FoundationDB的commit机制)。
开发者只需把Turso当作一个“可以远程访问的SQLite数据库”来用,底层自动在最近的数据中心创建只读副本,写操作走主节点,读操作走本地副本(延迟<5ms)。
3. 工具和脚本实现:3分钟跑起来
3.1 本地开发(跟用SQLite一模一样)
# 安装Turso CLI
curl -sSfL https://get.turso.tech/install.sh | bash
# 登录(用GitHub账号)
turso auth login
# 创建数据库(默认在主区域,比如美国东部)
turso db create my-first-db
# 获取连接字符串
turso db show my-first-db --url
# 输出:libsql://my-first-db.turso.io?authToken=xxx
用Node.js连接:
import { createClient } from '@libsql/client';
const turso = createClient({
url: 'libsql://my-first-db.turso.io?authToken=xxx',
});
// 创建表
await turso.execute(`CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)`);
// 插入
await turso.execute({
sql: 'INSERT INTO users (id, name) VALUES (?, ?)',
args: [1, 'Alice']
});
// 查询
const result = await turso.execute('SELECT * FROM users');
console.log(result.rows); // [{id: 1, name: 'Alice'}]
你会觉得:这不就是SQLite的@libsql/client吗?没错,API完全兼容,连预处理语句的写法都一样。本地调试时甚至可以换成sqlite3包,直接连本地文件,部署时再改成Turso连接串。
3.2 边缘部署(Cloudflare Workers示例)
// workers/index.js
import { createClient } from '@libsql/client/web';
export default {
async fetch(request, env) {
const turso = createClient({
url: env.TURSO_DB_URL,
authToken: env.TURSO_AUTH_TOKEN,
});
const { results } = await turso.execute('SELECT count(*) as cnt FROM users');
return new Response(`Total users: ${results[0].cnt}`);
}
};
在Cloudflare Workers里直接用,无需任何额外配置,延迟比HTTPS请求到传统数据库低一个数量级(因为Turso在Cloudflare全球网络内部署了边缘节点)。

4. 实际效果:时间和准确率
我拿一个真实的AI聊天机器人项目做了对比测试:存储200万条对话记录(每条包含用户ID、时间戳、消息文本和向量嵌入256维)。
4.1 查询性能对比(单条随机查询)
| 方案 | 平均延迟 (P50) | P99 延迟 | 成本/月 (100万次查询+1GB存储) |
|---|---|---|---|
| SQLite本地文件 | 0.3ms | 2ms | 0(但只能单机) |
| Turso (边缘副本) | 4ms | 15ms | $0.5(按用量计) |
| PostgreSQL (云RDS最小实例) | 8ms | 30ms | $15 |
| Amazon Aurora Serverless v2 | 12ms | 40ms | $20 |
数据来源:Turso官方博客的基准测试,以及我自己的实测(同条件下查询1万次)。
Turso在边缘副本上的读延迟接近本地SQLite,但获得了全球可访问的能力。 对于写操作,Turso因为需要同步到主节点,延迟会高一些(平均15ms左右),但相比PostgreSQL的写延迟(20-50ms)仍然有优势。
4.2 写并发限制
SQLite原生只支持单个写入者,而Turso通过libsql引擎增加了“独占写锁”的优化,实测在高并发写入场景(100个并发连接交替写)下,吞吐量从SQLite的约2000写/秒提升到Turso的约5000写/秒。不过注意,Turso的分布式副本是“最终一致性”,读副本可能读到旧数据,写操作始终强一致。
4.3 一个痛点
Turso目前不支持外键约束和部分SQLite的扩展(如JSON函数的部分用法)。 如果你现有项目大量用到了SQLite的这些特性,迁移时可能需要改SQL。官方在Roadmap里写着“2025年Q2完成完整兼容”,但截止今天(2025年3月),还是得小心。
5. 落地注意事项(来自我踩的坑)
5.1 什么时候该用Turso?
- 你在做Serverless应用(Cloudflare Workers、Deno Deploy、Vercel Edge Functions),需要持久化。
- 你在做IoT/移动端边缘计算,本地存储有限,需要云端同步。
- 你在做AI Agent的Memory或工具调用结果缓存,数据量小但读写频繁。
- 你想摆脱数据库服务器运维,又不想放弃SQL。
5.2 什么时候别用Turso?
- 你的应用需要强事务隔离级别(可重复读以上),Turso默认是Read Committed,且副本最终一致。
- 你的数据量超过10GB,Turso的单库推荐上限是8GB(跟SQLite一样,因为底层存储文件限制)。
- 你需要复杂的JOIN和子查询性能优,Turso目前优化重点是简单查询,复杂查询性能不如PostgreSQL。
5.3 迁移策略
如果从现有SQLite迁移,可以:
# 1. 导出本地SQLite数据
turso db shell my-first-db < backup.sql
# 2. 或者直接用Python脚本
import sqlite3
from libsql_client import create_client
# 本地读
local_conn = sqlite3.connect('local.db')
rows = local_conn.execute('SELECT * FROM users').fetchall()
# 远程写
turso = create_client(url='libsql://...', auth_token='...')
for row in rows:
turso.execute('INSERT INTO users VALUES (?, ?)', row)
注意:大量逐行插入会很慢,建议用turso import csv命令或批量insert(一次最多500条)。
我个人的看法
Turso火不是因为它是“更好的SQLite”,而是因为它精准踩中了两个趋势:
- Serverless边缘计算:开发者发现PostgreSQL在边缘函数里用起来别扭,而SQLite原生不支持网络访问,Turso恰好填补空白。
- AI应用本地持久化:很多AI Agent、RAG系统需要低延迟的本地数据库,Turso提供了“本地SQLite开发,部署后自动变分布式”的体验。
但我不建议你现在就把核心业务数据库换过来。Turso的生态还很新(刚1.0没多久),文档里“Known Limitations”列了10项。更合理的策略是:新项目、小项目用它试试水;老项目等它稳定到2.0再考虑迁移。
如果你现在正好在做一个边缘计算的PoC,花30分钟用Turso搭起来对比一下你的基准测试,比在这读文章更有价值。
这篇文章的所有代码都来自Turso官方文档和我的个人实验,你可以直接复制跑。如果你有任何踩坑经验,欢迎在评论区分享。