SQLite 其实比你想的能打
每次提到用 SQLite 做服务端存储,总有人第一反应是「那不是玩具吗」。上周做了个压测,结果有点意外。
压测环境
- 单机,8 核
- SSD
- SQLite 3.45,WAL 模式
- 表结构简单:一张主表,三个索引
几个关键配置
PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL;
PRAGMA busy_timeout = 5000;
PRAGMA cache_size = -64000; -- 64MB
WAL 是最重要的一条。默认的 DELETE 模式下读写互斥,一开 WAL,读不阻塞写、写不阻塞读,并发能力立刻上一个台阶。
结果
| 场景 | QPS |
|---|---|
| 纯读(单条主键) | 约 18000 |
| 读写 9:1 | 约 6000 |
| 纯写(批量,每批 100) | 约 8000 |
这个数字对绝大多数「内部系统」「小工具」来说完全够用。而且它没有网络开销,延迟稳定在微秒级。
什么时候别用
- 需要多台机器同时写同一个库
- 写入 QPS 很高且无法批量(单写者模型是硬限制)
- 需要在线扩容、读写分离
适合的场景
反过来说,这些东西用 SQLite 特别舒服:
- 单机部署的 SaaS、内部管理后台
- 桌面应用、CLI 工具的本地存储
- 边缘节点、IoT 网关的数据缓存
- 测试环境(不用起容器,一个文件搞定)
我现在默认先用 SQLite,真到了瓶颈再换。很多时候根本到不了那一步,省下来的是运维成本和「数据库连接池调优」的一堆破事。