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

Pipa agregat MongoDB lambat setelah langkah pertandingan pertama

JAWABAN 2019

Jawaban ini untuk MongoDB 4.2

Setelah membaca pertanyaan dan diskusi di antara kalian, saya yakin bahwa masalah tersebut telah teratasi tetapi pengoptimalan masih merupakan masalah umum bagi semua yang menggunakan MongoDB.

Saya menghadapi masalah yang sama, dan berikut adalah tip untuk pengoptimalan kueri.

Koreksi saya jika saya salah :)

1. Tambahkan indeks pada koleksi

Indeks memainkan peran penting dalam menjalankan kueri dengan cepat karena Indeks adalah struktur data yang dapat menyimpan kumpulan data koleksi dalam bentuk yang mudah dilintasi. Kueri dieksekusi secara efisien dengan bantuan indeks di MongoDB.

Anda dapat membuat berbagai jenis indeks sesuai dengan kebutuhan Anda. Pelajari lebih lanjut tentang indeks di sini, dokumentasi resmi MongoDB.

2. Pengoptimalan saluran

  • Selalu gunakan $match sebelum $project , karena filter menghapus dokumen dan bidang tambahan dari tahap berikutnya.
  • Selalu ingat, indeks digunakan oleh $match dan $sort . Jadi, coba tambahkan indeks ke bidang tempat Anda akan menyortir atau memfilter dokumen.
  • Cobalah untuk menyimpan urutan ini dalam kueri Anda, gunakan $sort before $limit seperti $sort + $limit + $skip. Karena $sort memanfaatkan indeks dan memungkinkan MongoDB memilih paket kueri yang diperlukan saat menjalankan kueri.
  • Selalu gunakan $limit sebelum $skip sehingga melewatkan akan diterapkan untuk membatasi Dokumen.
  • Gunakan $project untuk mengembalikan hanya data yang diperlukan di tahap berikutnya.
  • Selalu buat indeks pada atribut foreignField di $lookup . Juga, karena pencarian menghasilkan larik, kami biasanya melepasnya di tahap berikutnya. Jadi, alih-alih melepasnya di tahap berikutnya, lepaskan di dalam pencarian seperti:

    {
    $lookup: {
        from: "Collection",
        as: "resultingArrays",
        localField: "x",
        foreignField: "y",
        unwinding: { preserveNullAndEmptyArrays: false }
    

    }}

  • Gunakan allowDiskUse dalam agregasi, dengan bantuannya operasi agregasi dapat menulis data ke subdirektori _tmp di direktori Jalur Basis Data. Ini digunakan untuk melakukan kueri besar pada direktori temp. Misalnya:

     db.orders.aggregate(
     [
            { $match: { status: "A" } },
            { $group: { _id: "$uid", total: { $sum: 1 } } },
            { $sort: { total: -1 } }
     ],
     {
            allowDiskUse: true
     },
     )
    

3. Bangun kembali indeks

Jika Anda cukup sering membuat dan menghapus indeks, bangun kembali indeks Anda. Ini membantu MongoDB untuk menyegarkan, paket kueri yang disimpan sebelumnya, cache, yang terus mengambil alih paket kueri yang diperlukan, percayalah, masalah itu menyebalkan :(

4. Hapus indeks yang tidak diinginkan

Terlalu banyak indeks membutuhkan terlalu banyak waktu dalam operasi Buat, Perbarui, dan Hapus karena mereka perlu membuat indeks bersama dengan tugas mereka. Jadi, menghapusnya sangat membantu.

5. Membatasi Dokumen

Dalam skenario dunia nyata, mengambil data lengkap yang ada di database tidak membantu. Selain itu, Anda tidak dapat menampilkannya atau pengguna tidak dapat membaca data lengkap yang diambil. Jadi, alih-alih mengambil data lengkap, ambil data dalam potongan yang membantu Anda dan klien Anda menonton data itu.

Dan terakhir, melihat rencana eksekusi apa yang dipilih oleh MongoDB membantu dalam mencari tahu masalah utama. Jadi, $explain akan membantu Anda dalam mencari tahu.

Semoga ringkasan ini akan membantu kalian, jangan ragu untuk menyarankan poin baru jika saya melewatkannya. Saya akan menambahkannya juga.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Sumber Daya MongoDB Teratas

  2. MongoDB Hubungan Satu ke Banyak

  3. Kembalikan hasil sebagai Array Nilai Saja

  4. Dapatkan _id dari dokumen yang dimasukkan di MongoDB?

  5. MongoDB Gagal Memulai - ***batalkan setelah kegagalan fassert()