MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak uniknąć wielu procesów węzłowych wykonujących powtarzalne czynności?

Jednym ze sposobów, aby to zrobić, jest przypisanie unikalnego identyfikatora numerycznego do każdego dokumentu MongoDB i przypisanie unikalnego identyfikatora numerycznego do każdego z procesów roboczych node.js.

Na przykład miej zmienną środowiskową o nazwie NUM_WORKERS, a następnie w module node.js:

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

Następnie musisz przypisać unikalny, ciągły identyfikator numeru instancji (w zakresie od 0 do NumWorkers-1) do każdego z procesów roboczych (np. za pomocą parametru wiersza poleceń odczytanego przez proces node.js podczas jego inicjalizacji). Możesz zapisać to w zmiennej o nazwie MyWorkerInstanceNum.

Po wybraniu dokumentu z MongoDB wywołaj następującą funkcję (przekazując unikalny identyfikator dokumentu jako parametr):

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

Kontynuuj faktyczne przetwarzanie dokumentu tylko wtedy, gdy isMine() zwraca wartość true. Tak więc wiele procesów roboczych może „wybrać” dokument, ale tylko jeden pracownik faktycznie go przetworzy.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pobieranie określonego klucza MongoDB z DuplicateKeyException, który został faktycznie zduplikowany (Java/Spring)

  2. MongoDB count() undefined

  3. W ramach mongodb $match, jak testować pole MATCHING , a nie pole RÓWNE

  4. Oblicz medianę w ramach agregacji MongoDB

  5. Wiosenne sortowanie zapytań MongoDB