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 里提到的 postgres MCP Server、../ai-agent-guide/openclaw.md 的数据库例子,就是给模型挂上数据库的工具。

2. 核心概念

概念含义
嵌入式 (Embedded)数据库引擎跑在你的进程里,不是独立服务
无服务器 / Serverless没有”数据库服务进程”要起,没有网络监听
单文件整库 = 一个文件(.db/.sqlite),备份=拷文件
ACID原子性/一致性/隔离性/持久性,事务可靠
libSQLSQLite 的开源分支(2022),为边缘/复制增强(异步、副本等)
复制 / 边缘 (Edge)同一份数据在多地有副本,就近读写、可离线

3. 工作原理:嵌入式 vs Client-Server

SQLite(嵌入式):
  你的程序 ──直接 open 文件──▶ mydata.db(同进程内读写,无网络)

Client-Server(PostgreSQL/MySQL):
  你的程序 ──网络──▶ 数据库服务进程(独立跑着)──▶ 数据文件
维度SQLitePostgreSQL / 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. 延伸阅读 / 关联概念