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

Interroger le même document en parallèle dans la même API dans mongoDB

Il semble que vous exécutiez plus de code dans la version parallèle

// 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()

Pour la version parallèle, vous mettez l'appel de fonction (ContentRepo.geBySkillIdWithSourceFiltered ) à l'intérieur d'une boucle. C'est pourquoi il est plus lent.

Pour la question sur l'exécution des promesses en parallèle :

Comme Promise.all , Promise.allSettled attendre plusieurs promesses. Il ne se soucie pas de l'ordre dans lequel ils résolvent, ou si les calculs s'exécutent en parallèle. Les deux ne garantissent pas la concurrence ni l'inverse. Leur tâche consiste simplement à s'assurer que toutes les promesses qui lui sont transmises sont respectées.

Vous ne pouvez donc pas garantir manuellement le parallélisme d'exécution des promesses

Voici un article vraiment intéressant expliquant le parallélisme et Promise.All et comment l'API Nodejs du navigateur diffère de l'API Nodejs installée sur votre ordinateur en termes de parallélisme.

Voici l'extrait de la conclusion de l'article :

Remarque :

Il y a une différence subtile :

  1. Promise.all :se résout uniquement lorsque toutes les promesses qui lui sont transmises sont résolues, sinon il sera rejeté avec la première erreur de promesse rejetée.

  2. Promise.allSettled :sera toujours résolu avec un tableau contenant des informations sur les promesses résolues et rejetées.