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

Paralleles Abfragen desselben Dokuments in derselben API in mongoDB

Es scheint, als würden Sie in der parallelen Version mehr Code ausführen

// The normal version
let normal = await ContentRepo.geBySkillIdWithSourceFiltered(
    [chosenSkillsArr[0].sid!],
    readContentIds,
    body.isVideoIncluded,
    true,
    true
);


// The code inside the parallel version:
chosenSkillsArr.map(async (skill: IScrapeSkillDocument) => {
        const result = await ContentRepo.geBySkillIdWithSourceFiltered(
            [skill.sid!],
            readContentIds,
            body.isVideoIncluded,
            true,
            true
        );
    })
[chosenSkillsArr[0].sid!], vs  chosenSkillsArr.map()

Für die parallele Version setzen Sie den Funktionsaufruf (ContentRepo.geBySkillIdWithSourceFiltered ) innerhalb einer Schleife. Deshalb ist es langsamer.

Für die Frage zum parallelen Ausführen von Promises:

Wie Promise.all , Promise.allSettled warten auf mehrere Zusagen. Dabei spielt es keine Rolle, in welcher Reihenfolge sie aufgelöst werden oder ob die Berechnungen parallel ablaufen. Beide garantieren weder Parallelität noch das Gegenteil. Ihre Aufgabe besteht lediglich darin sicherzustellen, dass alle an sie übergebenen Versprechungen ausgeführt werden.

Sie können also die Parallelität der Promise-Ausführung nicht manuell garantieren

Hier ist ein wirklich interessanter Artikel Erklärung von Parallelität und Promise.All und wie sich die Nodejs-API des Browsers von der auf Ihrem Computer installierten Nodejs-API in Bezug auf Parallelität unterscheidet.

Hier ist der Auszug aus der Schlussfolgerung des Artikels:

Nebenbemerkung:

Es gibt einen feinen Unterschied:

  1. Promise.all:Wird nur aufgelöst, wenn alle an ihn übergebenen Promises aufgelöst werden, andernfalls wird er mit dem ersten abgelehnten Promise-Fehler abgelehnt.

  2. Promise.allSettled:Wird immer mit einem Array aufgelöst, das Informationen über aufgelöste und abgelehnte Versprechungen enthält.