データモデル設計
効果的なデータモデルは、アプリケーションのニーズをサポートします。 ドキュメントの構造に関する重要な点は、 を埋め込むか、参照を使用するかです。
埋め込みデータモデル
MongoDB では、関連データを単一の構造またはドキュメントに埋め込むことができます。 これらのスキーマは通常、「非正規化」モデルと呼ばれ、MongoDB の豊富なドキュメントを活用します。 次の図を考えてみましょう。
埋め込みデータモデルを使用すると、アプリケーションは関連する情報を同じデータベースレコードに保存できます。 その結果、アプリケーションでは一般的な操作を完了するために必要なクエリ数と更新数が少なくなる場合があります。
一般に、埋め込みデータモデルは、次の場合に使用します。
エンティティ間に「含む」の関係がある場合。 「 ドキュメントを使用した 1 対 1 の関係のモデル化 」を参照してください。
エンティティ間に1対多の関係がある場合。 これらの関係では、「多数」または子ドキュメントは常に とともに表示されるか、「1 つ」または親ドキュメントに関連して表示されます。 「埋め込みドキュメントによる 1 対多の関係のモデル化 」を参照してください。
一般に、埋め込みにより読み取り操作のパフォーマンスが向上するだけでなく、1 回のデータベース操作で関連データをリクエストして取得する能力も向上します。 埋め込みデータモデルを使用すると、1 回のアトミックな書き込み操作で関連データを更新できます。
埋め込みドキュメント内のデータにアクセスするには、ドット表記を使用して埋め込みドキュメントに「アクセス」します。 配列や埋め込みドキュメント内のデータへのアクセスに関するその他の例については、「配列内のデータのクエリ 」および「 埋め込みドキュメント内のデータのクエリ 」を参照してください。
埋め込みデータモデルとドキュメントのサイズ制限
MongoDB 内のドキュメントは、最大 BSON ドキュメント サイズ より小さくなければなりません。
一括バイナリ データには、 GridFS を検討してください。
正規化されたデータモデル
正規化されたデータモデルは、ドキュメント間の参照を使用して関係を記述します。
一般に、正規化されたデータモデルを使用します。
を使用すると 、データの重複が発生しますが、重複の影響を与えるほどの読み取りパフォーマンス上の利点は得られません。
より複雑な多対多の関係を表します。
を使用して、大規模な階層データセットをモデル化します。
コレクションを結合するために、MongoDB は 集計ステージを提供します。
$lookup
(MongoDB 3.2 以降で利用可能)$graphLookup
(MongoDB 3.4 以降で利用可能)
MongoDB は、コレクション間でデータを結合するための参照も提供します。
正規化されたデータモデルの例については、「ドキュメント参照を使用した 1 対多の関係のモデル化 」を参照してください。
さまざまなツリーモデルの例については、「モデルツリー構造 」を参照してください。
さらに読む
MongoDB を使用したデータ モデリングの詳細については、 「MongoDB アプリケーション モダナイゼーション ガイド」をダウンロードしてください。
ダウンロードには、次のリソースが含まれています。
MongoDB を使用したデータ モデリングの方法論に関するプレゼンテーション
RDBMS データモデルから MongoDB に移行するためのベストプラクティスと考慮事項を説明したホワイトペーパー
MongoDB のスキーマを RDBMS の同等のスキーマで参照
アプリケーション モダナイゼーション スコアカード