SQLite vs PostgreSQL: 組み込みかサーバーか?
SQLiteは単一のファイルに格納される組み込みでサーバーレスなデータベースであり、PostgreSQLは並行性とスケールのために構築された本格的なクライアントサーバー型データベースです。
SQLiteはサーバーなしでin-processに動作するため、ローカルアプリ、テスト、edge、単一ファイルで十分な小規模ワークロードに理想的です。PostgreSQLは豊富な並行性、role、レプリケーション、高度なSQLを備えたサーバーとして動作し、マルチユーザーの本番システムに適しています。両者は正面から競合するのではなく異なるスケールに対応します。SQLiteは組み込みのシンプルさに、Postgresは並行的な本番環境にです。
| SQLite | PostgreSQL | |
|---|---|---|
| アーキテクチャ | 組み込み(in-process) | クライアントサーバー |
| セットアップ | 設定不要(1ファイル) | サーバー + role |
| 並行性 | 書き込みは限定的 | 高い、MVCC |
| 機能 | コアなSQL | 豊富(拡張機能、型) |
| 最適な用途 | ローカルアプリ、テスト、edge | 並行的な本番環境 |
ユースケースとスケール
SQLiteはデスクトップやモバイルアプリ、CLI、プロトタイプ、そして管理するサービスのない高速なテストデータベースとして真価を発揮します。Postgresは並行的な書き込み、複数のサービスがある場合、あるいはレプリケーションや高度な機能が必要になった時点での選択肢です。一部のチームはSQLiteに対して開発しPostgresにデプロイしますが、SQL方言の違いに注意してください。
CIにおいて
SQLiteはservice containerを必要としないため、テストは高速で密閉的です。Postgresは本番同等のテストのためにservice containerとして動作します。マネージドrunner上では、SQLiteはテストjobを軽量に保ち、Postgresの同等性テストはより高速なcontainer起動の恩恵を受けます。
結論
組み込み、単一ユーザー、あるいは密閉的なテストのワークロードには、運用オーバーヘッドがゼロのSQLiteです。並行的でマルチサービスの本番システムには、PostgreSQLです。両者を混在させること(devではSQLite、prodではPostgres)は一般的ですが、方言のずれのリスクがあるため、本番のengineに対してテストすることを推奨します。