MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Interrogazione dello stesso documento in parallelo nella stessa API in mongoDB

Sembra che tu stia eseguendo più codice nella versione parallela

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

Per la versione parallela, stai effettuando la chiamata alla funzione (ContentRepo.geBySkillIdWithSourceFiltered ) all'interno di un ciclo. Ecco perché è più lento.

Per la domanda sull'esecuzione delle promesse in parallelo:

Come Promise.all , Promise.allSettled attendere più promesse. Non importa quale ordine risolvono o se i calcoli vengono eseguiti in parallelo. Entrambi non garantiscono la concorrenza né il contrario. Il loro compito è solo quello di garantire che tutte le promesse fattegli vengano mantenute.

Quindi non puoi garantire manualmente il parallelismo dell'esecuzione della promessa

Ecco un articolo interessante spiegando il parallelismo e Promise.All e in che modo l'API Nodejs del browser differisce dall'API Nodejs installata sul tuo computer in termini di parallelismo.

Ecco l'estratto della conclusione dell'articolo:

Nota a margine:

C'è una sottile differenza:

  1. Promise.all:si risolve solo quando tutte le promesse passate vengono risolte, altrimenti verrà rifiutata con il primo errore di promessa rifiutata.

  2. Promise.allSettled:verrà sempre risolto con un array contenente informazioni sulle promesse risolte e rifiutate.