Posts MongoDB'de Indexing ve Dahası
Post
Cancel

MongoDB'de Indexing ve Dahası

mongodb

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.

nosqlbooster_view_indexes

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.

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

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.

nosqlbooster_view_indexes_2

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.

1
db.collection.createIndex({ name: 1, no: -1 })

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.

nosqlbooster_view_indexes_2

nosqlbooster_view_indexes_2

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 :)

This post is licensed under CC BY 4.0 by the author.
İçindekiler