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

Meningkatkan batas memori untuk pekerjaan agregat mongodb

Yah tidak, tidak ada pengaturan dan jika Anda benar-benar memikirkannya, ada alasan bagus untuk ini. Jadi, jika Anda terlebih dahulu mempertimbangkan apa yang dilakukan agregat dan apa yang dilakukan MongoDB secara umum, itu akan menjadi jelas.

Inilah yang "seharusnya" berada di "kepala" dari setiap pipa agregasi yang masuk akal:

db.collection.aggregate([
    { "$match:{ /* Something here */ } },

Dan inilah alasannya:

  1. Itu masuk akal untuk mencoba untuk mengurangi perangkat kerja yang Anda operasikan di apa saja operasi.

  2. Ini juga merupakan satu-satunya kali Anda mendapatkan kesempatan untuk menggunakan indeks untuk membantu dalam mencari pilihan. Yang selalu lebih baik daripada pemindaian koleksi.

  3. Meskipun ada "pengoptimal" built bawaan yang mencari hal-hal seperti "proyeksi" yang membatasi bidang "yang dipilih", pemeriksa terbaik dari ukuran set kerja adalah hanya bekerja pada catatan yang valid. Pertandingan tahap selanjutnya tidak "dioptimalkan" dengan cara ini.(Lihat poin 1 )

Hal berikutnya yang perlu dipertimbangkan adalah perilaku umum MongoDB. Sehingga proses server ingin yang harus dilakukan, adalah "mengkonsumsi" sebanyak banyak dari memori mesin yang tersedia sebanyak mungkin untuk menyimpan data "working set" ( collections dan/atau index ) agar "bekerja" pada data tersebut dengan cara paling efisien .

Jadi benar-benar dalam "kepentingan terbaik" dari mesin database untuk "menghabiskan" paling banyak alokasi memori itu dengan cara ini. Dengan cara itu, baik "agregat" . Anda pekerjaan dan semua lainnya proses bersamaan memiliki akses ke "data kerja" di ruang memori.

Jadi karena itu "tidak optimal" untuk MongoDB untuk "mencuri" alokasi memori ini jauh dari operasi bersamaan lainnya hanya untuk melayani operasi agregasi Anda yang sedang berjalan.

Dalam "pemrograman untuk persyaratan perangkat keras" istilah, Anda menyadari bahwa rilis mendatang memungkinkan pipa agregasi untuk menerapkan "penggunaan disk" untuk memungkinkan pemrosesan yang lebih besar. Anda selalu dapat mengimplementasikan SSD atau cepat lainnya teknologi penyimpanan. Dan tentu saja "10%" RAM tergantung pada jumlah RAM yang dipasang dalam suatu sistem. Jadi Anda selalu dapat meningkatkan itu.

Kesimpulannya adalah, MongoDB memiliki pekerjaan yang sebenarnya menjadi "penyimpanan data serentak" dan melakukannya dengan baik. Apa yang bukan adalah khusus "agregasi pelari pekerjaan " dan tidak boleh diperlakukan seperti itu.

Jadi "putus" beban kerja Anda, atau tambahkan spesifikasi perangkat keras Anda, atau cukup alihkan aktivitas "tugas berjalan" yang besar ke sesuatu yang melakukannya fokus pada pekerjaan yang sedang berjalan seperti gaya Hadoop "mapReduce", dan biarkan MongoDB melakukan pekerjaan melayani data.

Atau tentu saja, ubah desain Anda menjadi "pra-agregat" data yang diperlukan di suatu tempat "saat menulis" .

Seperti kata pepatah, "Kuda untuk kursus" , atau gunakan alat Anda untuk apa yang dirancang untuk .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Bagaimana cara mendefinisikan skema?

  2. MongoDB - Cara menemukan nilai yang berbeda berdasarkan string parsial

  3. Salin nilai array pertama ke bidang lain di MongoDB

  4. Desain dokumen MongoDB untuk komentar (dan komentar balasan mereka)

  5. Urutkan menggunakan MongoEngine?