Docs Menu

埋め込みデータと参照の比較

効果的なデータモデルは、アプリケーションのニーズをサポートします。 スキーマ設計に関する重要な決定の 1 つは、データを埋め込む、参照を使用するかです。

関連データを単一のドキュメントに埋め込むことができます。 次の例では、contact フィールドとaccess フィールドは埋め込みドキュメントです。

Data model with embedded fields that contain all related information.

埋め込みデータモデルは、頻繁にアクセスされるデータが複数のコレクションに重複するため、多くの場合非正規化されます。

埋め込みデータモデルを使用すると、アプリケーションは同じデータベースレコード内の関連情報をクエリできます。その結果、アプリケーションでは一般的な操作を完了するために必要なクエリ数と更新数が少なくなります。

埋め込みデータモデルは、以下のシナリオで使用します。

埋め込みには、以下のようなメリットがあります。

  • 読み取り操作のパフォーマンス向上

  • 1 回のデータベース操作で関連データを取得できる

  • 1 回のアトミックな書き込み操作で関連データを更新できる

埋め込みドキュメント内のデータをクエリするには、ドット表記を使用します。 配列と埋め込みドキュメント内のデータのクエリの例については、以下を参照してください。

注意

ドキュメント サイズの制限

MongoDBのドキュメントは 16 メガバイト未満である必要があります。

大規模なバイナリ データの場合は、 GridFS を検討してください。

参照とは、あるドキュメントから別のドキュメントへのリンク(参照と呼ばれます)を含めることで、データ間の関係を保存するものです。 次の例では、 contactドキュメントとaccessドキュメントにuserドキュメントへの参照が含まれています。

Data model using references to link documents. Both the ``contact`` document and the ``access`` document contain a reference to the ``user`` document.

参照により、データが複数のコレクションに分割され、重複が行われないため、正規化されたデータモデルが作成されます。

次のシナリオで関連データをリンクするには、参照を使用します。

  • 埋め込みを使用するとデータの重複が発生しますが、重複の影響を考慮するのに十分な読み取りパフォーマンス上の利点は得られません。 たとえば、埋め込みデータが頻繁に変更される場合。

  • 複雑な多対多の関係または大規模な階層データセットを表す必要があります。

  • 関連エンティティは、単独で頻繁にクエリされます。たとえば、employee データと department データがある場合、 employee ドキュメントに部門情報を埋め込みたいと考えるかもしれません。ただし、部門リストを頻繁に検索する場合は、リファレンス付きで employee コレクションにリンクされた別の department コレクションを使用するとアプリケーションのパフォーマンスが最大限に高まります。

複数のコレクション内の正規化されたデータをクエリするために、MongoDB は次の集計ステージを提供します。

正規化されたデータモデルの例については、「ドキュメント参照を使用した 1 対多の関係のモデル化 」を参照してください。

さまざまなツリーモデルの例については、「モデルツリー構造 」を参照してください。

MongoDB を使用したデータ モデリングの詳細については、 「MongoDB アプリケーション モダナイゼーション ガイド」をダウンロードしてください。

ダウンロードには、次のリソースが含まれています。

  • MongoDB を使用したデータ モデリングの方法論に関するプレゼンテーション

  • RDBMS データモデルから MongoDB に移行するためのベストプラクティスと考慮事項を説明したホワイトペーパー

  • MongoDB のスキーマを RDBMS の同等のスキーマで参照

  • アプリケーション モダナイゼーション スコアカード