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

Pramuat dokumen MongoDB ke dalam RAM untuk kinerja yang lebih baik

Masalah kinerja yang Anda amati pada kueri awal kemungkinan merupakan salah satu masalah berikut (dalam urutan kemungkinan yang kasar):

1) Aplikasi / layanan web Anda memiliki beberapa overhead untuk diinisialisasi pada permintaan pertama (yaitu mengalokasikan memori, menyiapkan kumpulan koneksi, menyelesaikan DNS, ...).

2) Indeks atau data yang Anda minta belum ada di memori, jadi perlu dimuat.

3) Pengoptimal Kueri mungkin memerlukan waktu sedikit lebih lama untuk dijalankan pada permintaan pertama, karena ini membandingkan eksekusi rencana untuk pola kueri Anda.

Akan sangat membantu untuk menguji kueri melalui mongo shell, dan pisahkan apakah overhead terkait dengan MongoDB atau layanan web Anda (daripada mengatur waktu keduanya, seperti yang telah Anda lakukan).

Berikut adalah beberapa catatan terkait dengan MongoDB.

Menyimpan cache

MongoDB tidak memiliki waktu "caching" untuk dokumen di memori. Ini menggunakan file yang dipetakan memori untuk I/O disk dan dokumen dalam memori didasarkan pada kueri aktif Anda (dokumen/indeks yang baru saja Anda muat) serta memori yang tersedia. Manajer memori virtual sistem operasi bertanggung jawab atas caching , dan biasanya akan mengikuti algoritme Least-Recently Used (LRU) untuk memutuskan halaman mana yang akan ditukar dari memori.

Penggunaan Memori

Perilaku yang diharapkan adalah bahwa dari waktu ke waktu MongoDB akan berkembang menggunakan semua memori kosong untuk menyimpan kumpulan data kerja aktif Anda.

Melihat db.stats() yang Anda berikan nomor (dan dengan asumsi itu adalah satu-satunya your Anda database), sepertinya ukuran database Anda saat ini sekitar 1 Gb sehingga Anda harus dapat menyimpan semuanya dalam total RAM 10 Gb Anda kecuali:

  • ada proses lain yang bersaing untuk mendapatkan memori
  • Anda telah memulai ulang mongod server dan dokumen/indeks tersebut belum diminta

Di MongoDB 2.2, ada touch baru perintah yang dapat Anda gunakan untuk memuat indeks atau dokumen ke dalam memori setelah server restart. Ini hanya boleh digunakan pada startup awal untuk "memanaskan" server, karena jika tidak, Anda dapat dengan tidak membantu memaksa data "aktif" yang sebenarnya keluar dari memori.

Pada sistem linux, misalnya, Anda dapat menggunakan top perintah dan harus melihat bahwa:

  • byte virtual/VSIZE akan cenderung menjadi ukuran seluruh database
  • jika server tidak menjalankan proses lain, byte penduduk/RSIZE akan menjadi total memori mesin (ini termasuk konten cache sistem file)
  • mongod tidak boleh menggunakan swap (karena file dipetakan ke memori)

Anda dapat menggunakan mongostat alat untuk melihat sekilas mongod Anda aktivitas .. atau lebih berguna, gunakan layanan seperti MMS untuk memantau metrik dari waktu ke waktu.

Pengoptimal Kueri

MongoDB Pengoptimal Kueri membandingkan eksekusi rencana untuk pola kueri setiap ~1.000 operasi penulisan, lalu menyimpan rencana kueri "pemenang" dalam cache hingga waktu berikutnya pengoptimal berjalan .. atau Anda secara eksplisit memanggil explain() pada kueri itu.

Ini harus mudah untuk diuji:jalankan kueri Anda di mongo shell dengan .explain() dan lihat waktu ms, dan juga jumlah entri indeks dan dokumen yang dipindai. Waktu untuk explain() bukanlah waktu sebenarnya yang dibutuhkan kueri untuk dijalankan, karena mencakup biaya untuk membandingkan rencana. Eksekusi tipikal akan jauh lebih cepat .. dan Anda dapat mencari kueri lambat di mongod log.

Secara default MongoDB akan mencatat semua kueri lebih lambat dari 100 md, jadi ini memberikan titik awal yang baik untuk mencari kueri untuk dioptimalkan. Anda dapat menyesuaikan nilai ms lambat dengan --slowms config, atau menggunakan Database Profiler perintah.

Bacaan lebih lanjut dalam dokumentasi MongoDB:




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Eksekusi kueri Mongodb memakan waktu terlalu lama

  2. MongoDB $dan kueri operator di PHP

  3. Haruskah kita menggunakan dbref atau dokumen yang disematkan dalam aplikasi yang banyak membaca

  4. Temukan url duplikat di mongodb

  5. Perbarui bidang MongoDB menggunakan nilai bidang lain