MongoDB İndeksleme Eğitimi – createIndex(), dropindex() Örneği
Dizinler herhangi bir veritabanında çok önemlidir ve MongoDB farklı değil. Dizinlerin kullanılmasıyla sorguların gerçekleştirilmesi MongoDB daha verimli hale gelir.
Dizinsiz binlerce belgeden oluşan bir koleksiyonunuz varsa ve belirli belgeleri bulmak için sorgulama yapıyorsanız, bu durumda MongoDB Belgeleri bulmak için koleksiyonun tamamını taramak gerekecek. Ancak dizinleriniz olsaydı, MongoDB koleksiyonda aranması gereken belge sayısını sınırlamak için bu dizinleri kullanırdı.
Dizinler, koleksiyon verilerinin bir kısmını saklayan özel veri kümeleridir. Veriler kısmi olduğundan bu verilerin okunması kolaylaşır. Bu kısmi küme, belirli bir alanın değerini veya alanın değerine göre sıralanan bir alan kümesini saklar.
Endekslerin Etkisini Anlamak
Girişten itibaren indekslerin sorgular için iyi olduğunu görmüş olsak da, çok fazla indekse sahip olmak Ekle, Sil ve Güncelle işlemleri gibi diğer işlemleri yavaşlatabilir.
Dokümanlar üzerinde sık sık ekleme, silme ve güncelleme işlemleri yapılıyorsa, indekslerin de sık sık değişmesi gerekecek ve bu da koleksiyon için ek yük oluşturacaktır.
Aşağıdaki örnek, bir koleksiyonda hangi alan değerlerinin dizin oluşturabileceğinin bir örneğini gösterir. Bir dizin, koleksiyondaki yalnızca bir alanı temel alabilir veya koleksiyondaki birden çok alanı temel alabilir.
Aşağıdaki örnekte, koleksiyondaki belgeleri indekslemek için Çalışan Kimliği “1” ve Çalışan Kodu “AA” kullanılmıştır. Yani bir sorgu araması yapıldığında koleksiyondaki gerekli dokümanları hızlı ve verimli bir şekilde bulmak için bu indeksler kullanılacaktır.
Yani arama sorgusu Çalışan Kodu “AA”yı temel alsa bile o belge döndürülür.
Dizinler Nasıl Oluşturulur: createIndex()
İçinde Dizin Oluşturma MongoDB " kullanılarak yapılır.createIndex" yöntem.
Aşağıdaki örnek, koleksiyona indeksin nasıl ekleneceğini gösterir. "Employeeid" ve "EmployeeName" alan adlarına sahip aynı Employee koleksiyonumuz olduğunu varsayalım.
db.Employee.createIndex({Employeeid:1})
Kod Açıklaması:
- The createIndex yöntemi, belgenin “Çalışan Kimliğine” dayalı bir dizin oluşturmak için kullanılır.
- '1' parametresi, “Employeeid” Alanı değerleri ile indeks oluşturulduğunda artan sırada sıralanması gerektiğini belirtir. Lütfen bunun, koleksiyonda otomatik olarak oluşturulan _id alanından (kimlik alanı koleksiyondaki her belgeyi benzersiz şekilde tanımlamak için kullanılır) farklı olduğunu unutmayın. MongoDB. Dokümanlar artık _id alanına göre değil, Çalışan kimliğine göre sıralanacak.
Komut başarıyla yürütülürse, aşağıdaki Çıktı gösterilecektir:
Çıktı:
- numIndexesBefore: 1, komut çalıştırılmadan önce dizinlerde bulunan Alan değerlerinin (Koleksiyondaki gerçek alanlar) sayısını gösterir. Her koleksiyonun aynı zamanda dizine Alan değeri olarak da sayılan _id alanına sahip olduğunu unutmayın. _id index alanı ilk oluşturulduğunda koleksiyonun bir parçası olduğundan numIndexesBefore'ın değeri 1'dir.
- numIndexesAfter: 2, komut çalıştırıldıktan sonra dizinlerde bulunan Field değerlerinin sayısını gösterir.
- Burada “ok: 1” çıktısı işlemin başarılı olduğunu belirtir ve yeni indeksin koleksiyona eklendiğini belirtir.
Yukarıdaki kod, bir alan değerine dayalı olarak nasıl dizin oluşturulacağını gösterir, ancak birden fazla alan değerine dayalı olarak da bir dizin oluşturulabilir.
Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir;
db.Employee.createIndex({Employeeid:1, EmployeeName:1])
Kod Açıklaması:
- createIndex yöntemi artık birden fazla Field değerini hesaba katıyor ve bu da artık endeksin "Employeeid" ve "EmployeeName" temel alınarak oluşturulmasına neden olacak. ÇalışanNo:1 ve ÇalışanAdı:1 indeksin bu 2 alan değeri üzerinde oluşturulması gerektiğini, :1 ise artan sırada olması gerektiğini belirtir.
Dizinler Nasıl Bulunur: getindexes()
Bir Dizin Bulma MongoDB kullanılarak yapılır “Indexes'i al” yöntemi.
Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir;
db.Employee.getIndexes()
Kod Açıklaması:
- GetIndexes yöntemi bir koleksiyondaki tüm dizinleri bulmak için kullanılır.
Komut başarıyla yürütülürse, aşağıdaki Çıktı gösterilecektir:
Çıktı:
- Çıktı, koleksiyonda _id alanı olan 2 dizin olduğunu ve diğerinin Çalışan kimliği alanı olduğunu gösteren bir belge döndürür. :1, dizindeki alan değerlerinin artan sırada oluşturulduğunu belirtir.
Dizinler Nasıl Bırakılır: dropindex()
Bir Dizini Kaldırma MongoDB dropIndex yöntemi kullanılarak yapılır.
Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir;
db.Employee.dropIndex(Employeeid:1)
Kod Açıklaması:
- dropIndex yöntemi, Dizinden kaldırılması gereken gerekli Alan değerlerini alır.
Komut başarıyla yürütülürse, aşağıdaki Çıktı gösterilecektir:
Çıktı:
- nIndexesWas: 3, komut çalıştırılmadan önce dizinlerde bulunan Alan değerlerinin sayısını gösterir. Her koleksiyonun aynı zamanda dizine Alan değeri olarak da sayılan _id alanına sahip olduğunu unutmayın.
- ok: 1 çıktısı işlemin başarılı olduğunu belirtir ve “Employeeid” alanının indeksten kaldırıldığını belirtir.
Koleksiyondaki tüm dizinleri aynı anda kaldırmak için dropIndexes komutu kullanılabilir.
Aşağıdaki örnek bunun nasıl yapılabileceğini göstermektedir.
db.Employee.dropIndex()
Kod Açıklaması:
- dropIndexes yöntemi, _id dizini dışındaki tüm dizinleri bırakacaktır.
Komut başarıyla yürütülürse, aşağıdaki Çıktı gösterilecektir:
Çıktı:
- nIndexesWas: 2, komut çalıştırılmadan önce dizinlerde bulunan Alan değerlerinin sayısını gösterir.
- Her koleksiyonun aynı zamanda indeks için bir Alan değeri olarak sayılan ve tarafından kaldırılmayacak olan _id alanına sahip olduğunu tekrar unutmayın. MongoDB ve bu mesajın gösterdiği şey budur.
- ok: 1 çıkışı işlemin başarılı olduğunu belirtir.
ÖZET
- Bir koleksiyondaki belgelerin daha hızlı ve etkili bir şekilde aranabilmesi için indekslerin tanımlanması önemlidir.
- Dizinler createIndex yöntemi kullanılarak oluşturulabilir. Dizinler yalnızca bir alanda veya birden fazla alan değerinde oluşturulabilir.
- Dizinler getIndexes yöntemi kullanılarak bulunabilir.
- Dizinler, tek dizinler için dropIndex veya tüm dizinleri bırakmak için dropIndexes kullanılarak kaldırılabilir.