SQLite 与 Turso(分布式 SQLite)
1. 定义
- SQLite:一种嵌入式、无服务器进程的关系型数据库(RDBMS)。整个数据库就是磁盘上的一个文件,你的程序直接打开它读写,不需要另起一个数据库服务进程;事务安全(ACID)。由 D. Richard Hipp 于 2000 年发布,是部署量最大的数据库引擎(Android、iOS、Chrome、WhatsApp、绝大多数 App/浏览器都内嵌)。
- Turso:基于 libSQL(SQLite 的开源分支)的托管式、分布式 SQLite。本质是”把 SQLite 复制到多个边缘节点”,让你在很多地理位置都有就近副本。一句话:SQLite 的”边缘复制 / 云原生”版。
关联:在 Agent 世界里,这类数据库常被当作外部能力接进来——
../ai-agent-guide/mcp.md里提到的postgresMCP Server、../ai-agent-guide/openclaw.md的数据库例子,就是给模型挂上数据库的工具。
2. 核心概念
| 概念 | 含义 |
|---|---|
| 嵌入式 (Embedded) | 数据库引擎跑在你的进程里,不是独立服务 |
| 无服务器 / Serverless | 没有”数据库服务进程”要起,没有网络监听 |
| 单文件 | 整库 = 一个文件(.db/.sqlite),备份=拷文件 |
| ACID | 原子性/一致性/隔离性/持久性,事务可靠 |
| libSQL | SQLite 的开源分支(2022),为边缘/复制增强(异步、副本等) |
| 复制 / 边缘 (Edge) | 同一份数据在多地有副本,就近读写、可离线 |
3. 工作原理:嵌入式 vs Client-Server
SQLite(嵌入式):
你的程序 ──直接 open 文件──▶ mydata.db(同进程内读写,无网络)
Client-Server(PostgreSQL/MySQL):
你的程序 ──网络──▶ 数据库服务进程(独立跑着)──▶ 数据文件
| 维度 | SQLite | PostgreSQL / MySQL(Client-Server) |
|---|---|---|
| 部署 | 库文件直接在应用里 | 要单独起一个数据库服务 |
| 访问 | 进程内函数调用 | 通过网络(TCP)连接 |
| 并发写 | 库级锁,多写是瓶颈 | 设计上支持高并发多写 |
| 适用 | 单机/嵌入式/本地/小中型 | 多服务共享、高并发、大数据量 |
| 运维 | 几乎零 | 要管服务、备份、扩缩容 |
Turso 的加法:在 SQLite 引擎之上加复制层 + 托管——选一个主副本接收写入,多个只读副本同步到各地边缘,应用就近读,延迟低、可离线。
4. 基本用法
# SQLite:标准库自带,零依赖
import sqlite3
conn = sqlite3.connect("mydata.db") # 没有就新建一个文件
conn.execute("CREATE TABLE IF NOT EXISTS user (id INTEGER PRIMARY KEY, name TEXT)")
conn.execute("INSERT INTO user (name) VALUES (?)", ("ava",))
for row in conn.execute("SELECT * FROM user"):
print(row) # (1, 'ava')
conn.commit(); conn.close()# Turso / libSQL:SQL 写法不变,只是连"远程副本"而非本地文件
from libsql_client import Client
db = Client("https://<your-region>.turso.io", auth_token="...")
db.execute("INSERT INTO user (name) VALUES (?)", ("ava",)) # SQL 语义与 SQLite 一致关键点:Turso 不是另一种数据库——你写的还是 SQLite 的 SQL,只是连接目标和底层多了”复制/同步”这一层。
5. 典型工作流 / 何时用
- 用 SQLite:桌面/移动 App 本地存储、浏览器/嵌入式、本地缓存与配置、小中型单机数据、原型与测试。“单机 + 读多写少”几乎总是它。
- 用 Client-Server(PG/MySQL):多服务共享同一库、高并发写入、大数据量、需要高可用/横向扩展。
- 用 Turso:既想要 SQLite 的极简,又想要边缘低延迟 / 离线可用 / 多地副本——SQLite 的简单 + 分布式的便利。
6. 常见误区
- ❌ “SQLite 只能玩具项目用” → 错。浏览器、手机、无数生产软件都跑 SQLite;它不合适的只是”高并发多写”,而非”生产环境”。
- ❌ “Turso 是另一种数据库” → 它是 SQLite(libSQL)+ 复制/托管,SQL 语义不变,别当全新系统学。
- ❌ “SQLite 完全不能并发” → 支持并发读;瓶颈在”写”是库级锁,多写才吃力。
- ❌ “要用数据库就得起服务器” → SQLite 不需要,直接操作文件;只有 client-server 型才要服务进程。
- ❌ “副本越多越好” → 边缘副本提升读延迟/可用性,但写入仍是单主、跨区同步有延迟,要权衡一致性。
7. 延伸阅读 / 关联概念
- MCP — 数据库常作为外部能力经 MCP Server 接给 Agent(如 postgres server);见
../ai-agent-guide/mcp.md - OpenClaw — 其数据库 MCP 例子说明”模型如何自然语言查库”;见
../ai-agent-guide/openclaw.md - Docker — client-server 型数据库(PG/MySQL)常用容器部署;见
../docker/docker.md