sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB:hitta exekveringstid för kommandot count() på miljontals poster i en samling?

MongoDB har en inbyggd profiler som du kan aktivera via:

db.setProfilingLevel(2)

Istället för '2' kan du välja valfritt alternativ från listan nedan:

  • 0 - profileraren är avstängd, samlar ingen data. mongod skriver alltid operationer längre än tröskelvärdet slowOpThresholdMs till sin logg.
  • 1 - samlar in profileringsdata endast för långsamma operationer. Som standard är långsamma operationer de som är långsammare än 100 millisekunder. Du kan ändra tröskeln för "långsamma" operationer med alternativet slowOpThresholdMs runtime eller kommandot setParameter. Se avsnittet Specificera tröskeln för långsamma operationer för mer information.
  • 2 - samlar in profileringsdata för alla databasoperationer.

Och du kan se resultatet av dina frågor genom att kontrollera system.profilen samling i MongoDB..

EDIT:

Om du vill testa prestanda kan du använda följande kodavsnitt som kan köras från mongokonsolen:

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

Och mina slutsatser är följande:

  1. lägga till ett index (bortsett från id) returnerade antalet 10 miljoner poster på cirka 170 ms
  2. räknas efter id (räkning utan någon fråga) returnerade antalet på mindre än en millisekund
  3. räkna efter id med markör (observera att .find() kommer att fungera som en markör över samlingen) returnerade antalet på mindre än en millisekund

Så de fler indexen din samling har långsammare din fråga blir . Om du räknas med _id blir det omedelbart , om du har ett sammansatt index den kommer att skalas baserat på antalet index .



  1. fjäderstövel + apache kamel + mongodb integrationsproblem

  2. HBase-regioner slås samman

  3. Stöder AWS DocumentDB att gå med i 3+ samlingar i en enda fråga?

  4. Spring Data Mongo - Hur kartlägger man ärvda POJO-enheter?