‫Jonas: Selamat datang kembali.
‫Jadi sekarang mari
‫kita bicara sedikit tentang kinerja baca di MongoDB,
‫mengapa sesuatu yang disebut indeks sangat penting,
‫dan bagaimana kita dapat membuatnya sendiri.
‫Dan saya ingin memulai demonstrasi tentang indeks ini dengan
‫meluncurkan kueri sederhana di semua tur kami.
‫Jadi mari datang ke sini untuk mendapatkan
‫semua tur dan saya
‫juga akan memfilter dengan harga kurang dari 1.000.
‫Oke dan jadi mari kita lihat.
‫Ya, jadi kita mendapatkan tiga hasil kembali, oke.
‫Dan itu penting untuk diingat untuk
‫apa yang akan saya tunjukkan selanjutnya
‫yaitu bahwa kita sebenarnya juga bisa mendapatkan beberapa statistik
‫tentang kueri itu sendiri.
‫Jadi mari kita pergi ke sini pada dasarnya ke fungsi handler.
‫Jadi ini ingat sekarang di pabrik handler.
‫Benar, jadi ini, saya pikir itu di
‫bagian bawah.
‫Ya jadi begini, dapatkan semua fungsi pabrik
‫yang akan membuat penangan ini yang
‫dipanggil untuk kueri yang baru saja kita lakukan.
‫Jadi di sini pada
‫kueri, saya sebenarnya sekarang akan menambahkan metode penjelasan.
‫Oke jadi setelah permintaan kami kemudian akan menelepon menjelaskan baik-baik saja.
‫Jadi mari kita lihat itu.
‫Dan sekarang kita mendapatkan hasil yang sama sekali
‫berbeda, yang pada dasarnya adalah statistik ini.
‫Sekarang ada banyak barang di sini.
‫Tapi
‫yang sangat saya minati adalah statistik eksekusi ini, oke.
‫Jadi bisa dilihat disini
‫jumlah dokumen yang dikembalikan ada tiga.
‫Dan itulah hasil yang kami dapatkan sebelumnya.
‫Jadi sebelum melakukan penjelasan yang benar.
‫Tapi yang benar-benar penting untuk
‫diperhatikan di
‫sini adalah jumlah dokumen yang diperiksa adalah sembilan, oke.
‫Jadi ini berarti MongoDB harus memeriksa,
‫jadi pada dasarnya memindai semua sembilan dokumen
‫untuk menemukan tiga yang benar.
‫Jadi tiga yang cocok dengan kueri oke.
‫Dan itu sama sekali tidak efisien kan?
‫Sekarang tentu saja pada
‫skala ini dengan hanya sembilan dokumen sama sekali tidak ada bedanya.
‫Tetapi jika kami memiliki ratusan
‫ribu, atau bahkan jutaan dokumen di
‫sini, maka ini akan
‫sangat memengaruhi kinerja baca kueri ini.
‫Jadi sekali lagi, itu tidak akan terjadi di aplikasi ini, tetapi
‫mungkin di aplikasi yang akan Anda bangun suatu hari nanti.
‫Jadi Anda benar-benar perlu belajar tentang indeks.
‫Karena dengan indeks, kita
‫akan dapat memecahkan masalah ini.
‫Jadi kita bisa membuat indeks pada bidang tertentu dalam koleksi.
‫Misalnya Mongo secara otomatis membuat indeks
‫pada bidang ID secara default.
‫Dan mari kita lihat di Kompas oke.
‫Misalnya di semua tur, kami memiliki tab indeks di sini.
‫Jadi sampai saat ini kami hanya pernah berada di
‫sini di tab dokumen,
‫tetapi seperti yang Anda lihat, kami memiliki banyak hal yang berbeda
‫di sini dan salah satunya adalah indeks.
‫Dan sekali lagi Anda melihat bahwa secara default kami memiliki indeks ID.
‫Dan indeks ID ini pada dasarnya adalah daftar berurutan
‫dari semua ID yang disimpan di suatu
‫tempat di luar koleksi, oke.
‫Dan Anda benar-benar dapat
‫melihat ukurannya di sini, yang memiliki 36 kilobyte, indeks ini baik-baik saja.
‫Dan indeks ini sangat berguna.
‫Karena setiap kali dokumen
‫ditanyai oleh ID MongoDB akan mencari indeks yang dipesan itu alih-alih
‫mencari melalui seluruh koleksi dan melihat
‫semua dokumen satu per satu, yang
‫tentu saja jauh lebih lambat.
‫Jadi sekali lagi tanpa indeks, Mongo harus melihat setiap
‫dokumen satu per satu.
‫Tetapi dengan indeks pada bidang yang kita minta,
‫proses ini menjadi jauh lebih efisien.
‫Jadi itu cukup cerdas, bukan?
‫Dan tentu saja, kita dapat mengatur indeks kita
‫sendiri pada bidang yang sering kita kueri.
‫Jadi, mari kita lakukan itu dengan bidang
‫harga yang baru saja kita tanyakan
‫sebelumnya karena saya yakin itu adalah salah satu
‫yang paling penting yang akan ditanyakan orang, oke.
‫Dan begitulah cara kerjanya.
‫Jadi kita harus pergi ke model tur yang benar.
‫Dan kemudian mari kita lakukan di sini setelah deklarasi batin ini
‫dan kita katakan tourschema. indeks oke.
‫Dan kemudian sebuah objek dengan nama bidang
‫dan ingat bagaimana saya katakan
‫kita akan menetapkan indeks pada harga dan kemudian salah satu atau satu minus.
‫Dan satu berarti kita mengurutkan indeks
‫harga dalam urutan
‫menaik, sedangkan yang minus berarti urutan menurun, oke.
‫Dan sebenarnya ada jenis indeks lainnya, seperti untuk
‫teks atau untuk data geospasial, tetapi
‫kita akan melihatnya nanti.
‫Oke, jadi mari kita simpan
‫sekarang dan coba kueri kita lagi.
‫Dan sebenarnya saya akan melakukannya beberapa kali
‫di sini untuk memastikan bahwa indeks benar-benar diatur.
‫Karena terkadang tidak langsung diatur.
‫Tapi sekarang mari kita lihat di sini.
‫Jadi memang kami masih mendapatkan jumlah pengembalian kami tiga
‫tapi kali ini jumlah dokumen yang
‫diperiksa, jadi yang dipindai, juga hanya tiga.
‫Dan itu membuktikan bahwa dengan indeks
‫ini, kami pada dasarnya mencapai apa yang kami inginkan.
‫Jadi sebelumnya kami harus memindai kesembilan dokumen dan
‫sekarang mesin hanya perlu memindai tiga dokumen
‫yang sebenarnya juga dikembalikan.
‫Dan lagi karena harga
‫mereka sekarang dipesan dalam indeks itu.
‫Dan itu membuatnya lebih mudah dan
‫lebih cepat bagi mesin MongoDB untuk menemukannya.
‫Jadi ini tentu saja merupakan peningkatan kinerja yang sangat besar.
‫Sekarang mari kita periksa juga Kompas di sini,
‫dan sebenarnya mari kita memuat ulang seluruh database, dan
‫sekarang seharusnya benar-benar ada
‫di sini tetapi untuk beberapa alasan tidak.
‫Mari kita coba memuat ulang dokumen.
‫Mungkin itu muncul kemudian.
‫Tidak juga, mari kita juga menganalisis skemanya, dan itu
‫adalah sesuatu yang
‫akan kita bicarakan nanti.
‫Tapi tetap seperti yang Anda lihat, kami masih hanya memiliki dua indeks ini.
‫Tapi itu tidak masalah sama sekali karena
‫kita sudah tahu bahwa indeks itu benar-benar berfungsi kan?
‫Jadi sangat
‫normal bahwa terkadang ini membutuhkan waktu untuk diperbarui.
‫Sekarang hal lain yang mungkin Anda perhatikan di
‫sini adalah bagaimana indeks ID
‫yang kita bicarakan sebelumnya dikatakan unik di sini, oke.
‫Dan begitu uniknya juga properti yang
‫bisa kita berikan untuk indeks.
‫Dan inilah sebenarnya
‫alasan mengapa ID harus selalu unik.
‫Jadi hanya karena
‫indeks ID memiliki properti unik ini.
‫Anda mungkin juga memperhatikan bahwa ada indeks untuk
‫nama di sini bukan?
‫Tapi kami tidak benar-benar membuatnya sendiri secara manual kan?
‫Jadi bisakah Anda menebak mengapa itu ada di sini?
‫Itu karena dalam definisi skema kami, kami
‫mengatur bidang nama menjadi unik.
‫Jadi apa yang Mongos lakukan
‫di belakang layar untuk memastikan keunikan bidang
‫ini adalah membuat indeks unik untuknya, oke.
‫Dan karena itu, tidak hanya
‫ID tetapi juga nama harus selalu unik.
‫Oke dan ini sudah bagus.
‫Jadi ketika semua yang pernah kita
‫lakukan hanyalah query untuk
‫satu bidang saja, maka indeks bidang tunggal
‫sempurna karena mengingat indeks yang baru
‫saja kita atur sebelumnya disebut indeks bidang tunggal.
‫Tidak yakin apakah saya menyebutkannya saat itu tetapi saya pikir saya melakukannya.
‫Tapi bagaimanapun, jika kita kadang-kadang menanyakan bidang
‫itu tetapi digabungkan dengan yang lain,
‫maka sebenarnya lebih
‫efisien untuk membuat indeks gabungan.
‫Jadi satu dengan dua bidang dan bukan hanya satu.
‫Jadi mari kita buat kueri untuk itu hanya untuk mengilustrasikannya.
‫Dan bidang lain yang
‫menurut saya akan ditanyakan sepanjang waktu adalah rata-rata peringkat.
‫Jadi peringkat rata-rata, saya pikir begitulah namanya, dan katakanlah kita ingin lebih
‫besar atau sama dengan 4. 7 oke.
‫Mari kita kirim pertanyaan itu.
‫Dan mari kita lihat berapa banyak hasil yang kita dapatkan.
‫Dimanakah itu?
‫Ya di sini.
‫Jadi jumlah hasil,
‫jadi jumlah dokumen yang dikembalikan,
‫sehingga cocok dengan kueri ini adalah dua.
‫Tapi kami masih harus memeriksa tiga dokumen.
‫Dan sekali lagi, pada skala ini
‫tentu saja, tidak ada bedanya.
‫Tetapi seperti yang Anda pahami, ini hanyalah sebuah contoh.
‫Dan sekarang kami ingin memperbaiki situasinya juga dan untuk
‫itu kami akan menggunakan indeks gabungan.
‫Jadi mari kita kembali ke sini.
‫Komentar yang satu ini.
‫Atau sebenarnya duplikat dulu dan kemudian komentar.
‫Dan sebenarnya sangat sederhana.
‫Yang perlu kita lakukan adalah menambahkan bidang lain di sini.
‫Jadi peringkat rata-rata dan mari kita letakkan yang ini
‫dalam urutan menaik.
‫Atau sebenarnya, begitulah urutannya.
‫Jadi mari kita simpan ini.
‫Mari kita kembali ke sini.
‫Dan lagi, saya akan melakukannya beberapa kali di sini oke.
‫Dan mari kita lihat hasil kita.
‫Dan sekarang kita mendapatkan hasil yang kita inginkan.
‫Jadi hanya dua dokumen yang
‫dipindai untuk menemukan dua dokumen yang sebenarnya kami cari.
‫Sempurna dan sebenarnya indeks gabungan yang baru saja kita buat
‫ini juga akan berfungsi saat kueri hanya untuk satu
‫dari dua bidang ini di sini satu per satu,
‫jadi harga atau peringkat rata-rata.
‫Jadi ketika kita membuat indeks gabungan seperti
‫ini, kita tidak harus membuat
‫satu individu untuk masing-masing bidang juga oke.
‫Saya hanya ingin melihat tampilannya di Kompas sekarang.
‫Tapi yah itu masih terlihat sama.
‫Tapi sekali lagi, tidak terlalu penting.
‫Satu hal yang masih bisa kita
‫lihat di sini dan
‫yang cukup menarik adalah sebenarnya ukuran indeks ini.
‫Jadi 72 kilobyte sebenarnya jauh lebih besar dari
‫ukuran total semua dokumen yang digabungkan,
‫yang hanya 14 kilobyte kan?
‫Jadi pada dasarnya indeks yang kami buat
‫untuk mencari dokumen ini memakan lebih banyak ruang
‫daripada dokumen itu sendiri.
‫Tetapi sekali lagi itu hanya karena
‫kami beroperasi dalam skala kecil dalam contoh ini.
‫Dan itu tidak terlalu relevan, oke.
‫Tetapi tetap penting untuk membicarakan hal
‫ini karena sebenarnya ini membawa saya ke pertanyaan kita berikutnya.
‫Dan pertanyaannya adalah,
‫bagaimana kita memutuskan bidang mana yang sebenarnya perlu kita indeks?
‫Dan mengapa kita tidak menetapkan indeks di semua bidang?
‫Yah, kami menggunakan strategi yang saya
‫gunakan untuk menetapkan indeks pada harga dan peringkat rata-rata.
‫Jadi pada dasarnya kita perlu mempelajari pola akses aplikasi
‫kita dengan hati-hati untuk mengetahui bidang
‫mana yang paling banyak ditanyakan
‫dan kemudian mengatur indeks untuk bidang ini.
‫Misalnya, saya tidak menetapkan indeks di sini pada ukuran grup karena
‫saya tidak terlalu
‫percaya bahwa banyak orang akan menanyakan parameter itu, jadi
‫saya tidak perlu membuat indeks di sana.
‫Karena kami sebenarnya tidak ingin berlebihan dengan indeks.
‫Jadi kami tidak ingin membabi buta menetapkan indeks di semua bidang
‫dan kemudian berharap yang terbaik pada dasarnya.
‫Dan alasannya adalah
‫bahwa setiap indeks benar-benar menggunakan sumber daya,
‫sehingga Anda benar-benar dapat melihatnya di sini.
‫Dan juga, setiap indeks perlu diperbarui setiap
‫kali koleksi yang mendasarinya diperbarui.
‫Jadi jika Anda memiliki koleksi dengan rasio tulis-baca yang tinggi, sehingga
‫koleksi yang sebagian besar ditulis, maka sama
‫sekali tidak masuk akal untuk
‫membuat indeks pada bidang apa pun dalam koleksi ini
‫karena biaya untuk selalu memperbarui indeks
‫dan menyimpannya. itu dalam memori jelas melebihi manfaat
‫memiliki indeks di tempat pertama jika
‫kita jarang melakukan pencarian,
‫jadi miliki pertanyaan, untuk koleksi itu.
‫Jadi secara ringkas, ketika memutuskan
‫apakah akan mengindeks bidang tertentu
‫atau tidak, kita
‫harus menyeimbangkan frekuensi kueri menggunakan bidang
‫yang tepat itu dengan biaya pemeliharaan
‫indeks ini, dan juga dengan pola baca-tulis sumber daya.
‫Namun, seperti halnya dengan pemodelan data, tidak ada
‫aturan yang terlalu sulit di sini.
‫Jadi semuanya agak
‫kabur dan Anda benar-benar membutuhkan eksperimen
‫dan juga pengalaman untuk melakukannya dengan benar, oke.
‫Tapi apa pun yang Anda lakukan, tolong jangan abaikan pengindeksan.
‫Karena meskipun tidak sempurna,
‫itu akan selalu memiliki manfaat besar untuk aplikasi Anda.
‫Baiklah, dan itu sebenarnya semua yang saya
‫harus memberitahu Anda tentang indeks.
‫Hanya ada satu indeks lagi yang sebenarnya ingin saya atur
‫di sini yaitu untuk tour slug oke.
‫Karena nantinya kita akan
‫benar-benar ingin menggunakan siput unik untuk meminta tur.
‫Jadi artinya slug mungkin akan menjadi bidang
‫yang paling banyak ditanyakan.
‫Jadi masuk akal
‫juga untuk memiliki indeks untuk yang itu.
‫Jadi tourchema. indeks
‫dan siput satu.
‫Dan seringkali satu atau minus satu tidak begitu penting.
‫Oke sekarang saya jadi penasaran coba
‫lihat ini di Kompas.
‫Jadi yang akan saya lakukan adalah mencoba menyambungkan ke database
‫lagi di sini.
‫Jadi saya bisa mendapatkannya di sini dari yang terbaru.
‫Klik, hubungkan, dan kemudian kita harus terhubung ke
‫database yang sama.
‫Jadi alam, wisata, mari datang ke indeks kami.
‫Dan sekarang di sini kita pergi.
‫Jadi sekarang kami benar-benar memiliki indeks kami di sini.
‫Jadi mari kita buat jendela ini
‫lebih besar dan lihat apa yang kita dapatkan.
‫Jadi kami memiliki siput kami di sini baik-baik saja.
‫Kami memiliki harga, yang merupakan harga pertama yang kami tetapkan.
‫Dan kemudian kami juga memiliki harga dan peringkat rata-rata, yang
‫merupakan gabungan dan Anda juga melihat di sini
‫bahwa yang ini di sini naik dan yang
‫ini turun karena memiliki minus.
‫Dan hal lain yang mungkin Anda perhatikan
‫adalah bahwa sebenarnya
‫kami tidak lagi memiliki indeks harga ini dalam kode kami.
‫Tapi itu masih di sini.
‫Jadi tidak cukup dengan menghapus indeks dari
‫kode kita, kita benar-benar perlu menghapusnya dari database itu sendiri kan.
‫Jadi ingat kita memilikinya di sini pada awalnya
‫dan kemudian kita mengomentarinya
‫dan membuat indeks majemuk baru ini, tetapi
‫sekali lagi indeks itu berdiri diam di sini.
‫Tapi karena kita sebenarnya
‫tidak membutuhkannya lagi, kita bisa melanjutkan dan menghapusnya oke.
‫Sekarang kita perlu mengetikkan nama hanya untuk memastikan
‫bahwa kita tidak melakukan kesalahan.
‫Dan jadi di sini kita pergi, bagus.
‫Jadi itulah kekuatan indeks.
‫Mereka benar-benar dapat membuat kinerja
‫membaca kami di database jauh lebih baik.
‫Jadi dalam aplikasi
‫Anda sendiri, Anda tidak boleh mengabaikannya.
‫Dan sebelum kita selesai, mari kita ambil kembali
‫metode penjelasan yang kita tambahkan
‫di sini dalam fungsi handler kita.
‫Dan sebenarnya hanya sebagai
‫referensi, saya akan meninggalkannya di sini seperti ini oke.
‫Berikan simpanan.
‫Kembali ke menu posting.
‫Mari kita coba sekarang.
‫Dan memang, itu kembali bekerja.
‫Oke dan sekarang itu benar-benar.