sql >> Databáze >  >> NoSQL >> MongoDB

Paralelní dotazování na stejný dokument ve stejném rozhraní API v mongoDB

Zdá se, že používáte více kódu v paralelní verzi

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

Pro paralelní verzi vkládáte volání funkce (ContentRepo.geBySkillIdWithSourceFiltered ) uvnitř smyčky. Proto je pomalejší.

Pro otázku ohledně souběžného spuštění slibů:

Jako Promise.all , Promise.allSettled čekat na několik slibů. Nezáleží na tom, jaké pořadí řeší, nebo zda výpočty probíhají paralelně. Oba nezaručují souběžnost ani opak. Jejich úkolem je pouze zajistit, aby byly splněny všechny sliby, které mu byly předány.

Nemůžete tedy ručně zaručit paralelnost plnění slibu

Zde je opravdu zajímavý článek vysvětlující paralelismus a Promise.All a jak se prohlížeč Nodejs API liší od Nodejs API nainstalovaného na vašem počítači, pokud jde o paralelismus.

Zde je výňatek ze závěru článku:

Postranní poznámka:

Je tu jeden jemný rozdíl:

  1. Promise.all:Vyřeší se pouze tehdy, když se vyřeší všechny předané sliby, jinak bude odmítnut s první chybou odmítnutého slibu.

  2. Promise.allSettled:Vždy se vyřeší polem s informacemi o vyřešených a odmítnutých slibech.




  1. MongoDB - Řazení výsledků dotazu

  2. E-Commerce API vytvořené pomocí Node-Js, Typescript, PostgreSQL, Redis a Kafka

  3. Existuje nějaký způsob, jak automaticky vytvořit kodeky Mongo?

  4. Jak $set sub-sub-array položky v MongoDB