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

Pembuatan indeks besar MongoDB sangat lambat

Kesalahpahaman

Kecepatan

Bahkan ketika tidak berbicara tentang indeks multi kunci, inilah yang terjadi. Ada pemindaian tabel besar-besaran yang sedang berlangsung. Jadi mongoDB mengulangi dokumen, mencoba menemukan bidang yang akan diindeks, mengevaluasi bidang itu (menjadi null jika tidak ada dalam dokumen saat ini) dan menulis temuannya ke tidak kurang dari 6 file seperti yang kita bicarakan tentang 6 indeks. Melakukan perhitungan:200.000.000 / 86400 * 5 memberi tahu kita bahwa mongoDB melakukan ini untuk kira-kira 460 dokumen per detik atau hanya membutuhkan 2,2 milidetik per dokumen . Saya tidak akan menyebut itu lambat. Mungkin butuh waktu lama, tapi tidak lambat.

{background:true}

Menggunakan parameter ini tidak mengunci Anda dari database. Justru sebaliknya, yang dengan jelas dinyatakan dalam dokumen, baik di bagian Pembuatan Indeks dan di bagian tutorial tentang membuat indeks di latar belakang . Namun, ada kalimat yang mudah disalahartikan:

Artinya, Anda tidak dapat melakukan operasi yang berlaku untuk semua basis data dan memerlukan kunci baca atau tulis.

Cara untuk meningkatkan (di masa mendatang)

Cluster Terpotong

Gunakan cluster bersama dengan replika kumpulan pecahan. Mudah diatur dan memiliki banyak keuntungan selain peningkatan kinerja. Salah satunya adalah skalabilitas yang mudah menambahkan pecahan (dan dengan demikian menambahkan ruang dan daya komputasi ke cluster) sangat mudah. Cadangan memiliki dampak yang lebih kecil pada aplikasi. Tidak ada titik kegagalan lagi (bila dilakukan dengan benar, ini bahkan berlaku untuk pemadaman pada skala pusat data secara keseluruhan).

Gunakan sistem file yang berbeda

Maaf, menjalankan aplikasi yang bergantung pada kinerja disk io pada Server Windows tidak masuk akal bagi saya - sama sekali. ExtFS4 atau XFS antara 25% dan 40% lebih cepat dari NTFS atau ReFS, tergantung pada pengoptimalan. Ini membuat nyata perbedaan pada aplikasi yang bergantung pada disk IO seperti kasus penggunaan Anda. Kita berbicara tentang hitungan hari (bahkan tidak memperhitungkan pemetaan memori yang lebih efisien dan pengurangan konsumsi memori OS pada sistem Linux).

{background:true}

Meskipun ini tidak benar-benar meningkatkan kinerja (sebenarnya membangun indeks di latar belakang membutuhkan waktu lebih lama daripada di latar depan karena alasan yang jelas), aplikasi Anda tetap tersedia selama waktu pembuatan indeks. Jadi, tergantung pada kebutuhan Anda, ini mungkin pilihan yang layak.

Catatan samping :Ini adalah Ide Buruk™ , untuk menskalakan secara vertikal saat menggunakan mongoDB karena secara eksplisit dirancang untuk diskalakan secara horizontal. Ini terutama berlaku untuk koleksi besar seperti milik Anda karena pemrosesan paralel akan sangat meningkatkan kinerja aplikasi Anda.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb terhubung menggunakan php

  2. Menggunakan parameter maxTimeMS dengan kueri agregasi pada Mongo 2.6 dan Pymongo 2.7.1

  3. Bagaimana cara mewakili bidang MongoDB GeoJSON dalam Skema Mongoose?

  4. Impor Data ke Instans MongoDB yang Baru Anda Buat

  5. MongoDB memeriksa apakah id adalah BSON PHP yang valid