Cara Meningkatkan Pertanyaan dengan Pengindeksan MongoDB

Cara Meningkatkan Pertanyaan Dengan Pengindeksan Mongodb



Meningkatkan kelajuan pertanyaan adalah penting untuk MongoDB dan semua sistem pangkalan data lain. Dengan membina struktur data yang membantu MongoDB mengenal pasti rekod dengan lebih pantas, pengindeksan ialah pendekatan yang mujarab untuk mempercepatkan dan mengoptimumkan carian. Indeks termasuk salinan beberapa data daripada rekod untuk membuat pertanyaan lebih berkesan. Ini menyelaraskan usaha yang terlibat dalam menjawab permintaan dalam MongoDB. Dalam panduan ini, kita akan membincangkan penggunaan indeks dengan bantuan jenis pengindeksan yang berbeza.

Buat Koleksi

Sebelum menggunakan indeks, kami perlu mencipta koleksi baharu dalam MongoDB kami. Kami telah mencipta satu dan memasukkan 10 dokumen, dinamakan 'Dummy'. Fungsi find() MongoDB memaparkan semua rekod daripada koleksi 'Dummy' pada skrin cangkerang MongoDB di bawah.

test> db.Dummy.find()







Pilih Jenis Pengindeksan

Sebelum menubuhkan indeks, anda mesti terlebih dahulu menentukan lajur yang biasa digunakan dalam kriteria pertanyaan. Indeks berprestasi baik pada lajur yang kerap ditapis, diisih atau dicari. Medan dengan kardinaliti yang besar (banyak nilai yang berbeza) selalunya merupakan pilihan pengindeksan yang sangat baik. Berikut ialah beberapa contoh kod untuk jenis indeks yang berbeza.



Contoh 01: Indeks Medan Tunggal

Ia mungkin jenis indeks yang paling asas, yang mengindeks satu lajur untuk meningkatkan kelajuan pertanyaan pada lajur tersebut. Jenis indeks ini digunakan untuk pertanyaan di mana anda menggunakan medan kunci tunggal untuk menanyakan rekod koleksi. Andaikan anda menggunakan medan 'jenis' untuk menanyakan rekod koleksi 'Dummy' dalam fungsi cari seperti di bawah. Perintah ini akan melihat keseluruhan koleksi, yang mungkin mengambil masa yang lama untuk koleksi besar diproses. Oleh itu, kita perlu mengoptimumkan prestasi pertanyaan ini.



test> db.Dummy.find({type: 'emp' })





Rekod koleksi Dummy di atas telah ditemui menggunakan medan 'jenis' iaitu mengandungi syarat. Oleh itu, indeks kunci tunggal boleh digunakan di sini untuk mengoptimumkan pertanyaan carian. Jadi, kami akan menggunakan fungsi createIndex() MongoDB untuk mencipta indeks pada medan 'jenis' koleksi 'Dummy'. Ilustrasi menggunakan pertanyaan ini memaparkan kejayaan penciptaan indeks kunci tunggal bernama 'type_1' pada shell.

test> db.Dummy.createIndex({ jenis: 1 })

Mari gunakan pertanyaan find() sebaik sahaja ia mendapat manfaat menggunakan medan 'jenis'. Operasi akan menjadi jauh lebih pantas sekarang daripada fungsi find() yang digunakan sebelum ini kerana indeks tersedia kerana MongoDB boleh menggunakan indeks untuk mendapatkan semula rekod dengan cepat dengan tajuk kerja yang diminta.



test> db.Dummy.find({type: 'emp' })

Contoh 02: Indeks Kompaun

Kita mungkin ingin mencari item berdasarkan pelbagai kriteria dalam keadaan tertentu. Melaksanakan indeks kompaun untuk medan ini boleh membantu meningkatkan prestasi pertanyaan. Katakan, kali ini, anda ingin mencari daripada koleksi 'Dummy' menggunakan berbilang medan yang mengandungi keadaan carian yang berbeza semasa pertanyaan dipaparkan. Pertanyaan ini telah mencari rekod daripada koleksi yang medan 'jenis' ditetapkan kepada 'emp,' dan medan 'sal' lebih besar daripada 350.

Operator logik $gte telah digunakan untuk menggunakan syarat pada medan 'sal'. Sebanyak dua rekod telah dipulangkan selepas mencari keseluruhan koleksi yang terdiri daripada 10 rekod.

test> db.Dummy.find({type: 'emp' , sal: {$gte: 350 } })

Mari buat indeks kompaun untuk pertanyaan yang disebutkan di atas. Indeks kompaun ini mempunyai medan 'jenis' dan 'sal'. Nombor '1' dan '-1' masing-masing mewakili tertib menaik dan menurun, untuk medan 'jenis' dan 'sal'. Urutan lajur indeks kompaun adalah penting dan harus sepadan dengan corak pertanyaan. MongoDB telah memberikan nama 'type_1_sal_-1' kepada indeks kompaun ini seperti yang dipaparkan.

test> db.Dummy.createIndex({ jenis: 1 , akan:- 1 })

Selepas menggunakan pertanyaan find() yang sama untuk mencari rekod dengan nilai medan 'jenis' sebagai 'emp' dan nilai medan 'sal' lebih besar daripada sama dengan 350, kami telah memperoleh output yang sama dengan sedikit perubahan dalam susunan berbanding hasil pertanyaan sebelumnya. Rekod nilai yang lebih besar untuk medan 'sal' kini berada di tempat pertama, manakala yang terkecil adalah yang paling rendah mengikut set '-1' untuk medan 'sal' dalam indeks kompaun di atas.

test> db.Dummy.find({type: 'emp' , sal: {$gte: 350 } })

Contoh 03: Indeks Teks

Kadangkala, anda mungkin menghadapi situasi di mana anda harus berurusan dengan set data yang besar, seperti perihalan besar produk, ramuan, dll. Indeks teks mungkin berguna untuk melakukan carian teks penuh pada medan teks yang besar. Sebagai contoh, kami telah mencipta koleksi baharu bernama 'Ujian' dalam pangkalan data ujian kami. Memasukkan sejumlah 6 rekod dalam koleksi ini menggunakan fungsi insertMany() seperti pertanyaan find() di bawah.

test> db.Test.insertMany([

{nama: 'Ana' , daripada: 'Dia tinggal di London dan seorang guru yang baik' },

{nama: 'Robert' , daripada: 'Dia adalah pemain bola sepak yang hebat' },

{nama: 'dari' , daripada: 'Mungkin melancong ke Dubai' },

{nama: 'Yakub' , daripada: 'Dia hebat dan kaya.' },

{nama: 'Cillian' , daripada: 'Permulaan hebat filem baru sahaja mendapat kemasyhuran dalam sekejap' },

{nama: 'Ken' , daripada: 'Pencinta makanan. Dia boleh makan awak juga.' }

])

Sekarang, kami akan mencipta indeks teks pada medan 'Des' koleksi ini, menggunakan fungsi createIndex() MongoDB. Kata kunci 'teks' dalam nilai medan memaparkan jenis indeks, iaitu indeks 'teks'. Nama indeks, des_text, telah dijana secara automatik.

test> db.Test.createIndex({ des: 'teks' })

Kini, fungsi find() telah digunakan untuk melakukan 'search-text' pada koleksi melalui indeks 'des_text'. Operator $search telah digunakan untuk mencari perkataan 'makanan' dalam rekod koleksi dan memaparkan rekod tertentu itu.

test> db.Test.find({ $teks: { $search: 'makanan' }});

Sahkan Indeks:

Anda boleh menyemak dan menyenaraikan semua indeks yang digunakan bagi koleksi berbeza dalam MongoDB anda. Untuk ini, gunakan kaedah getIndexes() bersama-sama dengan nama koleksi dalam skrin cangkerang MongoDB anda. Kami telah menggunakan arahan ini secara berasingan untuk koleksi 'Ujian' dan 'Dummy'. Ini menunjukkan semua maklumat yang diperlukan mengenai indeks terbina dalam dan ditentukan pengguna pada skrin anda.

test> db.Test.getIndexes()

test> db.Dummy.getIndexes()

Jatuhkan Indeks:

Sudah tiba masanya untuk memadamkan indeks yang telah dibuat sebelum ini untuk koleksi menggunakan fungsi dropIndex() bersama-sama dengan nama medan yang sama yang digunakan indeks. Pertanyaan di bawah menunjukkan bahawa indeks tunggal telah dialih keluar.

test> db.Dummy.dropIndex({type: 1 })

Dengan cara yang sama, indeks kompaun boleh dijatuhkan.

test> db.Dummy.drop index({type: 1 , akan: 1 })

Kesimpulan

Dengan mempercepatkan pengambilan data daripada MongoDB, pengindeksan adalah penting untuk meningkatkan kecekapan pertanyaan. Tanpa indeks, MongoDB mesti mencari keseluruhan koleksi untuk rekod yang sepadan, yang menjadi kurang berkesan apabila saiz set bertambah. Keupayaan MongoDB untuk menemui rekod yang betul dengan pantas menggunakan struktur pangkalan data indeks mempercepatkan pemprosesan pertanyaan apabila pengindeksan yang sesuai digunakan.