sql >> Databasteknik >  >> NoSQL >> MongoDB

Snabba upp MongoDB-aggregation

Det finns för närvarande vissa begränsningar i vad aggregeringsramverket kan göra för att förbättra prestandan för din fråga, men du kan hjälpa den på följande sätt:

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

Genom att lägga till en sortering på LOG_TYPE kommer du att "tvinga" optimeraren att använda ett index på LOG_TYPE för att få ordning på dokumenten. Detta kommer att förbättra prestandan på flera sätt, men olika beroende på vilken version som används.

På riktiga data om du har sorterad data som kommer in i $group-stadiet, kommer det att förbättra effektiviteten i ackumuleringen av totalerna. Du kan se de olika frågeplanerna där den med $sort kommer att använda shard-nyckelindexet. Förbättringen detta ger i faktisk prestanda kommer att bero på antalet värden i varje "hink" - i allmänhet gör LOG_TYPE med bara sju distinkta värden det till en extremt dålig skärvnyckel, men det betyder att det med stor sannolikhet kommer att vara en mycket snabbare än till och med optimerad aggregering:

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


  1. Hur ställer jag in en primärnyckel i MongoDB?

  2. mongo - kunde inte ansluta till server 127.0.0.1:27017

  3. Skriv stream till mongoDB i Java

  4. Hur man hanterar konfigurationsmallar för dina databaser med ClusterControl