sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB:najít čas provedení příkazu count() na milionech záznamů v kolekci?

MongoDB má vestavěný profiler, který můžete povolit přes:

db.setProfilingLevel(2)

Místo '2' můžete vybrat libovolnou možnost ze seznamu níže:

  • 0 - profiler je vypnutý, neshromažďuje žádná data. mongod do svého protokolu vždy zapisuje operace delší než je práh slowOpThresholdMs.
  • 1 - shromažďuje data profilování pouze pro pomalé operace. Ve výchozím nastavení jsou pomalé operace ty, které jsou pomalejší než 100 milisekund. Práh pro „pomalé“ operace můžete upravit pomocí volby runtime slowOpThresholdMs nebo příkazu setParameter. Další informace naleznete v části Určení prahové hodnoty pro pomalé operace.
  • 2 - shromažďuje profilovací data pro všechny operace databáze.

A výsledky svých dotazů můžete vidět v system.profile sbírka v MongoDB..

UPRAVIT:

Pokud chcete otestovat výkon, můžete použít následující úryvky kódu, které lze spustit z konzole 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()

A mé závěry jsou následující:

  1. přidání indexu (kromě id) vrátil počet 10 milionů záznamů přibližně za 170 ms
  2. počítání podle ID (počet bez dotazu) vrátil počet za méně než milisekundu
  3. počítání podle ID s kurzorem (všimněte si, že .find() bude fungovat jako kurzor nad kolekcí) vrátil počet za méně než milisekundu

Takže více indexů vaše sbírka má pomalejší dotaz . Pokud počítáte podle _id, bude to okamžité , pokud máte složený index bude se škálovat na základě počtu indexů .



  1. brew install php56-mongo Příkaz nefunguje

  2. MongoDB - divné chování sestupného indexu

  3. Je to bezpečný způsob vkládání a aktualizace pole objektů v mongodb?

  4. mongodb nodejs - převod kruhové struktury