MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB:forEach vs. fetch + each

Die beiden Anweisungen machen auf der Kern-API-Ebene im Grunde dasselbe, nämlich den Cursor abrufen und die Ergebnisse umwandeln. Es gibt jedoch einen "Kern"-Unterschied bezüglich der Leistung:

  • .forEach() transformiert die Cursor-Ergebnisse "eins nach dem anderen" und verarbeitet die bereitgestellte Iterator-Funktion.

  • .fetch() auf der anderen Seite erhält das "Array" vom Cursor "alles auf einmal", was bedeutet, dass es auf einen Schlag "im Speicher" ist.

Egal was passiert, keiner ist tatsächlich "schneller" bei der Durchführung der "Kern" -Operation des Abrufens vom Cursor der Abfrage. Einen „Ausdruck“ nicht bei jeder Cursor-Iteration auszuwerten „kann“ jedoch etwas schneller sein, also .fetch() könnte hier ein "wenig" gewinnen.

Der große Haken ist natürlich "alles ist jetzt im Speicher", also ist der "Overhead" zu berücksichtigen. Ebenso zum Zeitpunkt von .fetch() der _.each() ist noch zu verarbeiten, wie das Sprichwort sagt. "Was Sie auf den Schaukeln "gewinnen", werden Sie wahrscheinlich auf den Kreisverkehren "verlieren" .

Ohne vollständiges Benchmarking spezifischer Fälle sind die „Timings“ wahrscheinlich ähnlich. Und generisches Benchmarking ist so gut wie nutzlos, es sei denn, es bezieht sich speziell auf die Größe der Datensätze, mit denen Sie arbeiten.

Es kommt also der allgemeine Fall heraus, "Ungefähr gleich" , jedoch mit .fetch() wird mehr Arbeitsspeicher verbrauchen als nur einen Cursor von Anfang an zu durchlaufen.