MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Accelera l'aggregazione di MongoDB

Al momento ci sono alcune limitazioni in ciò che il framework di aggregazione può fare per migliorare le prestazioni della tua query, ma puoi aiutarlo nel modo seguente:

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

Aggiungendo un ordinamento su LOG_TYPE si "forza" l'ottimizzatore a utilizzare un indice su LOG_TYPE per mettere in ordine i documenti. Ciò migliorerà le prestazioni in diversi modi, ma in modo diverso a seconda della versione utilizzata.

Su dati reali, se i dati che entrano nella fase a gironi di $ sono ordinati, migliorerà l'efficienza dell'accumulo dei totali. Puoi vedere i diversi piani di query in cui con $sort utilizzerà l'indice della chiave shard. Il miglioramento che questo fornisce nelle prestazioni effettive dipenderà dal numero di valori in ciascun "bucket" - in generale LOG_TYPE avendo solo sette valori distinti lo rende una chiave shard estremamente scarsa, ma significa che è molto probabile che il codice seguente sarà un molto più veloce anche dell'aggregazione ottimizzata:

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