MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Va bene interrogare un MongoDB più volte per richiesta?

Per rispondere alla domanda su $in....

Ho eseguito alcuni test delle prestazioni con il seguente scenario:

~24 milioni di documenti in una raccolta
Cerca 1 milione di questi documenti in base a una chiave (indicizzata)
Utilizzando il driver CSharp da .NET

Risultati:
Query 1 alla volta, a thread singolo:109s
Query 1 alla volta, a thread multipli:48s
Query a 100.000 alla volta utilizzando $in, thread singolo=20s
Query 100.000 alla volta utilizzando $in, multithread=9s

Quindi prestazioni notevolmente migliori utilizzando un $in di grandi dimensioni (limitato alla dimensione massima della query).

Aggiornamento: A seguito dei commenti seguenti su come $in si comporta con dimensioni di blocchi differenti (query multi-thread):

Interrogazione di 10 alla volta (100000 batch) =8,8 s
Interrogazione di 100 alla volta (10000 batch) =4,32 s
Interrogazione di 1000 alla volta (1000 batch) =4,31 s
Interrogazione di 10000 alla volta (100 batch) =8,4s
Interrogazione di 100000 alla volta (10 batch) =9s (per i risultati originali sopra riportati)

Quindi sembra esserci un punto debole per quanti valori raggruppare in una clausola $in rispetto al numero di round trip