13

mongoデータベースにクエリを実行するときに、ドキュメント内のほぼすべてのデータを除外することには、多くのオーバーヘッドがありますか?

たとえば、field1field2のみが必要な場合、ドキュメント構造が次のコレクションの場合:

{
    "field1" : 1
    "field2" : true
    "field3" : ["big","array",...]
    "field4" : ["another","big","array",...]
}

私はより多くの恩恵を受けるでしょうか:

  1. field1とfield2のみを含むこのコレクションと一緒に別のコレクションを作成する、または
  2. 包含/除外パラメーターを使用して元のドキュメントで.find()を使用する

注:同じデータを2回保存することの非効率性は、データのクエリの効率性ほど私にとっては問題ではありません。

どうもありがとう!

4

1 に答える 1

8

射影は、SQLで明示的に列名を使用するのと多少似ているため、少量のデータを返すと、大量のデータ(完全なドキュメント)を返すよりもオーバーヘッドが発生するかどうかを尋ねるのは少し直感に反するようです。

したがって、ドキュメントを検索する必要があります(.find()の方法に応じて、高速または低速になる場合があります)が、すべてのフィールド(完全なドキュメント)ではなく、ドキュメントの最初の2つのフィールドのみを返すと、低速ではなく高速になります。

2番目のコレクションがあると、コレクションがRAMに収まることが心配な場合にのみメリットがあります。複製コレクション内のドキュメントがはるかに小さい場合、それらはおそらくより少ない量の合計RAMに収まる可能性があり、ページをディスクからスワップインする必要がある可能性が低くなります。ただし、元のコレクションだけでなくこのコレクションにも書き込む場合は、元のコレクションだけの場合よりも多くのデータをRAMに保存する必要があります。

したがって、複雑な詳細は個々の設定によって異なりますが、一般的な答えはおそらく2です。プロジェクションを使用し、必要な2つのフィールドのみを返すことでより多くのメリットが得られます。

于 2012-12-16T12:10:59.490 に答える