MongoDB

Seyrek İndekslerle MongoDB Optimizasyonu

Spread the love

İçindekiler

Seyrek Dizin Nedir?

MongoDB’de seyrek dizin, yalnızca belirli bir alanda boş olmayan bir değere sahip belgeleri dizine ekleyen güçlü bir optimizasyon tekniğidir. Tüm belgeleri bir koleksiyona ekleyen standart dizinlerin aksine, seyrek dizinler, bir alanın varlığına göre belgeleri seçici olarak dizine ekler. Bu, özellikle indekslenen alanın önemli bir bölümünde bulunmadığı birçok belgeye sahip koleksiyonlar için daha küçük ve daha verimli dizinlere yol açar.

Örneğin, hesap durumunu gösteren bir active alanına sahip kullanıcı belgelerinin bir koleksiyonunu ele alalım. active üzerindeki seyrek bir dizin, yalnızca active‘in doğru olduğu (veya başka bir boş olmayan değer) belgeleri dizine ekler. active değeri null veya tanımsız olarak ayarlanmış belgeler dizinden hariç tutulur.

Seyrek Dizinlerin Avantajları

Seyrek dizinlerin kullanılması birkaç önemli avantaj sunar:

  • Dizin Boyutunun Küçültülmesi: Diskte daha küçük dizin boyutu, daha hızlı dizin oluşturma ve daha az depolama alanı tüketimi anlamına gelir.
  • Sorgu Performansının İyileştirilmesi: Seyrek dizin alanını filtreleyen sorgular, sorgu motorunun daha küçük bir dizini araması nedeniyle önemli ölçüde daha hızlıdır.
  • Bellek Kullanımının İyileştirilmesi: Daha küçük dizinler, çok sayıda belgeye sahip koleksiyonlar için çok önemli olan daha az bellek tüketir.
  • Belirli Sorgular İçin Optimize Edilmiş: Belirli bir alanın var olduğu belgeleri hedefleyen sık sorgular için idealdir, birçok belgede bu alan eksikken.

MongoDB’de Seyrek Dizin Oluşturma

sparse: true seçeneğiyle createIndex() komutunu kullanarak seyrek bir dizin oluşturmak basittir. active alanında (artan) bir seyrek dizin oluşturmak için:


db.users.createIndex( { active: 1 }, { sparse: true } );

Azalan bir dizin için, 1 yerine -1 kullanın.

Seyrek Dizinlerle Sorgulama

MongoDB, sorgu indeksli alanın kriterleriyle eşleşirse otomatik olarak seyrek bir dizin kullanır. Aşağıdaki sorgu, yukarıda oluşturulan seyrek dizini kullanacaktır:


db.users.find( { active: true } );

İndeksli alan olmadan veya farklı filtreler kullanan sorgular seyrek dizinden yararlanmayabilir.

Seyrek Dizinleri Kullanırken Dikkat Edilmesi Gerekenler

Avantajlı olmasına rağmen, şu noktaları göz önünde bulundurun:

  • Sorgu Seçiciliği: Seyrek dizinler, indeksli alan belgelerin büyük bir bölümünde yokken en verimlidir. Çoğu belgede alan varsa, yerden tasarruf minimum düzeyde olabilir.
  • Karmaşık Sorgular: Birden fazla alanı içeren karmaşık sorgular seyrek dizinden tam olarak yararlanamayabilir.
  • Dizin Bakımı: Güncellemeler ve silmeler yine de seyrek dizinleri etkiler, ancak standart dizinlere göre daha az sıklıkta.
  • Hata Ayıklama: Hangi belgelerin dizine eklendiğini anlamak hata ayıklama için önemlidir. Dizin yapısını incelemek için db.collection.getIndexes() kullanın.

Sonuç

Seyrek dizinler, özellikle belirli bir alandan yoksun olabilecek çok sayıda belge içeren koleksiyonlarla uğraşırken MongoDB performansını optimize etmek için değerli bir araçtır. Etkili kullanım için avantajları ve sınırlamaları dikkatlice değerlendirmek önemlidir.

SSS

  • S: Bir koleksiyonda birden fazla seyrek dizin olabilir mi?
    C: Evet, tek bir koleksiyonda birden fazla seyrek dizin oluşturabilirsiniz.
  • S: Seyrek dizinleri bileşik dizinlerle kullanabilir miyim?
    C: Evet, ancak seyreklik bileşik dizindeki tüm alanlar tarafından belirlenir. Bir belgenin dizine dahil edilmesi için *tüm* alanlarda boş olmayan değerler olması gerekir.
  • S: Belirli bir belgenin seyrek bir dizine dahil edilip edilmediğini nasıl kontrol ederim?
    C: Doğrudan bir komut yoktur. db.collection.getIndexes() kullanarak dizin yapısını inceleyin ve belge verilerinizle karşılaştırın.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir