0

どうやら、MapReduceクエリは、これこの記事によると、MongoDBで実行できる最も遅いことの1つです。

  1. データセットが大きい場合は、データセット全体をクライアントに送信してそこで処理するのではなく、MapReduceを実行する方がよいのではないでしょうか。

  2. MapReduceクエリはデータベースをロックし、他のリクエストへの応答を停止しますか?

  3. MapReduceは本当に論理的で理解しやすいと思いますが、バージョン2.1のAggregationFrameworkは少し圧倒されているように見えます。パフォーマンスの高いMapReduce機能がないことに対するこのMongoDBの応答、したがってMapReduceから完全に離れることを提案していますか?

4

1 に答える 1

1
  1. 「大」の定義にもよりますが、map-reduceを実行することを選択します(プライマリがブロックされないように、セカンダリで)

  2. Map-reduceジョブは、多くの短期間のロックを必要とします。

    2.1。彼らはデータを読むときに読み取りロックを取ります、これは何もブロックしません。

    2.2。データを書き込むときに(一時または最終収集に)書き込みロックを取得します。これにより、他の操作がブロックされます。

    2.3。JavaScriptを実行する必要があるときはいつでもJSロックを取得します。map関数とreduce関数はjavascriptにあるため、これらは常に実行されます。マップフェーズの一般的なシーケンスは次のとおりです。「読み取りロックの取得、入力コレクションからのドキュメントのフェッチ、読み取りロックの解放、jsロックの取得、そのドキュメントへのマップ関数の適用、jsロックの解放、書き込みロックの取得、一時コレクションへのエントリの書き込み、解放書き込みロック」。

  3. はい、map-reduceの基本的な考え方は単純です。しかし、集約パイプラインは単純だと思います。たぶんもっと簡単です。「このデータを取得し、この変換の配列を適用します。結果を取得します」。もっと簡単なことは何ですか?

于 2012-06-26T04:45:59.647 に答える