sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur undviker man att flera nodprocesser gör repetitiva saker?

Ett sätt att göra det är att tilldela ett unikt numeriskt ID till vart och ett av dina MongoDB-dokument och att tilldela en unik numerisk identifierare till var och en av dina node.js-arbetare.

Till exempel, ha en env var som heter NUM_WORKERS och sedan i din node.js-modul:

var NumWorkers = process.env.NUM_WORKERS || 1;

Du måste sedan tilldela ett unikt, sammanhängande instansnummer-id (i intervallet 0 till NumWorkers-1) till var och en av dina arbetare (t.ex. via en kommandoradsparameter som läses av din node.js-process när den initieras). Du kan lagra det i en variabel som heter MyWorkerInstanceNum.

När du väljer ett dokument från MongoDB, anropar du följande funktion (som skickar dokumentets unika documentId som en parameter):

function isMine(documentId){
    //
    // Example: documentId=10
    //          NumWorkers= 4
    // (10 % 4) = 2
    // If MyWorkerInstanceNum is 2, return true, else return false.
    return ((documentId % NumWorkers) === MyWorkerInstanceNum);
}

Fortsätt bara att faktiskt bearbeta dokumentet om isMine() returnerar true.Så flera arbetare kan "välja" ett dokument, men bara en arbetare kommer faktiskt att bearbeta det.



  1. Mongo db aggregering flera villkor

  2. Duplicera ett dokument i MongoDB med ett nytt _id

  3. gruppera efter frågor om meteorsamling

  4. Uppdatera Mongo-array:ta bort dynamisk nyckel