SQLite Is All You Need
a day ago
- #Performance
- #SQLite
- #Backend Development
- SQLite 在 WAL 模式下,能用一个 343MB 的单文件处理包含 5 万用户、100 万帖子和数百万次互动的社交网络。
- 最复杂的查询(带计数的时间线连接查询)在笔记本电脑上每秒可处理 3,654 次请求,相当于每天 3.15 亿次请求。
- WAL 模式消除了 SQLITE_BUSY 错误,并允许并发读写,而旧的回滚日志模式则会导致严重的性能下降。
- 局限性包括:由于缓存失效,读取操作在并发写入时扩展性差;只能有一个全局写入器;没有内置故障转移;不适合高写入争用或大规模分析场景。
- 在廉价的 VPS 上,单核仍能每天处理超过 1.1 亿次时间线请求,这使得 SQLite 对大多数应用来说都是可行的。
- 建议:使用 STRICT 表确保类型安全;优先考虑单核速度和足够的内存来容纳数据库;避免使用网络存储;考虑使用专用核心以获得更好的 p99 延迟。
- 开发优势包括:本地数据库即文件;使用隔离数据库进行轻松测试;部署简单;运维开销极小。
- 备份是直接的文件拷贝,而 Litestream 等工具支持持续复制。
- 在轻量级端点上,Bun 与 bun:sqlite 表现更好,但在复杂查询上表现不及 Node 与 better-sqlite3,这强调了根据具体工作负载进行测量的必要性。
- 文章认为,过早使用如 Postgres 这样的复杂数据库进行扩展通常是不必要的;在出现明确的扩展信号之前,SQLite 足以满足大多数项目的需求。