MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Acelere a agregação do MongoDB


Atualmente, existem algumas limitações no que a estrutura de agregação pode fazer para melhorar o desempenho de sua consulta, mas você pode ajudar da seguinte maneira:
db.my_collection.aggregate([
    { "$sort" : { "LOG_TYPE" : 1 } },
    { "$group" :{ 
        "_id": "$LOG_TYPE",
        "COUNT": { "$sum":1 }
    }}
])

Ao adicionar uma classificação em LOG_TYPE você estará "forçando" o otimizador a usar um índice em LOG_TYPE para colocar os documentos em ordem. Isso melhorará o desempenho de várias maneiras, mas de maneira diferente, dependendo da versão que está sendo usada.

Em dados reais, se você tiver os dados que entram na fase de grupo $ classificados, isso melhorará a eficiência da acumulação dos totais. Você pode ver os diferentes planos de consulta onde, com $sort, ele usará o índice de chave de fragmentação. A melhoria que isso proporciona no desempenho real dependerá do número de valores em cada "bucket" - em geral, LOG_TYPE tendo apenas sete valores distintos o torna uma chave de fragmentação extremamente ruim, mas significa que é muito provável que o código a seguir seja um muito mais rápido do que a agregação otimizada:
db.my_collection.distinct("LOG_TYPE").forEach(function(lt) {
   print(db.my_collection.count({"LOG_TYPE":lt});
});