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

Indeks MongoDB/Mongoose membuat kueri lebih cepat atau memperlambatnya?

Anda salah membacanya

Anda salah membaca maksud dari blok yang dikutip di sana tentang apa .ensureIndex() ( sekarang tidak digunakan lagi, tetapi masih dipanggil dengan kode luwak ) sebenarnya ada di sini dalam konteksnya.

Di luwak, Anda menentukan indeks baik pada skema atau tingkat model yang sesuai dengan desain Anda. Apa yang dilakukan luwak "secara otomatis" untuk Anda adalah pada koneksi yang memeriksa setiap model terdaftar dan kemudian memanggil .ensureIndex() yang sesuai metode untuk definisi indeks yang disediakan.

Apa yang sebenarnya dilakukan ini?

Biasanya, setelah Anda memulai aplikasi Anda sebelumnya dan .ensureIndexes() metode yang dijalankan adalah Benar-benar Tidak Ada . Pernyataan itu sedikit berlebihan, tetapi kurang lebih benar.

Karena definisi indeks telah dibuat pada kumpulan server, panggilan berikutnya tidak melakukan apa pun. Yaitu, itu tidak menjatuhkan indeks dan "membuat ulang". Jadi biaya sebenarnya pada dasarnya tidak ada, setelah indeks itu sendiri dibuat.

Membuat indeks

Jadi karena luwak hanyalah lapisan di atas API standar, createIndex() metode berisi semua detail tentang apa yang terjadi.

Ada beberapa detail yang perlu dipertimbangkan di sini, seperti pembuatan indeks dapat terjadi di "latar belakang", dan meskipun hal ini tidak terlalu mengganggu aplikasi Anda, hal ini memerlukan biaya sendiri. Khususnya bahwa ukuran indeks dari pembuatan "latar belakang" akan lebih besar daripada jika Anda membuatnya di latar depan, memblokir operasi lain.

Juga semua indeks dikenakan biaya, terutama dalam hal penggunaan disk serta biaya tambahan untuk menulis informasi tambahan di luar pengumpulan data itu sendiri.

Keuntungan dari indeks adalah jauh lebih cepat untuk "mencari" nilai yang terkandung dalam indeks daripada mencari melalui seluruh koleksi dan mencocokkan kondisi yang memungkinkan.

Ini adalah "pertukaran" dasar yang terkait dengan indeks.

Pola Penerapan

Kembali ke blok kutipan dari dokumentasi, ada maksud sebenarnya di balik saran ini.

Biasanya dalam pola penerapan dan khususnya dengan migrasi data untuk melakukan hal-hal dalam urutan ini:

  1. Mengisi data ke koleksi/tabel yang relevan
  2. Aktifkan indeks pada data koleksi/tabel yang relevan dengan kebutuhan Anda

Ini karena ada biaya yang terlibat dengan pembuatan indeks, dan seperti yang disebutkan sebelumnya, diinginkan untuk mendapatkan ukuran paling optimal dari pembuatan indeks, serta menghindari setiap penyisipan dokumen juga memiliki overhead menulis entri indeks saat Anda melakukan "muat" ini secara massal.

Jadi itulah gunanya indeks, itulah biaya dan manfaat dan pesan dalam dokumentasi luwak dijelaskan.

Namun secara umum, saya sarankan membaca Indeks Database untuk apa mereka dan apa yang mereka lakukan. Pikirkan berjalan ke perpustakaan untuk menemukan buku. Ada indeks kartu di sana di pintu masuk. Apakah Anda berjalan-jalan di perpustakaan untuk menemukan buku yang Anda inginkan? Atau apakah Anda mencarinya di indeks kartu untuk menemukan di mana letaknya? Indeks itu membutuhkan waktu bagi seseorang untuk membuat dan juga memperbaruinya, tetapi ini menghemat waktu "Anda" untuk berjalan-jalan di seluruh perpustakaan hanya agar Anda dapat menemukan buku Anda.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kerangka agregasi MongoDB $kurangi

  2. Redis atau Mongo untuk menentukan apakah suatu angka termasuk dalam rentang?

  3. Kurangi subdokumen dari koleksi dalam pipa agregat

  4. Dokumen acak mongoid

  5. Masukkan kriteria pencocokan Elemen Array dalam dokumen MongoDB?