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

Jak se vyhnout tomu, aby více uzlových procesů dělalo opakující se věci?

Jedním ze způsobů, jak to udělat, je přiřadit jedinečné číselné ID každému z vašich dokumentů MongoDB a přiřadit jedinečný číselný identifikátor každému z vašich pracovníků s node.js.

Mějte například env var s názvem NUM_WORKERS a poté v modulu node.js:

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

Potom musíte každému z vašich pracovníků přiřadit jedinečné, souvislé číslo instance (v rozsahu 0 až NumWorkers-1) (např. pomocí parametru příkazového řádku, který načte váš proces node.js při jeho inicializaci). Můžete to uložit do proměnné s názvem MyWorkerInstanceNum.

Když vyberete dokument z MongoDB, zavolejte následující funkci (předáním jedinečného documentId dokumentu jako parametru):

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

Pokračujte ve skutečném zpracování dokumentu, pouze pokud isMine() vrátí true. Dokument si tedy může „vybrat“ více pracovníků, ale ve skutečnosti jej zpracuje pouze jeden pracovník.



  1. Není autorizován pro dotaz na jmenné prostory admin.system.na mongodb

  2. Sloučit kolekci Mongodb a Python Dict

  3. jak mohu přepsat svůj dotaz na mongoose po rozdělení dat z jednoho modelu na dva?

  4. MongoDB výraz pro dotaz na pole vnořených dokumentů