MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara menghindari banyak proses simpul melakukan hal-hal yang berulang?

Salah satu cara untuk melakukannya adalah dengan menetapkan ID numerik unik untuk setiap dokumen MongoDB Anda, dan untuk menetapkan pengenal numerik unik untuk setiap pekerja node.js Anda.

Misalnya, buat env var bernama NUM_WORKERS, lalu di modul node.js Anda:

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

Anda kemudian perlu menetapkan id nomor instans yang unik dan bersebelahan (dalam rentang 0 hingga NumWorkers-1) untuk setiap pekerja Anda (mis. melalui parameter baris perintah yang dibaca oleh proses node.js Anda saat inisialisasi). Anda dapat menyimpannya dalam variabel bernama MyWorkerInstanceNum.

Saat Anda memilih dokumen dari MongoDB, panggil fungsi berikut (melewati documentId unik dokumen sebagai 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);
}

Hanya lanjutkan untuk benar-benar memproses dokumen jika isMine() mengembalikan nilai true. Jadi, beberapa pekerja dapat "memilih" dokumen, tetapi hanya satu pekerja yang benar-benar akan memprosesnya.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bidang array terbalik di MongoDB

  2. Mongo menunggu di 27017 bahkan setelah menginstal ulang

  3. MongoDB:perbarui kamus dalam dokumen

  4. Buat kombinasi dua bidang unik dalam koleksi saya

  5. Keluarkan objek biasa ke dokumen luwak