Aby odpowiedzieć na pytanie o $in....
Przeprowadziłem kilka testów wydajności w następującym scenariuszu:
~24 miliony dokumentów w kolekcji
Wyszukaj 1 milion tych dokumentów na podstawie klucza (indeksowane)
Używając sterownika CSharp z platformy .NET
Wyniki:
Zapytania 1 na raz, jednowątkowe:109s
Zapytania 1 na raz, wielowątkowe:48s
Zapytania 100K na raz przy użyciu $in, jednowątkowe=20s
Zapytania 100K na raz przy użyciu $in, wielowątkowość=9s
Tak więc zauważalnie lepsza wydajność przy użyciu dużego $in (ograniczonego do maksymalnego rozmiaru zapytania).
Aktualizacja: Kontynuując poniższe komentarze na temat tego, jak $in radzi sobie z różnymi rozmiarami porcji (zapytania wielowątkowe):
Zapytanie 10 naraz (100000 partii) =8,8 s
Zapytania 100 na raz (10000 partii) =4,32 s
Zapytania 1000 na raz (1000 partii) =4,31 s
Zapytania 10000 na raz (100 partii) =8,4 s
Odpytywanie 100000 na raz (10 partii) =9 s (na oryginalne wyniki powyżej)
Wygląda więc na to, że istnieje idealne miejsce na to, ile wartości należy połączyć w klauzulę $in w porównaniu z liczbą podróży w obie strony