MongoはMap/Reduceクエリをサポートしていますが、Hadoopの意味でのマップリデュースではないようです(並行して実行されます)。大規模なMongoデータベースでクエリを実行するための最良の方法は何ですか?別の場所にエクスポートする必要がありますか?
1 に答える
正確に何をする必要があるかに応じて、(Mongo内にとどまっている間の)オプションは次のとおりです。
1)Mongoでmap / reduceを使い続けますが、m/rの目的でいくつかのセカンダリを起動します。これは、マップリデュースを並列化する簡単な方法の1つです。制限はありますが、使用できるのは「out:inline」オプションのみであるため、結果は最大16MB以下である必要があります。これは、まだシャーディングしていない場合にのみ実際に実行可能です。
2)2.2で提供される集約フレームワークを調べます(2.2.0-rc0がリリースされ、MongoHQではかなり安定していることがわかりました)。これはdbレベルでより適切に最適化されており、ほとんどの場合、ぎこちないjavascriptエンジンから解放され、10genが追加したより興味深い機能の1つです。シャーディングされた環境でも機能します。
上記のいずれの場合も、すべての入力データ、中間ステップ、および結果を保持するのに十分なRAM(または非常に高速なディスク)があることを確認する必要があります。そうしないと、IO速度に縛られ、CPUから多くを引き出すことができなくなります。
Mongoの外に出たい場合は、MongoHadoopアダプターを試すことができます。Hadoopは、map / reduceを実行するためのはるかに優れた方法であり、これにより、Mongoデータを入力として使用できるようになります。ただし、これは操作が複雑になる可能性があり、これは多大な労力または脆弱性を意味します。