Sesuai dokumentasi Mongoose untuk MongooseJS
dan MongoDB
/ Node.js
:
Saat aplikasi Anda dimulai, Mongoose secara otomatis memanggil
ensureIndex
setiap indeks yang ditentukan dalam skema Anda. Meskipun bagus untuk pengembangan, disarankan agar perilaku ini dinonaktifkan dalam produksi karena pembuatan indeks dapat menyebabkan dampak kinerja yang signifikan. Nonaktifkan perilaku tersebut dengan menyetelautoIndex
opsi skema Anda ke false.
Ini tampaknya menginstruksikan penghapusan pengindeksan otomatis dari luwak sebelum menerapkan untuk mengoptimalkan Mongoose dari menginstruksikan Mongo untuk pergi dan melakukan churn melalui semua indeks saat memulai aplikasi, yang tampaknya masuk akal.
Apa cara yang tepat untuk menangani pengindeksan dalam kode produksi? Mungkin skrip eksternal harus menghasilkan indeks? Atau mungkin ensureIndex
tidak diperlukan jika satu aplikasi adalah satu-satunya pembaca / penulis untuk sebuah koleksi karena itu akan melanjutkan indeks setiap kali terjadi penulisan DB?
Sunting: Untuk melengkapi, MongoDB menyediakan dokumentasi yang baik tentang bagaimana melakukan pengindeksan, tetapi tidak mengapa atau kapan arahan pengindeksan eksplisit harus dilakukan. Menurut saya indeks harus tetap diperbarui oleh aplikasi penulis secara otomatis pada koleksi dengan indeks yang ada dan itu ensureIndex
benar-benar lebih dari satu kali (dilakukan ketika indeks baru diterapkan), dalam hal ini Mongoose autoIndex
harus menjadi no-op di bawah restart server normal.
autoIndex
salah, Anda perlu memanggil sureIndexes pada model Anda untuk membuat indeksnya.Meskipun saya setuju dengan jawaban yang diterima, perlu dicatat bahwa menurut manual MongoDB , ini bukan cara yang disarankan untuk menambahkan indeks pada server produksi:
Tentu saja, ini sangat bergantung pada bagaimana aplikasi Anda disusun dan diterapkan. Jika Anda menerapkan ke Heroku, misalnya, dan Anda tidak menggunakan fitur pra - booting Heroku , kemungkinan aplikasi Anda tidak melayani permintaan sama sekali selama permulaan, jadi mungkin aman untuk membuat indeks pada saat itu.
Selain itu, dari jawaban yang diterima:
Jika Anda telah berhasil mendapatkan model data dan kueri Anda untuk pertama kalinya, ini bagus, dan seringkali demikian. Namun, jika Anda menambahkan fungsionalitas baru ke aplikasi Anda, dengan kueri DB baru pada properti tanpa indeks, Anda akan sering menemukan diri Anda menambahkan indeks ke koleksi yang berisi banyak dokumen yang sudah ada.
Ini adalah waktu di mana Anda perlu berhati-hati dalam menambahkan indeks, dan dengan cermat mempertimbangkan implikasi kinerja dari melakukannya. Misalnya, Anda dapat membuat indeks di latar belakang :
sumber
ensureIndex
lagi. AdacreateIndex
sebagai gantinya. Apakah saya benar?gunakan kode blok ini untuk menangani mode produksi:
sumber