MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Consultando o mesmo documento em paralelo na mesma API no mongoDB


Parece que você está executando mais código na versão paralela
// 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()


Para a versão paralela, você está colocando a chamada de função (ContentRepo.geBySkillIdWithSourceFiltered ) dentro de um loop. Por isso é mais lento.

Para a pergunta sobre a execução de promessas em paralelo:


Como Promise.all , Promise.allSettled esperar várias promessas. Ele não se importa com a ordem que eles resolvem ou se os cálculos estão sendo executados em paralelo. Ambos não garantem a simultaneidade nem o contrário. Sua tarefa é apenas garantir que todas as promessas que lhe são passadas sejam tratadas.

Portanto, você não pode garantir manualmente o paralelismo da execução da promessa

Aqui está um artigo interessante explicando paralelismo e Promise.All e como a API do Nodejs do navegador difere da API do Nodejs instalada em seu computador em termos de paralelismo.

Aqui está o extrato da conclusão do artigo:

Observação:


Há uma diferença sutil:

  1. Promise.all:Resolve somente quando todas as promessas passadas para ele são resolvidas, caso contrário, ele será rejeitado com o primeiro erro de promessa rejeitada.

  2. Promise.allSettled:Sempre será resolvido com um array com informações sobre promessas resolvidas e rejeitadas.