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

mongodb groupby lento mesmo depois de adicionar o índice


Como você pode ver na consulta que você escreveu, esse tipo de agregação em 2.0 exige que você execute Map/Reduce. Map/Reduce no MongoDB tem algumas penalidades de desempenho que foram cobertas no SO antes - basicamente, a menos que você seja capaz de paralelizar em um cluster, você estará executando javascript de thread único via Spidermonkey - não é uma proposta rápida. O índice, já que você não está sendo seletivo, não ajuda muito - você só precisa escanear todo o índice, bem como potencialmente o documento.

Com o lançamento iminente de 2.2 (atualmente em rc1 enquanto escrevo isto) você tem algumas opções. A estrutura de agregação (que é nativo, não baseado em JS Map/Reduce) introduzido na versão 2.2 tem um operador de grupo e foi criado especificamente para agilizar esse tipo de operação no MongoDB.

Eu recomendaria dar uma chance ao 2.2 e ver se seu desempenho no agrupamento melhora. Eu acho que seria algo assim (nota:não testado):
db.alarm.aggregate(
    { $group : {
        _id : "$serverName",
        count : { $sum : 1 }
    }}
);