sql >> Databasteknik >  >> NoSQL >> MongoDB

Frågar samma dokument parallellt i samma API i mongoDB

Det verkar som om du kör mer kod i den parallella versionen

// 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 den parallella versionen gör du funktionsanropet (ContentRepo.geBySkillIdWithSourceFiltered ) inuti en slinga. Det är därför det går långsammare.

För frågan om löpande löften parallellt:

Som Promise.all , Promise.allSettled väntar på flera löften. Det bryr sig inte om vilken ordning de löser, eller om beräkningarna körs parallellt. De båda garanterar inte samtidighet eller motsatsen. Deras uppgift är bara att se till att alla löften som ges till den hanteras.

Så du kan inte manuellt garantera parallelliteten i löftesutförande

Här är en riktigt intressant artikel förklara parallellism och Promise.All och hur webbläsaren Nodejs API skiljer sig från Nodejs API installerad på din dator när det gäller parallellitet.

Här är utdraget av artikelns slutsats:

Sidoanmärkning:

Det finns en subtil skillnad:

  1. Promise.all:Löser endast när alla löften som lämnats till den löser sig annars kommer den att avvisas med det första avvisade löftesfelet.

  2. Promise.allSettled:Kommer alltid att lösas med en array med information om lösta och avvisade löften.




  1. Konvertera en sträng till ett tal i MongoDB-projektion

  2. NoSQL bästa praxis

  3. c# mongodb-drivrutin hur man kastar ett mongo-dubbelvärde till ett c#-decimalt

  4. MongoDB $grupp och explicit gruppbildning med beräknad kolumn