PostgreSQL vs MongoDB: リレーショナルかドキュメントか?
PostgreSQLは優れたJSONサポートを持つリレーショナルデータベースであり、MongoDBは柔軟でスキーマの軽いJSONライクなドキュメントを中心に構築されたドキュメントデータベースです。
PostgreSQLはリレーショナルなテーブルを格納しますが、インデックス付きのJSONBを介して半構造化データもうまく扱えるため、joinやconstraintを保ちながら多くのドキュメントのユースケースをカバーできます。MongoDBはBSONドキュメントを格納し、shardingによって水平スケールし、急速に進化するスキーマや非正規化された読み取りパターンに適しています。本当の問題は、データが本質的にリレーショナルかドキュメント型かということです。
| PostgreSQL | MongoDB | |
|---|---|---|
| モデル | リレーショナル(+ JSONB) | ドキュメント(BSON) |
| スキーマ | 定義済み、柔軟なJSON | デフォルトで柔軟 |
| Join | first-class | 限定的($lookup) |
| 水平スケール | アドオン / パーティショニング | ネイティブなsharding |
| 最適な用途 | リレーショナル + JSONの混在 | 進化するドキュメントデータ |
ユースケースとスケーリング
Postgresは明確なリレーションを持つデータ、エンティティをまたぐトランザクション、レポーティングに適しています。MongoDBはドキュメント中心のデータ、スキーマの高速なイテレーション、容易な水平shardingに適しています。PostgresのJSONBは多くのドキュメントのニーズをカバーするため、別途ドキュメントストアが不要な場合もある点に注意してください。
CIにおいて
どちらもservice containerとして動作します。fixtureを投入し、準備完了を待ちます。ドキュメントのテストは慎重なインデックス設定を必要とすることがよくあります。どちらもマネージドrunner上でクリーンに動作し、より高速なrunnerはcontainerの起動とseed/testのステップを短縮します。
結論
リレーショナルなデータ、トランザクション、レポーティング(必要に応じてJSONも):PostgreSQLです。ドキュメント型で急速に進化するデータとネイティブなshardingが欲しいなら、MongoDBです。多くのチームはPostgresから始めてドキュメントデータベースを追加する代わりにJSONBを使い、ドキュメントと水平スケールが支配的になったときにMongoDBを選びます。