sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB:¿busca el tiempo de ejecución del comando count () en millones de registros en una colección?

MongoDB tiene un generador de perfiles incorporado que puede habilitar a través de:

db.setProfilingLevel(2)

En lugar de '2', puede elegir cualquier opción de la lista a continuación:

  • 0 - el generador de perfiles está apagado, no recopila ningún dato. mongod siempre escribe operaciones más largas que el umbral slowOpThresholdMs en su registro.
  • 1 - recopila datos de perfiles solo para operaciones lentas. Por defecto, las operaciones lentas son aquellas más lentas que 100 milisegundos. Puede modificar el umbral para las operaciones "lentas" con la opción de tiempo de ejecución slowOpThresholdMs o el comando setParameter. Consulte la sección Especificar el umbral para operaciones lentas para obtener más información.
  • 2 - recopila datos de perfiles para todas las operaciones de la base de datos.

Y puede ver los resultados de sus consultas consultando system.profile colección en MongoDB..

EDITAR:

Si desea probar el rendimiento, puede usar los siguientes fragmentos de código que se pueden ejecutar desde la consola de 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()

Y mis conclusiones son las siguientes:

  1. añadir un índice (aparte de la identificación) devolvió el recuento de 10 millones de registros en alrededor de 170ms
  2. conteo por id (recuento sin ninguna consulta) devolvió el recuento en menos de un milisegundo
  3. contando por id con cursor (tenga en cuenta que .find() actuará como un cursor sobre la colección) devolvió el recuento en menos de un milisegundo

Así que los más índices su colección tiene la más lenta será su consulta . Si cuenta por _id será instantáneo , si tiene un índice compuesto escalará según el número de índices .