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

Map-MongoDb 2.2、2.4、および2.6でパフォーマンスを低下させる

    MongoDBのMap/Reduceの機能の現在の状態は次のとおりです

    1)Map / Reduceのパフォーマンス制限のほとんどは、MongoDBバージョン2.2のままです。 Map / Reduceエンジンでは、すべてのレコードをBSONからJSONに変換する必要があり、実際の計算は組み込みのJavaScriptエンジン(低速)を使用して実行されます。また、単一のグローバルJavaScriptロックがあり、単一のJavaScriptスレッドのみが許可されます。一度に実行します。

    シャーディングされたクラスターのMap/Reduceにいくつかの段階的な改善がありました。最も注目すべきは、最終的なReduce操作が複数のシャードに分散され、出力も並列にシャーディングされることです。

    MongoDBバージョン2.2でのリアルタイム集計にMap/Reduceをお勧めしません

    2)MongoDB 2.2から、新しいAggregationFrameworkが追加されました。これは、C ++で記述され、MongoDBフレームワークに緊密に統合された集約操作の新しい実装です。

    ほとんどのMap/Reduceジョブは、AggregationFrameworkを使用するように書き直すことができます。これらは通常、より高速に実行され(バージョン2.2ではMap / Reduceと比較して20倍の速度向上が一般的です)、既存のクエリエンジンを最大限に活用し、複数のAggregationコマンドを並行して実行できます。

    リアルタイムの集約要件がある場合、最初に開始するのは集約フレームワークです。集約フレームワークの詳細については、次のリンクを参照してください。

    • http://www.10gen.com/presentations/mongonyc-2012/new-aggregation-framework
    • http://docs.mongodb.org/manual/reference/aggregation/

    3)MongoDBバージョン2.4のMap/Reduceが大幅に改善されました。 SpiderMonkeyJavaScriptエンジンはV8JavaScriptエンジンに置き換えられ、グローバルJavaScriptロックはなくなりました。つまり、複数のMap/Reduceスレッドを同時に実行できます。

    Map / Reduceエンジンは、2つの主な理由から、依然として集約フレームワークよりもかなり低速です。

    • JavaScriptエンジンは解釈されますが、AggregationFrameworkはコンパイルされたC++コードを実行します

    • JavaScriptエンジンでは、調査対象のすべてのドキュメントをBSONからJSONに変換する必要があります。出力をコレクションに保存する場合は、結果セットをJSONからBSONに変換して戻す必要があります

    2.4と2.6の間でMap/Reduceに大きな変更はありません。

    MongoDBバージョン2.4または2.6でリアルタイム集計にMap/Reduceを使用することはまだお勧めしません。

    4)Map / Reduceが本当に必要な場合は、Hadoopアダプターを確認することもできます。詳細はこちら:

    • http://www.10gen.com/presentations/webinar/mongodb-hadoop-taming-elephant-room
    • http://api.mongodb.org/hadoop/MongoDB%2BHadoop+Connector.html
    • http://www.mongodb.org/display/DOCS/Hadoop+Quick+Start



    1. redisは耐久性のあるデータストアですか?

    2. evalなしでredisからオブジェクトを取得しますか?

    3. BasicDBObjectから値を抽出するMongoDB(Java)

    4. リアルタイムのストックアプリケーション用のRedisキーデザイン