0

私はmongoDbが初めてで、大量のデータを計算するためにmap reduceを使用する予定です。ご存知のように、基準に一致するマップ機能があり、特定のフィールドに必要なデータを出力します。私のマップ関数には、複数のエミットがあります。現在、1 つのドキュメントから 50 のフィールドが出力されています。つまり、コレクション内の 1 つのドキュメントから一時テーブル内の 40 ドキュメントに爆発します。したがって、処理するドキュメントが 100 万個ある場合、map 関数の終わりまでに一時テーブルに 100 万 * 40 個のドキュメントが格納されます。

次のステップは、このコレクションをソートすることです。(マップの並べ替えパラメーターを使用していませんが、役に立ちますか?)

map 関数を 2 つに分割することを考えました….しかし、もう 1 つの問題がありました… map 関数の実行中に、たまたまドキュメント データ全体をスキップするという例外に遭遇した場合 (つまり、そのドキュメントからデータを出力しないように)、分割した場合できないだろう…。

mongoDB.org で、次のようなコメントを見つけました...「並べ替えを使用して MR ジョブを実行すると、MR の最初の段階で 23% に達するまでに 1.5 日かかります。並べ替えなしで MR ジョブを実行すると、約 24 日かかります。 -すべてのジョブで 36 時間。また、jsMode をオフにすると、MR が 2 倍高速化されます (ソートをオフにする前に)"

並べ替えを有効にすると役に立ちますか? またはjsmodeをオフにすると役立ちますか?私はmongo 2.0.5を使用しています

なにか提案を?

前もって感謝します.G

4

1 に答える 1

1

次のステップは、このコレクションを並べ替えることです。(マップのソートパラメータを使用していませんが、役に立ちますか?)

意味がわからない、MRにはソートパラメータがなく、着信クエリのみにソートパラメータがあります。着信クエリの並べ替えパラメータは、入力されるデータのみを並べ替えます。通常は並べ替える必要のない着信並べ替えを使用して最終出力を並べ替えることを回避する特定の動作を探している場合を除きます。

このMRをどのように使用する予定ですか。明らかに、リアルタイムではないので、サーバーを強制終了するだけなので、Imaは、データを実行して希望どおりにフォーマットするバックグラウンドプロセスであると推測します。増分MRを調べて、1日を通してデルタ更新を実行し、任意の時点で使用されるリソースの量を制限することをお勧めします。

したがって、処理するドキュメントが100万個ある場合、マップ関数の終わりまでに一時テーブルに100万*40個のドキュメントがあります。

複数回放出していますか?そうでない場合、一時テーブルには、次の形式のドキュメントを含む行ごとに1つのキーのみが必要です。

{_id:emitted_id[{//発行する各ドキュメント}]}

これが表示されます:http://kylebanker.com/blog/2009/12/mongodb-map-reduce-basics/

またはjsmodeをオフにすると役立ちますか?私はmongo2.0.5を使用しています

jsmodeをオフにしても重要なことは何も起こらない可能性が高く、その結果はさまざまです。

于 2012-08-10T07:50:42.230 に答える