MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB:trova il tempo di esecuzione per il comando count() su milioni di record in una raccolta?

MongoDB ha un profiler integrato che puoi abilitare tramite:

db.setProfilingLevel(2)

Invece di '2' puoi scegliere qualsiasi opzione dall'elenco seguente:

  • 0 - il profiler è spento, non raccoglie alcun dato. mongod scrive sempre operazioni più lunghe della soglia slowOpThresholdMs nel proprio registro.
  • 1 - raccoglie dati di profilazione solo per operazioni lente. Per impostazione predefinita, le operazioni lente sono quelle inferiori a 100 millisecondi. È possibile modificare la soglia per le operazioni "lente" con l'opzione di runtime slowOpThresholdMs o il comando setParameter. Per ulteriori informazioni, vedere la sezione Specificare la soglia per le operazioni lente.
  • 2 - raccoglie i dati di profilazione per tutte le operazioni di database.

E puoi vedere i risultati delle tue query controllando il system.profile raccolta in MongoDB..

MODIFICA:

Se vuoi testare le prestazioni puoi usare i seguenti frammenti di codice che possono essere eseguiti dalla console 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 le mie conclusioni sono le seguenti:

  1. aggiunta di un indice (a parte l'id) ha restituito il conteggio di 10 milioni di record in circa 170 ms
  2. contare per ID (conteggio senza query) ha restituito il conteggio in meno di un millisecondo
  3. contare per ID con il cursore (nota che .find() fungerà da cursore sulla raccolta) ha restituito il conteggio in meno di un millisecondo

Quindi più indici la tua collezione è più lenta sarà la tua query . Se conta per _id sarà istantaneo , se hai un indice composito ridimensionerà in base al numero di indici .