SQLite本番運用、やってみた
「SQLiteは開発用でしょ?本番にはPostgreSQLかMySQL使うでしょ?」——この常識、実は2026年にはもう通用しない。僕は実際に月間50万PVのWebサービスでSQLiteを1年間本番運用した。その全記録を晒す。
SQLiteが本番で使える理由
SQLiteの進化を舐めてはいけない。WALモード(Write-Ahead Logging)の導入で、読み取りの並行性が劇的に向上した。
-- WALモードを有効化
PRAGMA journal_mode=WAL;
-- 推奨設定
PRAGMA busy_timeout=5000;
PRAGMA synchronous=NORMAL;
PRAGMA cache_size=-64000; -- 64MB
PRAGMA foreign_keys=ON;
この設定で、読み取りは完全に並行実行される。書き込みもWALのおかげで読み取りをブロックしない。ほとんどのWebアプリは「読み取り多数・書き込み少数」だから、これで十分。
1年間の運用データ
月間50万PV、DBサイズ約2GB、テーブル数35。サーバーはHetznerの月額€7のVPS。これで平均レスポンスタイム12ms。PostgreSQLで同じアプリを動かしたら45msだった。ネットワークラウンドトリップがないSQLiteの強み。
障害件数:ゼロ。バックアップはLitestreamで S3にリアルタイムレプリケーション。復旧テストも問題なし。
SQLiteの限界が見えた瞬間
書き込みが多いバッチ処理で限界が見えた。1秒間に500以上のINSERTが必要な場面では、WALでも書き込みロックが発生する。あとマルチサーバー構成は基本無理。水平スケーリングしたい場合はPostgreSQLに移行するしかない。
SQLiteを選ぶべき場面
シングルサーバーで完結するサービス、読み取り中心のアプリ、個人開発やスタートアップ初期。これらならSQLite最強は揺るがない。運用コストの低さ(DBサーバー不要、コネクションプーリング不要)は経営的にもデカい。「とりあえずPostgreSQL」の思考停止、そろそろ見直した方がいい。










>_ コメント