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

Pecahan MongoDB dan Beban Agregasi Tidak Seimbang

Kerangka kerja agregasi adalah roda penggerak vital dalam infrastruktur MongoDB. Ini membantu Anda menganalisis, meringkas, dan menggabungkan data yang disimpan di MongoDB. Lihat entri blog ini untuk detail selengkapnya tentang kerangka kerja agregasi di MongoDB 2.6.

Dalam rilis 2.6, MongoDB membuat perubahan yang halus namun signifikan dalam cara eksekusi pipeline agregasi yang mendasari di lingkungan sharding. Saat bekerja dengan koleksi sharded, MongoDB membagi jalur pipa menjadi dua tahap. Tahap pertama atau fase “$match” berjalan pada setiap pecahan dan memilih dokumen yang relevan. Jika perencana kueri menentukan bahwa shard tidak relevan berdasarkan kunci shard, maka fase ini tidak dijalankan pada shard tersebut.

Tahap selanjutnya hanya berjalan pada pecahan "utama" untuk koleksi. Pecahan ini menggabungkan data dari pecahan lain dan menjalankan sisa pipa. Ini menghasilkan lebih banyak beban pada pecahan utama koleksi yang dikumpulkan. Berikut adalah contoh dari salah satu pelanggan kami yang menjalankan tiga shard dan menggunakan kueri agregasi utama:

Seperti yang Anda lihat, beban pada pecahan pertama secara konsisten 3-4 kali lipat dari alasan lainnya. Ini adalah contoh ekstrim karena jika pecahan kedua dan ketiga ditambahkan kemudian, maka pecahan utama untuk semua koleksi adalah pecahan pertama. Jadi pada dasarnya, tahap selanjutnya dari semua pekerjaan agregasi kami hanya berjalan di Shard1. Jika Anda memeriksa log pada pecahan utama, Anda akan melihat sejumlah perintah "gabungkan" yang mengambil data dari pecahan lain.

Sebelum 2.6, tahap berikutnya dari pipeline agregasi digunakan untuk berjalan di server MongoDB Anda dan bukan di shard utama.

Jadi, bagaimana Anda menangani distribusi beban yang tidak merata ini? Anda memiliki beberapa opsi:

  1. Jika Anda menjalankan agregasi pada beberapa koleksi, pastikan "pecahan utama" dari koleksi tersebar merata di seluruh pecahan Anda.
  2. Jika Anda memiliki beban agregasi yang tinggi hanya pada satu koleksi, Anda mungkin perlu menggunakan mesin yang sedikit lebih besar untuk shard utama Anda.

Seperti biasa, jika Anda memiliki pertanyaan atau komentar, silakan kirim email kepada kami di [email protected].


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menautkan &Membuat Gabungan MongoDB Menggunakan SQL:Bagian 3

  2. Node.js + temuan luwak membekukan simpul ketika lebih dari 100 hasil

  3. MongoDB $nin Operator Kueri

  4. Meteor:perbedaan antara nama untuk koleksi, variabel, publikasi, dan langganan?

  5. validasi kustom luwak menggunakan 2 bidang