MongoDB İndeksleme ile Sorgular Nasıl İyileştirilir?

Mongodb Indeksleme Ile Sorgular Nasil Iyilestirilir



Sorgu hızını artırmak MongoDB ve diğer tüm veritabanı sistemleri için çok önemlidir. MongoDB'nin kayıtları daha hızlı tanımlamasına yardımcı olan veri yapıları oluşturarak indeksleme, aramaları hızlandırmak ve optimize etmek için güçlü bir yaklaşımdır. İndeksler, sorgulamaları daha etkili hale getirmek için kayıtlardaki bazı verilerin kopyalarını içerir. Bu, MongoDB'deki isteklere yanıt verme çabasını kolaylaştırır. Bu kılavuzda farklı indeksleme türleri yardımıyla indekslerin kullanımını tartışacağız.

Koleksiyon Oluştur

İndeksleri kullanmadan önce MongoDB'mizde yeni bir koleksiyon oluşturmamız gerekiyor. Zaten bir tane oluşturduk ve “Sahte” adında 10 belge ekledik. Find() MongoDB işlevi, aşağıdaki MongoDB kabuk ekranında “Dummy” koleksiyonundaki tüm kayıtları görüntüler.

test> db.Dummy.find()







Dizin Oluşturma Türünü Seçin

İndeks oluşturmadan önce öncelikle sorgu kriterlerinde yaygın olarak kullanılacak sütunları belirlemelisiniz. Dizinler sıklıkla filtrelenen, sıralanan veya aranan sütunlarda iyi performans gösterir. Büyük önem düzeyine sahip alanlar (birçok farklı değer) genellikle mükemmel indeksleme seçenekleridir. Farklı dizin türleri için bazı kod örneklerini burada bulabilirsiniz.



Örnek 01: Tek Alan Dizini

Muhtemelen, o sütundaki sorgu hızını artırmak için tek bir sütunu dizine ekleyen en temel dizin türüdür. Bu tür dizin, koleksiyon kayıtlarını sorgulamak için tek bir anahtar alanı kullandığınız sorgular için kullanılır. Aşağıdaki gibi find fonksiyonu içerisinde “Dummy” koleksiyonunun kayıtlarını sorgulamak için “type” alanını kullandığınızı varsayalım. Bu komut, büyük koleksiyonların işlenmesi uzun zaman alabilecek koleksiyonun tamamını inceleyecektir. Bu nedenle bu sorgunun performansını optimize etmemiz gerekiyor.



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





Yukarıdaki Dummy koleksiyonunun kayıtları “type” alanı kullanılarak yani bir koşul içeren şekilde bulunmuştur. Bu nedenle, arama sorgusunu optimize etmek için burada tek anahtar dizini kullanılabilir. Bu nedenle, “Dummy” koleksiyonunun “type” alanında bir indeks oluşturmak için MongoDB'nin createIndex() fonksiyonunu kullanacağız. Bu sorguyu kullanmanın çizimi, kabukta 'type_1' adlı tek anahtarlı dizinin başarıyla oluşturulduğunu gösterir.

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

Find() sorgusunu “type” alanını kullanarak kazandıktan sonra kullanalım. MongoDB, istenen iş unvanına sahip kayıtları hızlı bir şekilde almak için dizini kullanabileceğinden, dizin mevcut olduğundan işlem artık daha önce kullanılan find() işlevinden önemli ölçüde daha hızlı olacaktır.



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

Örnek 02: Bileşik İndeks

Belirli durumlarda çeşitli kriterlere göre öğeleri aramak isteyebiliriz. Bu alanlar için bileşik dizin uygulamak, sorgu performansının iyileştirilmesine yardımcı olabilir. Diyelim ki bu kez sorgu görüntülenirken farklı arama koşulları içeren birden çok alanı kullanarak “Dummy” koleksiyonundan arama yapmak istiyorsunuz. Bu sorgu, 'type' alanının 'emp' olarak ayarlandığı ve 'sal' alanının 350'den büyük olduğu koleksiyondaki kayıtları arıyor.

Koşulu “sal” alanına uygulamak için $gte mantıksal operatörü kullanılmıştır. 10 kayıttan oluşan koleksiyonun tamamında yapılan arama sonucunda toplam 2 kayıta ulaşıldı.

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

Yukarıda bahsettiğimiz sorgu için bileşik indeks oluşturalım. Bu bileşik indekste “type” ve “sal” alanları bulunmaktadır. “1” ve “-1” sayıları “type” ve “sal” alanları için sırasıyla artan ve azalan sırayı temsil etmektedir. Bileşik indeksin sütunlarının sırası önemlidir ve sorgu modellerine karşılık gelmelidir. MongoDB bu bileşik indekse görüntülendiği gibi “type_1_sal_-1” adını vermiştir.

test> db.Dummy.createIndex({ type: 1 , irade:- 1 })

“type” alanı değeri “emp” ve “sal” alanı değeri 350'den büyük olan kayıtları aramak için aynı find() sorgusunu kullandıktan sonra, sıralamada ufak bir değişiklikle aynı çıktıyı elde ettik. önceki sorgu sonucuyla karşılaştırıldığında. Yukarıdaki bileşik endekste “sal” alanı için belirlenen “-1” değerine göre “sal” alanı için en büyük değer kaydı artık ilk sırada yer alırken, en küçük değer kaydı en düşükte yer alıyor.

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

Örnek 03: Metin Dizini

Bazen, ürünlerin büyük açıklamaları, içerik maddeleri vb. gibi geniş bir veri kümesiyle uğraşmanız gereken bir durumla karşılaşabilirsiniz. Büyük bir metin alanında tam metin aramaları yapmak için bir metin dizini yararlı olabilir. Mesela test veri tabanımızda “Test” isminde yeni bir koleksiyon oluşturduk. Aşağıdaki find() sorgusuna göre insertMany() işlevini kullanarak bu koleksiyona toplam 6 kayıt eklendi.

test> db.Test.insertMany([

{isim: 'Ana' , şunlardan: 'Londra'da yaşıyor ve iyi bir öğretmen' },

{isim: 'Robert' , şunlardan: 'O çok muhteşem bir futbolcu' },

{isim: 'itibaren' , şunlardan: 'Dubai'yi geziyor olabilirim' },

{isim: 'Yakup' , şunlardan: 'O akıllara durgunluk veren ve zengin.' },

{isim: 'Cillian' , şunlardan: 'Süper bir başlangıç ​​filmi, saniyeler içinde şöhrete kavuştu' },

{isim: 'Ken' , şunlardan: 'Yemek aşığı. Seni de yiyebilir.' }

])

Şimdi bu koleksiyonun “Des” alanında MongoDB’nin createIndex() fonksiyonunu kullanarak bir metin indeksi oluşturacağız. Alan değerindeki “text” anahtar kelimesi, bir “text” dizini olan indeksin türünü gösterir. Dizin adı des_text otomatik olarak oluşturuldu.

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

Artık koleksiyon üzerinde “des_text” dizini aracılığıyla “metin araması” gerçekleştirmek için find() işlevi kullanıldı. Koleksiyon kayıtlarında “yiyecek” kelimesini aramak ve bu kaydı görüntülemek için $search operatörü kullanıldı.

test> db.Test.find({ $metin: { $arama: 'yiyecek' }});

Dizinleri Doğrulayın:

MongoDB'nizdeki farklı koleksiyonların uygulanan tüm dizinlerini kontrol edebilir ve listeleyebilirsiniz. Bunun için MongoDB kabuk ekranınızdaki koleksiyonun adıyla birlikte getIndexes() yöntemini kullanın. Bu komutu “Test” ve “Dummy” koleksiyonları için ayrı ayrı kullandık. Bu, yerleşik ve kullanıcı tanımlı dizinlerle ilgili gerekli tüm bilgileri ekranınızda gösterir.

test> db.Test.getIndexes()

test> db.Dummy.getIndexes()

Düşen Endeksler:

Koleksiyon için daha önce dropIndex() işlevini kullanarak oluşturulan dizinleri ve dizinin uygulandığı alan adını silmenin zamanı geldi. Aşağıdaki sorgu tek indeksin kaldırıldığını göstermektedir.

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

Aynı şekilde bileşik indeks de düşürülebilir.

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

Çözüm

MongoDB'den veri alımını hızlandıran indeksleme, sorguların verimliliğini artırmak için çok önemlidir. İndekslerin olmadığı MongoDB'nin eşleşen kayıtları bulmak için tüm koleksiyonu araması gerekir; bu da kümenin boyutu arttıkça daha az etkili olur. MongoDB'nin indeks veritabanı yapısını kullanarak doğru kayıtları hızla keşfetme yeteneği, uygun indeksleme kullanıldığında sorguların işlenmesini hızlandırır.