DEV Community 👩‍💻👨‍💻

Cover image for MongoDB'de Indexing ve Dahası
Ali İlteriş Keskin
Ali İlteriş Keskin

Posted on

MongoDB'de Indexing ve Dahası

Herkese merhaba. Çook uzun süredir (neredeyse 8 ay) yazı yazmıyordum. En büyük nedeni üşengeçlik tabi.


MongoDB Nedir?

MongoDB, yüksek hacimli veri depolama için kullanılan belge odaklı bir NoSQL veritabanıdır. MongoDB relational veritabanları gibi "table" ve "rows"
kullanmamaktadır. Bunun yerine "collections" ve "documents" kullanmaktadır. "Documents" dediğimiz şeyler key-value yapısı kullanır. Programlamada
sıkça kullandığımız dictionary veya json yapılarına benzetilebilir.


Index Nedir?

Index veritabanına attığımız sorguların daha hızlı sonuç vermesi için oluşturulan yapılardır. Indexleme yaptıktan sonra veritabanında
bir kayıt aradığınızda tüm kayıtları tek tek incelemeye gerek duymadan daha hızlı sonuç döner.


Index Oluşturma

MongoDB sadece "_id" özelinde atılan sorgular için id bilgisini kendisi indexliyor. Biz ise şimdi örnek bir senaryo canlandıracağız.

İlk olarak user collectionının mevcut indexlerine bakalım. Ben veritabanı uygulaması olarak NoSQLBooster
kullanıyorum. Orada örnek vereceğim. Collection üstüne sağ tılayıp Indexes -> View Indexes yolunu takip ediyorum. Beni şöyle bir ekran karşılıyor.

Image description

Yani görüyoruz ki MongoDB bizim için indexlemiş id keyini. Şimdi senaryomuza geçelim.

Veritabanında "user" adında bir collectionınız olduğunu düşünün. Bu collectiona sadece "_id" ile değil aynı zamanda sık sık "email" sorgusu da
attığınızı düşünün. O zaman email ile atılan sorguları daha verimli hale getirmek için email keyini indexleyebiliriz. Gelin bir index oluşturalım.

db.user.createIndex({ name: 1 })

Enter fullscreen mode Exit fullscreen mode

Not: Veritabanında oluşturduğunuz indexler diskte yer kaplamaktadır.

"Gereksiz indexleme, indexleme değildir."

  • Bir yazılımcı (ben)

Güzell veritabanındaki ilk indeximizi oluşturduk. Peki şimdi indexlerimize bakmaya ne dersiniz? Gelin bakalım.

Image description

Evet işte artık email keyimiz de index listesinde görünüyor.


Index Tipleri

MongoDB'de birden fazla index tipi vardır. Bu index tiplerini işinize olan uygunluğuna göre seçip kullanabilirsiniz. Bazı index
tiplerini inceleyelim.

Single Field Indexler

Yukarıda oluşturduğumuz ilk indexi buna örnek gösterebiliriz. Kısaca tek bir field için oluşturulan indexlerdir.

mongodb

Compound Indexler

Eğer veritabanına birden fazla key ile sorgu atıyorsanız Compound Index kullanabilirsiniz. Bu index tipinde dikkat edilmesi gereken
şey ise indexi oluştururken fieldları nasıl sıraladığımız. Yukarıda dikkat etmemiştik buna ama artık bizim için önemli oluyor.
Örneğin, bir Compound Index

{ name: 1, no: -1 }

den oluşuyorsa, index önce kullanıcı ismine göre sıralanır ve ardından
her kullanıcı ismi puana göre sıralanır.

mongodb

Kullanımı Single Field Index kullanımı ile aynı. Aşağıda ufak bir örnek yapalım.

db.collection.createIndex({ name: 1, no: -1 })
Enter fullscreen mode Exit fullscreen mode

Multikey Indexler

MongoDB, arraylerde depolanan içeriği indexlemek için Multikey Indexler kullanır. Array değeri içeren bir alanı indekslerseniz, MongoDB
dizinin her elemanı için ayrı index girdileri oluşturur. Sorguların arraylerin öğelerini eşleştirerek dizileri içeren belgeleri seçmesine
olanak tanır.

mongodb


Kapanış

Index tiplerine de göz attıktan sonra kendi veritabanımdaki son durumu göstereyim.

Image description

Image description

Unutmayın gereksiz indexlemeler sizin için dezavantajlı bir durumdur. Bu yüzden indexlemelerinizi planlı yapın.


Umarım yazı işinize yaramıştır. Anlamadığınız yerleri, isteklerinizi veya önerilerinizi bana iletbilirsiniz. Keyifli haftalar dilerim :)

Yazılarımı kendi blogumda da paylaşıyorum :D

Top comments (2)

Collapse
 
buurak profile image
Burak Yılmaz

Teşekkürler güzel yazı için🙏🏻

Collapse
 
ilteriskeskin profile image
Ali İlteriş Keskin

Ben teşekkür ederim 🥰

Join us at DEV
Yes, this is technically an “ad”, but really we just want to ask if you want to join DEV. We have 900k+ developers reading, posting, and enjoying community, and would love to have you.   Create an account and continue your coding journey.