sql >> データベース >  >> NoSQL >> MongoDB

MongoDB:forEachとfetch + each

    2つのステートメントは、コアAPIレベルで基本的に同じことを実行します。つまり、カーソルを取得して結果を変換します。ただし、パフォーマンスには「コア」の違いが1つあります。

    • .forEach() カーソルの結果を「一度に1つずつ」変換し、提供されているイテレータ関数を処理します。

    • .fetch() 一方、カーソルから「配列」を「一度に」取得します。これは、1回のヒットですべてが「メモリ内」にあることを意味します。

    したがって、何があっても、クエリのカーソルからフェッチする「コア」操作を実際に実行するのはどちらも「高速」ではありません。ただし、各カーソル反復で「式」を評価しないと、「わずかに速くなる可能性がある」ため、.fetch() ここで「少し」勝つかもしれません。

    もちろん、大きな問題は「すべてがメモリ内にある」ことです。そのため、それを行うことの「オーバーヘッド」を考慮する必要があります。また、.fetch()の時点で _.each() ことわざにあるように、まだ処理されていません。 「ラウンドアバウトで「緩む」可能性が高いブランコで「得る」もの

    特定のケースの完全なベンチマークがなければ、「タイミング」は類似している可能性があります。また、一般的なベンチマークは、使用しているデータセットのサイズを具体的に適用しない限り、ほとんど役に立ちません。

    したがって、一般的なケースが出てきます。「ほぼ同じ」 、ただし、.fetch()を使用する より多くのメモリを消費します 最初からカーソルを繰り返すだけではありません。




    1. ObjectIdの一部でドキュメントを見つける方法は?

    2. ネストされた配列で$unwindを使用した結果?

    3. OracleからMongoDBへのデータ移行

    4. ServiceStack.Redis.Sentinelの使用法