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

Di MongoDB, saya menggunakan kueri besar, bagaimana saya akan membuat indeks gabungan atau indeks tunggal, Jadi waktu respons saya meningkat

Secara umum, Anda ingin menempatkan indeks pada bidang yang paling sering digunakan sebagai kriteria filter dalam kueri paling penting/sering Anda, dimulai dengan bidang yang paling selektif terlebih dahulu. Ada beberapa panduan tentang topik sebagai bagian dari dokumentasi MongoDB . Satu pernyataan yang menarik di sana untuk kasus Anda mungkin adalah ini karena Anda memiliki banyak $or s:

Namun, hal terpenting di sini adalah mengukur, mengukur, mengukur, dan melihat rencana eksekusi kueri menggunakan jelaskan() . Alasannya karena kemungkinan besar Anda akan memiliki berbagai jenis kueri yang perlu didukung oleh aplikasi Anda dan Anda harus melakukan trade-off di beberapa titik di mana Anda harus memilih antara biaya pemeliharaan indeks (mis. tulis kunci selama pembaruan indeks &persyaratan ruang disk) dan solusi tercepat secara teoritis di mana semua bidang yang digunakan dalam satu kueri dicakup oleh satu indeks.

Seluruh topik pengindeksan itu agak kabur yang sangat bergantung pada skenario Anda yang tepat:

  • Apakah data Anda sangat diperbarui dan penulisan harus super cepat (Anda akan menginginkan indeks yang lebih sedikit/lebih kecil) atau apakah data Anda cukup stabil dengan pembacaan yang sering dan harus cepat (ikuti indeks yang lebih banyak/lebih besar)?
  • Jenis kueri apa yang perlu Anda dukung? Seberapa mirip mereka dalam hal filter? Akankah kombinasi filter tertentu lebih mungkin daripada yang lain? Kueri mana yang perlu berkinerja baik, mana yang bisa sedikit lebih lambat?
  • Bagaimana data di bidang Anda yang berpotensi diindeks didistribusikan?
  • dan seterusnya...

Anda tidak akan menemukan indeks tunggal yang membantu semua kueri Anda untuk melakukan yang terbaik. Dan juga, saat menambahkan lebih banyak indeks atau mengubah yang sudah ada, ini dapat menyebabkan pengoptimal kueri berhenti menggunakan beberapa indeks untuk beberapa kueri dan memilih rencana eksekusi yang berbeda yang mungkin diinginkan atau tidak diinginkan. Jadi ukur semua yang penting pada setiap perubahan pada pengindeksan atau tata letak data fisik Anda (pengaturan perangkat keras, sharding ...). Terakhir, Anda harus mengukur kinerja kueri Anda secara teratur seiring bertambahnya jumlah data, kecuali jika distribusinya dapat diprediksi seragam.

Untuk mempersingkat cerita:Lakukan pendekatan berulang dan mulai dengan menambahkan indeks (saya sarankan untuk menambahkan satu di isBlockedByAdmin , isDelete dan information.shares.userId ) kemudian ukur kinerja kueri Anda, lalu saring indeks berdasarkan temuan Anda (dan lagi, dan lagi, ...).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Node tidak terhubung ke Mongo lebih dari sekali

  2. Mongoexport menggunakan batasan $gt dan $lt pada rentang tanggal

  3. menanyakan koleksi tanpa melewati skema di luwak

  4. mongodb c# pilih notasi titik bidang tertentu

  5. Django-nonrel mengecualikan bidang daftar dari admin