MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да избегнем процесите на множество възли, които правят повтарящи се неща?

Един от начините да го направите е да присвоите уникален цифров идентификатор на всеки от вашите MongoDB документи и да присвоите уникален цифров идентификатор на всеки от вашите node.js работници.

Например, имайте env var, наречена NUM_WORKERS, и след това във вашия модул node.js:

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

След това трябва да присвоите уникален, непрекъснат идентификатор на номер на екземпляр (в диапазона от 0 до NumWorkers-1) на всеки от вашите работници (напр. чрез параметър на командния ред, прочетен от вашия процес node.js, когато се инициализира). Можете да го съхраните в променлива, наречена MyWorkerInstanceNum.

Когато изберете документ от MongoDB, извикайте следната функция (предавайки уникалния documentId на документа като параметър):

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

Продължете действително да обработвате документа само ако isMine() върне true. Така че няколко работници могат да "изберат" документ, но само един работник ще го обработи действително.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Заявка, при която сумата от две полета е по-малка от дадената стойност

  2. Как директно да заявите вложено поле, без да посочите родителско поле?

  3. Странни резултати за обяснение на MongoDB/Node

  4. Допълнителни полета за регистрация на акаунт в passport-local-mongoose?

  5. MongoDB, вграден в java