sql >> Database >  >> NoSQL >> MongoDB

Hoe voorkom je dat processen met meerdere knooppunten repetitieve dingen doen?

Een manier om dit te doen is door een unieke numerieke ID toe te wijzen aan elk van uw MongoDB-documenten en een unieke numerieke ID toe te wijzen aan elk van uw node.js-werknemers.

Gebruik bijvoorbeeld een env-var met de naam NUM_WORKERS en vervolgens in uw node.js-module:

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

U moet dan een unieke, aaneengesloten instantienummer-id (in het bereik 0 tot NumWorkers-1) toewijzen aan elk van uw werknemers (bijvoorbeeld via een opdrachtregelparameter die wordt gelezen door uw node.js-proces wanneer het wordt geïnitialiseerd). U kunt dat opslaan in een variabele genaamd MyWorkerInstanceNum.

Wanneer u een document uit MongoDB kiest, roept u de volgende functie aan (door de unieke document-ID van het document als parameter door te geven):

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

Ga alleen door met het daadwerkelijk verwerken van het document als isMine() true retourneert. Er kunnen dus meerdere werkers een document "kiezen", maar slechts één werker zal het daadwerkelijk verwerken.



  1. MongoDB - onderscheiden met query gebruikt geen indexen

  2. Asynchrone uitvoering van redis-opdrachten

  3. mangoest:een enkel subdocument invoegen - geen array

  4. Hoe casbah mongodb-lijst naar json te converteren in scala / play