夜航的目标很明确:让人在一台最便宜的小服务器上,一条命令就跑起来一个 RSS 阅读器。不要 Redis,不要 Postgres,不要消息队列。所以从第一天起我就选了 SQLite。
几个必开的设置
SQLite 默认配置不适合 Web 服务,下面这几行几乎是标配:
PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL;
PRAGMA busy_timeout = 5000;
PRAGMA foreign_keys = ON;
WAL 模式让读写互不阻塞,这是它能撑住“抓取任务在后台写、用户在前台读”的关键。
备份其实很简单
很多人担心单文件不安全。夜航内置了一个定时任务,用 VACUUM INTO 每天生成一份一致性的备份,保留最近七天。恢复就是把文件拷回去。比起运维一套数据库,这个方案出错的地方少太多了。
它的边界
我给自己划了线:单用户或几十人的小团体,写入并发不高。真有一天需要多实例横向扩展,那说明夜航已经不是现在的夜航了,到时候再换也不晚。
不到 40MB 的内存占用,一年没出过一次数据问题。对一个个人项目来说,这就是够用。