2

そのトピックに関する多くのドキュメント、Q&A などを読みました (埋め込みまたは参照を使用するため)。1つまたは別のアプローチを使用する必要がある理由を理解していますが、誰かが同様のケースについて話し合っている(尋ねられている)とは思えません。

私は 2 つの (AおよびB) エンティティを持っており、それらの間の関係は ONE_TO_MANY (A多数に属している可能性がありBます) であり、(非正規化アプローチ) を使用でき、問題ありません (embed明確に理解しています)。使用、多くのBドキュメント、Aドキュメント フィールド ? 変更とは、 で置き換えることを意味するのではなくAA'正確Aなレコードにいくつかの変更を加えることを意味します。これは、(場合によっては)既にバージョンが存在するすべてのドキュメントにそのembedような変更を適用する必要があることを意味します。BA

ここの説明に基づいてhttp://docs.mongodb.org/manual/tutorial/model-embedded-one-to-many-relationships-between-documents/#data-modeling-example-one-to-many

What If later we would like to change used in many documents address:name field ? 
What If we need the list of available addresses in the system ? 

その操作は MongoDb でどれくらい速く行われますか?

4

3 に答える 3

0

スピードについてもう少しアドバイスをします。

多くのドキュメントに埋め込まれているAというサブドキュメントがあり、Aのインスタンスを変更したい場合...

  • 変更によってドキュメントが大きくなりすぎないように注意してください。Aが大きくなりすぎると、Mongoがドキュメントをメモリ内に移動するように強制されるため、パフォーマンスが低下します。

  • それは明らかにあなたが持っている埋め込みインスタンスの数に依存します。持っているほど遅くなります。

  • サブドキュメントをどのように照合するかによって異なります。インデックスのないAを見つけた場合、遅くなります。範囲演算子を使用してそれを識別する場合、速度は遅くなります。

  • ドキュメントのサイズが速度に影響を与える可能性が高いとすでに述べた人がいます。

リンクするか埋め込むかについて私が聞いた最高のアドバイスはこれでした...エンティティ(この場合はA)が変更可能である場合...頻繁に変更/変更される場合...リンクし、埋め込まないでくださいそれ。

于 2013-02-24T19:15:34.883 に答える
0

これは、主に使用される操作に基づいています。大量のドキュメントを挿入して選択していて、たとえば月に一度、ネストされたサブドキュメントを多数変更する必要がある可能性がある場合は、A内部に保存するBことをお勧めします。それが mongodb の本来の姿です。1 つのドキュメントを選択するだけで、別のドキュメントに結合する必要がなくなり、更新が遅くなり、問題なく使用できるようになるため、多くの時間を節約できます。

于 2013-02-24T07:26:27.687 に答える
0

更新操作の速度は、明らかにデータの量に依存します。

埋め込みドキュメントまたは参照を使用するかどうかに関するその他の考慮事項は、1 つのドキュメントのデータ量が 16 MB を超えるかどうかです。それは多くのドキュメントの心です。

ただし、場合によっては、特にドキュメントが他の場所で使用/参照されている場合に、ドキュメント全体を非正規化しても意味がありません。

ドキュメントを例にとると、User通常、ユーザーを参照する必要がある各コレクションのすべてのユーザー属性を非正規化することはありません。代わりに、[非正規化されたユーザーの詳細で] ユーザーを参照します。

明らかに、参照されるユーザーが変更されたときに、追加の各非正規化値 (監査でない限り) を更新する必要がありますが、呼び出し元を待たせるのではなく、処理するバックグラウンド プロセスの更新をキューに入れることができます。

于 2013-02-24T12:20:22.003 に答える