MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB :forEach vs fetch + chacun

Les deux instructions font fondamentalement la même chose au niveau de l'API principale, c'est-à-dire obtenir le curseur et transformer les résultats. Il existe cependant une différence "essentielle" concernant les performances :

  • .forEach() transformera les résultats du curseur "un à la fois" et traitera la fonction d'itération qui lui est fournie.

  • .fetch() d'autre part obtient le "tableau" du curseur "tout à la fois" ce qui signifie que tout est "en mémoire" en un seul coup.

Donc quoi qu'il en soit, ni l'un ni l'autre n'est réellement "plus rapide" pour effectuer l'opération "de base" d'extraction à partir du curseur de la requête. Cependant, ne pas évaluer une "expression" à chaque itération du curseur "peut être" légèrement plus rapide, donc .fetch() pourrait gagner un "petit" ici.

Le gros hic, bien sûr, c'est que "tout est maintenant en mémoire", il y a donc le "overhead" de le faire à prendre en compte. De plus, au moment de .fetch() le _.each() n'a pas encore été traitée, comme dit le proverbe. "Ce que vous "gagnez" sur les balançoires, vous le "perdez" probablement sur les ronds-points" .

Sans analyse comparative complète des cas spécifiques, les "timings" sont susceptibles d'être similaires. Et l'analyse comparative générique est presque inutile à moins qu'elle applique spécifiquement la taille des ensembles de données avec lesquels vous travaillez.

Le cas général ressort donc, "A peu près pareil" , Cependant en utilisant .fetch() va consommer plus de mémoire que de simplement itérer un curseur depuis le début.