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

Hvordan undgår man, at flere node-processer gør gentagne ting?

En måde at gøre det på er at tildele et unikt numerisk ID til hvert af dine MongoDB-dokumenter og at tildele en unik numerisk identifikator til hver af dine node.js-arbejdere.

For eksempel, har en env var kaldet NUM_WORKERS, og derefter i dit node.js modul:

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

Du skal derefter tildele et unikt, sammenhængende instansnummer-id (i området 0 til NumWorkers-1) til hver af dine arbejdere (f.eks. via en kommandolinjeparameter, der læses af din node.js-proces, når den initialiseres). Du kan gemme det i en variabel kaldet MyWorkerInstanceNum.

Når du vælger et dokument fra MongoDB, skal du kalde følgende funktion (overføre dokumentets unikke 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æt kun med faktisk at behandle dokumentet, hvis isMine() returnerer true.Så flere arbejdere kan "vælge" et dokument, men kun én arbejder vil faktisk behandle det.



  1. Hvordan konverterer man millisekunder til dato i mongodb-aggregation?

  2. Hvordan fjerner du dubletter baseret på en nøgle i Mongodb?

  3. Opdater mange, hvis der findes, ellers opret et nyt dokument for hvert LeadId, der ikke eksisterer

  4. Adgang til Meteor produktionsdatabase