MongoDB'de En İyi Index Stratejileri Nelerdir? Sorgu Optimizasyonu
MongoDB'de Veritabanı Performansını İndekslemek
MongoDB sorgularında performans farkı, genellikle doğru index stratejisinden kaynaklanır. Milyonlarca belge içinde arama yaparken, uygun indeks olmadığında MongoDB veritabanının tamamını taraması gerekir. Bu durum sorgu süresini saniyelerden dakikalara çıkarabilir. Index stratejileri seçerken, sorgularınızın yapısını, veri yapınızı ve okuma-yazma oranınızı analiz etmeniz gerekir. Doğru tercih, veritabanı performansında 10 kat hızlanma sağlayabilir.
Compound Index ve Çok Alanı Sorgulama
Birden fazla alanda sorgulama yapıyorsanız, compound index (bileşik index) kullanmak zorunludur. Örneğin, bir e-ticaret sistemi kullanıcıların "kategori" ve "fiyat" alanlarında filtre uyguladığında, her ikisini de içeren bir compound index oluşturmak gerekir.
Compound index avantajları:
- Tek bir indeks taraması ile birden fazla alan filtrelemesi yapılabilir
- Sorgular paralel alanlar için direkt sonuca ulaşır
- Ayrı ayrı indeks oluşturmaya göre 30-40% daha az depolama alanı kullanır
- Alan sırası kritiktir; ESR kuralına (Eşitlik, Sıralama, Range) uyulmalıdır
Alan sırası değiştirildikçe sorgu performansı dramatik olarak değişir. Yanlış sırada oluşturulmuş compound index, hiç olmayan indeks kadar ineffektif olabilir. Sorgularınızı analiz ederken en sık kullanılan filtreleme düzenine göre index dizayn etmelisiniz.
Sparse Index ile Boş Alanları Etkisiz Hale Getirmek
MongoDB'deki belgelerin aynı yapıya sahip olmayabileceği durumlar vardır. Bazı belgelerde "telefon" alanı olmayabilir. Bu senaryolarda sparse index oluşturmak, indeks boyutunu önemli ölçüde küçültür ve bellek kullanımını azaltır.
Sparse index kullanım durumları:
- İsteğe bağlı alanlar (nullable fields) için
- Belge yapısı tutarsız olan koleksiyonlarda
- Veri tabanında büyük boş alan oranı varsa
- Normal indekse göre 50-60% daha az bellek gerekir
Ancak dikkat edilmesi gereken nokta, sparse index'in COUNT sorgularında yanlış sonuç verebilmesidir. Boş alan değerine sahip belgeler indeksten çıkartılıyor, bu nedenle toplam sayı hesabında hata oluşabilir. Bu tür durumlarda veri doğrulama adımını test sürecine eklemeniz önerilir.
TTL Index ile Otomatik Veri Temizliği
Session bilgisi, log kayıtları veya geçici veriler belirli bir süre sonra silinmesi gereken veri türleridir. TTL (Time To Live) index, MongoDB'nin bu belgeleri otomatik olarak silmesini sağlar. Manual silme işlemi yapmak yerine, TTL index kullanmak sistem kaynaklarını önemli ölçüde boşaltır.
TTL index özellikleri:
- Bir tarih alanına dayalı olarak oluşturulur
- Belirtilen süre sonra belgeleri otomatik siler
- Silme işlemi backend'de 60 saniyede bir çalışır
- Sorgulama performansını olumsuz etkilemez
- Compound index ile birleştirilemez
Örneğin, login token bilgilerini 24 saat sonra silmek istiyorsanız, TTL index oluşturarak veritabanı boyutunun kontrolsüz büyümesini önleyebilirsiniz. Bu, özellikle IoT cihazlarından gelen sensor verilerinde ve gerçek zamanlı log sistemlerinde kritik avantaj sağlar.
Index Stratejisini Test Etmek
Index oluşturduktan sonra, mutlaka gerçek sorguları `explain()` komutu ile analiz etmeniz gerekir. Hangi belgelerin tarandığını, indeksin etkili kullanılıp kullanılmadığını ve sorgu zamanını görebilirsiniz. Yanlış index stratejisi seçmek, hiç index olmamaktan daha kötü olabilir.
Test aşamasında kontrol edilmesi gereken metrikler:
- executionStages.stage değeri "COLLSCAN" ise indeks kullanılmıyor demektir
- executedStages ve totalDocsExamined farkı ne kadar küçükse, indeks o kadar etkilidir
- İdeal senaryoda taranılan belge sayısı, döndürülen belge sayısına eşittir
Geliştirme ve üretim ortamlarında farklı veri hacmi olabilir. Küçük dataset'te etkili olan index, milyonlarca belge ile performans göstermeyebilir. Bu nedenle production ortamının benzeştiği bir test veritabanında son testleri yapmanız kritiktir.
MongoDB'de index stratejileri, veritabanı tasarımının kalbi olarak düşünülmelidir. Compound index ile çok alanlı sorgular hızlandırabilir, sparse index ile bellek tasarrufu yapabilir ve TTL index ile otomatik veri temizliği sağlayabilirsiniz. Her strateji farklı ihtiyaçlara cevap verse de, kararı verirken hem sorgu düzenlerini hem de veri büyüme projeksiyonlarını gözönüne almanız gerekir. Eğitim seçimi yaparken olduğu gibi, teknoloji kararlarında da analiz ve karşılaştırma, doğru seçime götüren anahtardır.