Skip to content
Latchkey

SQLite vs PostgreSQL: 組み込みかサーバーか?

SQLiteは単一のファイルに格納される組み込みでサーバーレスなデータベースであり、PostgreSQLは並行性とスケールのために構築された本格的なクライアントサーバー型データベースです。

SQLiteはサーバーなしでin-processに動作するため、ローカルアプリ、テスト、edge、単一ファイルで十分な小規模ワークロードに理想的です。PostgreSQLは豊富な並行性、role、レプリケーション、高度なSQLを備えたサーバーとして動作し、マルチユーザーの本番システムに適しています。両者は正面から競合するのではなく異なるスケールに対応します。SQLiteは組み込みのシンプルさに、Postgresは並行的な本番環境にです。

SQLitePostgreSQL
アーキテクチャ組み込み(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に対してテストすることを推奨します。

関連ガイド