← 回到手记
代码

SQLite:一个文件,装下一个小站

没有独立数据库进程,没有连接池要调,一个文件就是整个博客。小站选 SQLite,不是将就,是清醒。

这是本站的真实技术选型:整个博客的数据,就躺在服务器上的一个 .sqlite 文件里。

为什么是 SQLite

写个人网站时,很容易一上来就装 MySQL、配 Redis,仿佛不这样就不算"正规"。但对一个访问量不大的博客来说,SQLite 的优点非常实际:

  • 零运维:没有数据库进程,不存在"数据库挂了"这回事,它跟着应用一起活着。
  • 备份即拷贝:定时任务把一个文件复制走,备份就完成了。
  • 性能足够:单机单应用的读写,SQLite 毫无压力;WAL 模式下读写还能并发。

一个朴素的备份脚本

思路大致就是这么几行(路径换成了示意):

import shutil, sqlite3, datetime

src = "/path/to/blog.sqlite"
dst = f"/path/to/backups/blog-{datetime.date.today()}.sqlite"

# 导出一份一致的快照(目标文件不能已存在)
with sqlite3.connect(src) as db:
    db.execute("VACUUM INTO ?", (dst,))
shutil.copymode(src, dst)

VACUUM INTO 会导出一份整理过的完整副本,比直接拷贝文件更稳,备份体积也更小。

什么时候该换

SQLite 不适合所有场景。等到需要多机部署、大量并发写入、或者多个应用共享数据时,再换 PostgreSQL 不迟。在需要之前先不复杂化,这本身就是一个技术决定。

小站最大的风险从来不是数据库不够强,而是没人写、没人看。先把字写起来,其他的都可以以后再说。

✳

谢谢你读到这里。