MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Ist es in Ordnung, eine MongoDB mehrmals pro Anfrage abzufragen?

Um das Q über $in zu beantworten....

Ich habe einige Leistungstests mit dem folgenden Szenario durchgeführt:

~24 Millionen Dokumente in einer Sammlung
Suchen Sie 1 Million dieser Dokumente basierend auf einem Schlüssel (indiziert)
Mit dem CSharp-Treiber von .NET

Ergebnisse:
Abfrage 1 auf einmal, Single-Threaded:109s
Abfrage 1 auf einmal, Multi-Threaded:48s
Abfrage von 100K auf einmal mit $in, Single-Threaded=20s
Abfrage 100 KB auf einmal mit $in, multithreaded=9s

Also merklich bessere Leistung mit einem großen $in (beschränkt auf die maximale Abfragegröße).

Aktualisierung: Weiter unten in den Kommentaren darüber, wie $in mit unterschiedlichen Chunk-Größen abschneidet (Abfragen mit mehreren Threads):

10 Abfragen auf einmal (100000 Batches) =8,8 s
100 Abfragen auf einmal (10000 Batches) =4,32 s
1000 Abfragen auf einmal (1000 Batches) =4,31 s
10000 Abfragen auf einmal (100 Batches) =8,4 s
Abfrage von 100000 auf einmal (10 Batches) =9 s (gemäß den ursprünglichen Ergebnissen oben)

Es scheint also einen idealen Punkt dafür zu geben, wie viele Werte in einer $in-Klausel im Vergleich zur Anzahl der Roundtrips zusammengefasst werden sollen