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

MongoDB:forEach vs fetch + ciascuno

Le due istruzioni fanno sostanzialmente la stessa cosa a livello di API principale, ovvero ottenere il cursore e trasformare i risultati. C'è tuttavia una differenza "fondamentale" sulle prestazioni:

  • .forEach() trasformerà i risultati del cursore "uno alla volta" ed elaborerà la funzione di iteratore fornita.

  • .fetch() d'altra parte ottiene "array" dal cursore "tutto in una volta", il che significa che è tutto "in memoria" in un colpo.

Quindi, non importa cosa, nessuno dei due è in realtà "più veloce" nell'esecuzione dell'operazione "core" di recupero dal cursore della query. Tuttavia, non valutare un'"espressione" su ogni iterazione del cursore "potrebbe essere" leggermente più veloce, quindi .fetch() potrebbe vincere un "poco" qui.

Il grande grosso problema ovviamente è "tutto è ora in memoria", quindi c'è il "sovraccarico" di farlo da considerare. Inoltre, al momento di .fetch() il _.each() deve ancora essere elaborato, così come si suol dire. "Quello che "guadagnerai" sulle altalene probabilmente "perdi" alle rotonde" .

Senza un'analisi comparativa completa di casi specifici, è probabile che i "tempi" siano simili. E il benchmarking generico è quasi inutile a meno che non applichi specificamente le dimensioni dei set di dati con cui stai lavorando.

Viene quindi fuori il caso generale, "Circa lo stesso" , Tuttavia utilizzando .fetch() consumerà più memoria piuttosto che scorrere un cursore dall'inizio.