sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB:forEach vs. fetch + every

Tyto dva příkazy dělají v podstatě totéž na základní úrovni API, což je získání kurzoru a transformace výsledků. Existuje však jeden „základní“ rozdíl ve výkonu:

  • .forEach() transformuje výsledky kurzoru "po jednom" a zpracuje funkci iterátoru, kterou poskytuje.

  • .fetch() na druhou stranu získá „pole“ z kurzoru „všechno najednou“, což znamená, že je vše „v paměti“ jedním zásahem.

Takže bez ohledu na to, ani jedno není ve skutečnosti „rychlejší“ při provádění „základní“ operace načítání z kurzoru dotazu. Nevyhodnocování „výrazu“ při každé iteraci kurzoru však „může být“ o něco rychlejší, takže .fetch() tady by mohl "trochu" vyhrát.

Velkým velkým úlovkem je samozřejmě „všechno je nyní v paměti“, takže je třeba zvážit „režii“ tohoto provedení. Stejně tak v době .fetch() _.each() se teprve musí zpracovat, jak se říká. „Co „získáte“ na houpačkách, pravděpodobně „ztratíte“ na kruhových objezdech“ .

Bez úplného srovnávání konkrétních případů bude „načasování“ pravděpodobně podobné. A generický benchmarking je téměř k ničemu, pokud konkrétně neaplikuje velikost datových sad, se kterými pracujete.

Vychází tedy obecný případ, "Zhruba stejně" , Nicméně pomocí .fetch() spotřebovává více paměti než pouhé opakování kurzoru od začátku.




  1. Udržujte data Redis naživu mezi docker-compose dolů a nahoru v kontejneru Docker

  2. Mongodb repica set config v souboru vlastností

  3. Projděte všechny kolekce Mongo a spusťte dotaz

  4. připojení k mongoDB