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

MongoDB:finde udførelsestid for count() kommando på millioner af poster i en samling?

MongoDB har en indbygget profiller, som du kan aktivere via:

db.setProfilingLevel(2)

I stedet for '2' kan du vælge en hvilken som helst indstilling fra listen nedenfor:

  • 0 - profileren er slukket, indsamler ingen data. mongod skriver altid operationer længere end slowOpThresholdMs-tærsklen til sin log.
  • 1 - indsamler kun profileringsdata til langsomme operationer. Som standard er langsomme operationer dem, der er langsommere end 100 millisekunder. Du kan ændre tærsklen for "langsomme" operationer med slowOpThresholdMs runtime-indstillingen eller setParameter-kommandoen. Se afsnittet Angiv tærskel for langsomme operationer for at få flere oplysninger.
  • 2 - indsamler profileringsdata for alle databaseoperationer.

Og du kan se resultaterne af dine forespørgsler ved at tjekke system.profilen samling i MongoDB..

EDIT:

Hvis du vil teste ydeevnen, kan du bruge følgende kodestykker, der kan udføres fra mongo-konsollen:

> 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()

Og mine konklusioner er som følger:

  1. tilføje et indeks (bortset fra id'et) returnerede antallet af 10 millioner poster på omkring 170 ms
  2. tæller efter id (tæller uden nogen forespørgsel) returnerede antallet på mindre end et millisekund
  3. tæller efter id med markør (bemærk, at .find() vil fungere som en markør over samlingen) returnerede antallet på mindre end et millisekund

Så de flere indekser din samling har langsommere din forespørgsel . Hvis du tæller efter _id, vil det være øjeblikkeligt , hvis du har et sammensat indeks den vil skalere baseret på antallet af indekser .



  1. Undtagelse for socket timeout i Mongo

  2. Mulighed for Mongoose autoReconnect

  3. Mongoose + lodash udvider kopieringsarrayet af objektet forkert

  4. Deadlock ved hjælp af Aggregator + Redis