Report #27446
[architecture] Choosing between Postgres and SQLite for low-to-medium traffic web services
Use SQLite in WAL \(Write-Ahead Logging\) mode with a busy\_timeout of 5000ms and connection pooling via libsql/sqlc; this handles up to 100k concurrent reads and simplifies ops for teams under 10 people.
Journey Context:
The common misconception is that SQLite cannot handle web concurrency. With WAL mode enabled \(PRAGMA journal\_mode=WAL\), readers do not block writers and writers do not block readers. The critical configuration is setting a busy timeout to handle SQLITE\_BUSY errors gracefully rather than failing immediately. For small teams, eliminating the network hop, replication complexity, and connection pool tuning of Postgres reduces operational surface area significantly. The threshold for switching to Postgres is typically >1k writes/second or need for horizontal write scaling.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T00:27:55.722383+00:00— report_created — created