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

Apakah fungsi javascript sisi server memiliki masalah kinerja di mongoDB?

Ketika Anda bertanya tentang kelayakan javascript sisi-server, pertama-tama Anda harus menjelaskan jenis javascript sisi-server apa yang sedang Anda bicarakan. Menurut dokumentasi , ada empat jenis eksekusi kode sisi server yang berbeda. Sayangnya mereka semua adalah semacam solusi peretasan untuk situasi di mana API asli tidak mencukupi:

eval perintah

eval memiliki kelemahan yaitu hanya berjalan pada satu node. Ini sangat mengurangi kegunaannya dalam lingkungan berkerumun. Dengan koleksi sharding, itu tidak berfungsi sama sekali!

Secara default, ini juga membuat kunci global yang membuat database benar-benar tidak dapat digunakan hingga skrip dijalankan. Ini dapat dicegah dengan nolock argumen (kecuali skrip itu sendiri melakukan sesuatu yang membuat kunci global).

Jawaban Sammaye juga menjelaskan beberapa masalah keamanan yang serius.

Ini benar-benar lebih merupakan alat tes dan administrasi daripada sesuatu yang harus Anda gunakan untuk operasi reguler apa pun.

Menjalankan file .js melalui Instance shell mongo di Server

Dalam hal ini, kode tidak dieksekusi pada database, melainkan pada proses independen lain di salah satu server. Ini berarti bahwa semua data yang diperlukan dari pecahan lain harus ditransfer ke server yang menjalankan kode javascript, tidak peduli apa yang sebenarnya dikembalikan oleh skrip.

Itu muncul sebagai aplikasi lain ke server mongodb, jadi itu tidak dapat melakukan apa pun yang juga tidak dapat Anda lakukan dari dalam aplikasi biasa Anda. Ini adalah alat tes dan administrasi lain yang tidak boleh Anda gunakan dalam operasi reguler.

Temukan dengan $where -operator

Operator $where dalam perintah find memungkinkan untuk melewatkan fungsi javascript yang digunakan untuk memfilter nilai. Untuk sebagian besar kasus sepele, performa ini jauh lebih rendah daripada yang ditawarkan alat lain dari kueri pencarian, terutama karena tidak dapat menggunakan indeks apa pun.

Ketika penggunaan $where tidak dapat dihindari, setidaknya coba gunakan beberapa alat normal dari find-query untuk mengurangi kumpulan dokumen yang perlu diteruskan ke fungsi $where.

MapReduce

MapReduce menggunakan dua fungsi javascript untuk membuat data agregat. Dulunya adalah alat penambangan data utama untuk MongoDB, tetapi sebagian besar kasus penggunaan yang biasa sekarang dipenuhi oleh kerangka kerja agregasi .

Ini juga memiliki kelemahan yang sama dengan $where:Kecuali Anda memfilter, Anda harus menjalankan tidak hanya satu tetapi setidaknya dua fungsi javascript untuk setiap dokumen.

Tapi MapReduce setidaknya bisa berjalan terdistribusi dan bisa diparalelkan.

tl;dr:

Menggunakan Javascript adalah langkah terakhir untuk kueri yang sangat tidak biasa yang tidak dapat dibuat dengan bahasa kueri normal dan yang memerlukan akses ke terlalu banyak data untuk diimplementasikan dalam aplikasi. Jika memungkinkan, lakukan apa yang ingin Anda lakukan dengan alat khusus yang telah tersedia atau terapkan logika Anda pada lapisan aplikasi.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Seberapa cepat Redis daripada mongoDB?

  2. cara mengimpor file csv ke mongodb di Jawa

  3. cara yang tepat untuk memuat pemetaan array terkait hash mongodb saat tidak menggunakan anotasi dengan pengakses aneh

  4. Mongo Pertanyaan kueri $gt,$lt

  5. temukan di MongoCollection<Document>