先说结论
站群是读多写少的系统:1.2 万个站每天被爬虫和访客读,后台一天只写几十次。这种负载,SQLite 完全够用。
选它的四个理由
- 备份就是复制文件:
writable/citycms.db拷走即可,不用 mysqldump - 迁移零成本:换服务器不用装数据库、不用导账号
- 没有连接数问题:PHP-FPM 每个请求开文件,不占连接池
- 调试方便:本地一个文件,客户环境也是同一个文件
什么时候会撞墙
| 场景 | SQLite 表现 |
|---|---|
| 读多写少(本站群) | 很好 |
| 高频写入(每秒几十次) | 写锁排队,容易 database is locked |
| 多台机器共享 | 不支持(文件锁只在本地) |
| 单表千万行 + 复杂聚合 | 慢,需要索引与预计算 |
一个真实的规模参考
- 4 个租户,每租户最多 44,836 个站点位
- 线上实际生成约 1.2 万个城市站
- 单文件数据库,定期 VACUUM
这个量级 SQLite 没问题,因为绝大多数请求是同一批页面的重复读取,而且门户页还有文件缓存。
什么时候该换 MySQL
- 需要多台 Web 服务器
- 后台写入开始排队(客户同时批量生成)
- 数据量或并发超出单机能力
迁移路径:把 Database 配置换掉,SQL 保持标准写法;避免用 SQLite 特有语法(如 INSERT OR REPLACE 要改成标准 upsert)。