MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Beschleunigen Sie die MongoDB-Aggregation

Derzeit gibt es einige Einschränkungen hinsichtlich der Möglichkeiten des Aggregations-Frameworks zur Verbesserung der Leistung Ihrer Abfrage, aber Sie können ihm auf folgende Weise helfen:

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

Indem Sie eine Sortierung für LOG_TYPE hinzufügen, „zwingen“ Sie den Optimierer, einen Index für LOG_TYPE zu verwenden, um die Dokumente in eine bestimmte Reihenfolge zu bringen. Dadurch wird die Leistung auf verschiedene Weise verbessert, jedoch je nach verwendeter Version unterschiedlich.

Wenn Sie bei realen Daten die in die $group-Phase eingehenden Daten sortiert haben, wird dies die Effizienz der Akkumulation der Summen verbessern. Sie können die verschiedenen Abfragepläne sehen, bei denen mit $sort der Shard-Key-Index verwendet wird. Die Verbesserung der tatsächlichen Leistung hängt von der Anzahl der Werte in jedem "Bucket" ab - im Allgemeinen macht LOG_TYPE mit nur sieben unterschiedlichen Werten einen extrem schlechten Shard-Schlüssel, aber es bedeutet, dass der folgende Code aller Wahrscheinlichkeit nach a sein wird viel schneller als selbst optimierte Aggregation:

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