MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB:forEach vs fetch + each


As duas instruções fazem basicamente a mesma coisa no nível da API principal, que é pegar o cursor e transformar os resultados. No entanto, há uma diferença "principal" sobre o desempenho:

  • .forEach() irá transformar os resultados do cursor "um de cada vez" e processar a função iteradora fornecida.

  • .fetch() por outro lado, obtém o "array" do cursor "tudo de uma vez", o que significa que está tudo "na memória" em um clique.

Portanto, não importa o que aconteça, nenhum dos dois é realmente "mais rápido" em fazer a operação "principal" de buscar do cursor da consulta. No entanto, não avaliar uma "expressão" em cada iteração do cursor "pode ​​ser" um pouco mais rápido, então .fetch() pode ganhar um "pouco" aqui.

O grande problema, é claro, é que "tudo está agora na memória", então há a "sobrecarga" de fazer isso a ser considerada. Além disso, no momento de .fetch() o _.each() ainda está para ser processado, como diz o ditado. "O que você "ganha" nos balanços provavelmente "perde" nas rotatórias" .

Sem um benchmarking completo de casos específicos, os "tempos" provavelmente serão semelhantes. E o benchmarking genérico é quase inútil, a menos que aplique especificamente o tamanho dos conjuntos de dados com os quais você está trabalhando.

O caso geral, portanto, sai, "Sobre o mesmo" , No entanto, usando .fetch() vai consumir mais memória do que apenas iterar um cursor desde o início.