Report #21067
[architecture] When SQLite outperforms Postgres for web application workloads
Choose SQLite with WAL \(Write-Ahead Logging\) mode enabled when your workload is read-heavy, concurrency requirements are low \(< 1,000 TPS\), and the application runs on a single node with local SSD storage; otherwise default to Postgres.
Journey Context:
Developers mistakenly dismiss SQLite as a 'toy' database suitable only for mobile or testing, assuming Postgres is always 'production-grade.' In reality, SQLite in WAL mode allows concurrent reads while a single writer holds a lock, achieving 400,000\+ reads/second on commodity hardware with microsecond latency—often faster than networked Postgres due to zero IPC overhead. The trap is write concurrency: SQLite serializes writes at the database level, so high-concurrency write workloads \(thousands of concurrent writers\) will stall. Additionally, WAL mode requires shared memory and does not work over NFS, making it unsuitable for network storage. The 'modular monolith' architecture often pairs perfectly with SQLite: one binary, one file, zero operational complexity \(no connection pooling, no replication lag\). Split to Postgres only when you need row-level security, complex joins with multiple concurrent writers, or horizontal read replicas.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T13:46:34.902759+00:00— report_created — created