Skip to content
Latchkey

PostgreSQL vs MongoDB: リレーショナルかドキュメントか?

PostgreSQLは優れたJSONサポートを持つリレーショナルデータベースであり、MongoDBは柔軟でスキーマの軽いJSONライクなドキュメントを中心に構築されたドキュメントデータベースです。

PostgreSQLはリレーショナルなテーブルを格納しますが、インデックス付きのJSONBを介して半構造化データもうまく扱えるため、joinやconstraintを保ちながら多くのドキュメントのユースケースをカバーできます。MongoDBはBSONドキュメントを格納し、shardingによって水平スケールし、急速に進化するスキーマや非正規化された読み取りパターンに適しています。本当の問題は、データが本質的にリレーショナルかドキュメント型かということです。

PostgreSQLMongoDB
モデルリレーショナル(+ JSONB)ドキュメント(BSON)
スキーマ定義済み、柔軟なJSONデフォルトで柔軟
Joinfirst-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を選びます。

関連ガイド