Chcete-li odpovědět na otázku o $in....
Provedl jsem několik testů výkonu s následujícím scénářem:
~24 milionů dokumentů v kolekci
Vyhledejte 1 milion těchto dokumentů na základě klíče (indexovaného)
Pomocí ovladače CSharp z .NET
Výsledky:
Dotaz 1 najednou, jedno vlákno:109s
Dotaz 1 najednou, více vláken:48s
Dotazy 100K najednou pomocí $in, jedno vlákno=20s
Dotazování 100 kB najednou pomocí $in, vícevláknové=9s
Takže znatelně lepší výkon při použití velkého $in (omezeno na maximální velikost dotazu).
Aktualizace: V návaznosti na komentáře níže o tom, jak si $in vede s různými velikostmi bloků (dotazy s více vlákny):
Dotazování 10 najednou (100 000 dávek) =8,8 s
Dotazování 100 najednou (10 000 dávek) =4,32 s
Dotazování 1 000 najednou (1 000 dávek) =4,31 s
Dotaz 100 najednou (100 dávek) =8,4 s
Dotazování 100 000 najednou (10 dávek) =9 s (na původní výsledky výše)
Zdá se tedy, že existuje sladká tečka pro to, kolik hodnot vložit do klauzule $in vs. počet zpátečních cest