云栖笔记

SQLite 在单机服务里的正确用法

很多人觉得 SQLite 只适合做原型,其实单机服务用它非常合适——前提是配置对。

打开 WAL

默认的 journal 模式写操作会阻塞读。执行一次 PRAGMA journal_mode=WAL,读写就能并发,性能差别很明显。

把连接数限制成 1

听起来反直觉,但 SQLite 的写锁是库级别的,多个连接并发写只会互相等待甚至报 database is locked。把连接池设成 1,让排队发生在应用层,反而更稳。

事务里别做网络请求

事务开着的时候整个库是锁住的。在事务里调外部 API,等于让全库等你的网络延迟——高峰期直接雪崩。

VACUUM 的坑

它不能在事务里执行。如果驱动自动开事务,得先显式提交再 VACUUM,否则会报错。

为什么不用 ORM

不是 ORM 不好,而是这个规模下手写 SQL 更可控。SQL 就写在代码旁边,出问题看得见,不用猜框架生成了什么。

← 返回首页