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

MongoDBアグリゲーションを高速化

    現在、クエリのパフォーマンスを向上させるために集約フレームワークが実行できることにはいくつかの制限がありますが、次の方法で支援できます。

    db.my_collection.aggregate([
        { "$sort" : { "LOG_TYPE" : 1 } },
        { "$group" :{ 
            "_id": "$LOG_TYPE",
            "COUNT": { "$sum":1 }
        }}
    ])
    

    LOG_TYPEに並べ替えを追加すると、オプティマイザーがLOG_TYPEのインデックスを使用して、ドキュメントを順番に取得するように「強制」されます。これにより、いくつかの点でパフォーマンスが向上しますが、使用しているバージョンによって異なります。

    実際のデータでは、$ groupステージに入るデータを並べ替えると、合計の累積効率が向上します。 $sortでシャードキーインデックスを使用するさまざまなクエリプランを確認できます。これにより実際のパフォーマンスが向上するかどうかは、各「バケット」の値の数によって異なります。一般に、LOG_TYPEの値が7つしかないため、シャードキーが非常に貧弱になりますが、次のコードが最適化された集計よりもはるかに高速です:

    db.my_collection.distinct("LOG_TYPE").forEach(function(lt) {
       print(db.my_collection.count({"LOG_TYPE":lt});
    });
    


    1. javascriptを介してmongodbに設定されたセカンダリレプリカから読み取る

    2. node.jsmoongodb2つの検索

    3. MongoDBで重複レコードを検索する

    4. NoSqlデータベースで顧客>注文>注文>製品をどのようにモデル化しますか?