SQLite 用在生产环境到底行不行

「SQLite 只适合做原型」——这个印象已经过时很久了。

WAL 改变了一切

默认的回滚日志模式下,写操作会阻塞所有读操作。开启 WAL 后两者互不干扰:

PRAGMA journal_mode=WAL;
PRAGMA synchronous=NORMAL;
PRAGMA foreign_keys=ON;

对博客这种读多写少的场景,这几乎消除了唯一的性能瓶颈。

它真正的优势是运维成本

维度 SQLite MySQL / PostgreSQL
部署 一个文件 独立进程 + 配置 + 账号
备份 cp blog.db backup.db mysqldump / pg_dump
网络延迟 零(同进程) 每次查询一次往返
内存占用 几 MB 数百 MB 起

一个日均几千 PV 的博客,数据量可能还不到 10 MB。为它单独跑一个数据库进程, 付出的复杂度远大于收益。

什么时候该换掉它

  • 需要多台机器同时同一份数据
  • 单表数据量到了千万级且查询复杂
  • 需要逻辑复制、在线 DDL 这类企业级能力

在此之前,SQLite 都是更划算的选择。