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

MongoDB:encontre o tempo de execução do comando count() em milhões de registros em uma coleção?


O MongoDB tem um profiler integrado que você pode habilitar via:
db.setProfilingLevel(2)

Em vez de '2' você pode escolher qualquer opção da lista abaixo:
  • 0 - o criador de perfil está desligado, não coleta nenhum dado. O mongod sempre grava operações maiores que o limite slowOpThresholdMs em seu log.
  • 1 - coleta dados de perfil apenas para operações lentas. Por padrão, as operações lentas são aquelas mais lentas que 100 milissegundos. Você pode modificar o limite para operações “lentas” com a opção de tempo de execução slowOpThresholdMs ou o comando setParameter. Consulte a seção Especificar o limite para operações lentas para obter mais informações.
  • 2 - coleta dados de perfil para todas as operações do banco de dados.

E você pode ver os resultados de suas consultas verificando o system.profile coleção no MongoDB..

EDITAR:

Se você quiser testar o desempenho, poderá usar os seguintes trechos de código que podem ser executados no console do mongo:
> for (var i = 0; i < 10000000; ++i) { db.countTest.insert({a: i % 10}) }
> db.countTest.ensureIndex({a:1})
> db.countTest.count({a: 1})
> db.countTest.count()
> db.countTest.find().count()

E minhas conclusões são as seguintes:
  1. adicionar um índice (além do id) retornou a contagem de 10 milhões de registros em cerca de 170 ms
  2. contagem por ID (contagem sem qualquer consulta) retornou a contagem em menos de um milissegundo
  3. contagem por id com cursor (observe que .find() atuará como um cursor sobre a coleção) retornou a contagem em menos de um milissegundo

Portanto, os mais índices sua coleção tem o mais lento será sua consulta . Se você contar por _id, será instantâneo , se você tiver um índice composto ele será escalonado com base no número de índices .