これは、MongoDBでよくある質問です。いつ埋め込むか、いつ参照するかです。
しかし、私の場合、これはどういうわけかジレンマのようです。埋め込み可能なリファレンスのあるドキュメントがありますが、ディスクのサイズがかかります。しかし、参考にすると、かなりのパフォーマンスコストがかかります。
これが例です。問題として「詳細」を持つこのメンバーがいるとします。
Member: {
_id: "abc",
detail: {
name: "Stack Overflow",
website: "www.stackoverflow.com"
}
}
このメンバーの詳細をすべてのブログに含めたいのですが、このメンバーが「asdf」を作成すると、表示されるすべてのブログにメンバーの詳細が表示されます。したがって、ブログドキュメントに対して実行できるオプションは2つあります。
まず、メンバーの_idを入力するだけで参照を作成します。
Blog: {
_id: 123,
memberId: "asdf" ---> will be used as reference to query specific member
}
または次に、代わりにメンバーをブログに埋め込みます。
Blog: {
_id: 123,
member: {
_id: "asdf",
detail: {
name: "Stack Overflow",
website: "www.stackoverflow.com"
}
}
}
したがって、最初のオプションでは、パフォーマンスの問題であるメンバーの別のクエリが必要です。ただし、2番目のオプションの方が高速です。クエリを実行する必要があるのは一度だけですが、ブログの数が増えると、埋め込みドキュメント「メンバー」の冗長データ用にディスクが大きくなります。
PS:この例でわかるように、メンバーとブログの関係は1対多であるため、メンバーは多くのブログを持つことができますが、メンバーの詳細変数は同じままです。「名前」と「ウェブサイト」。
この場合、より良い意見はありますか?あなたが3番目の解決策も持っているならそれは素晴らしいでしょう。前に感謝します。