İçeriğe atla
Şimdi yükleniyor
AKAşkın KILIÇ
  • Anasayfa
  • Azure & Bulut
    • Microsoft Azure
    • Bulut Altyapı
    • Microsoft 365
  • Yazılım
    • DevOps
    • Geliştirici Araçları
    • Konteyner & K8s
  • AI & Veri
    • Yapay Zeka
    • Veri & Analitik
  • Güvenlik
    • Güvenlik & Kimlik
    • Kurumsal Teknoloji
  • Hakkımda
    • İletişim
×
  • Azure
  • Bulut Altyapı
  • DevOps
  • Geliştirici Araçları
  • Güvenlik & Kimlik
  • Konteyner & Kubernetes
  • Kurumsal Teknoloji
  • Microsoft 365
  • Microsoft Azure
  • Veri & Analitik
  • Yapay Zeka
  • Başlangıç
  • Veri & Analitik
  • Azure Cosmos DB’de GSI: Okuma Yükünü Hafifletmenin Pratik Yolu
Bulut Altyapı Microsoft Azure Veri & Analitik Azure Cosmos DB, cross-partition query, Global Secondary Index, GSI, partition key, performans optimizasyonu, RU tüketimi Aşkın KILIÇ 06/06/2026 2 Yorumlar

Azure Cosmos DB’de GSI: Okuma Yükünü Hafifletmenin Pratik Yolu

Azure Cosmos DB’de GSI: Okuma Yükünü Hafifletmenin Pratik Yolu
📑 İçindekiler
  1. Neden Bu Özellik Önemli?
  2. GSI Nasıl Çalışıyor?
  3. Kime uygun?
  4. Kime göre erken olabilir?
  5. Maliyet, Performans ve Gerçek Hayat Dengesi
  6. Nerede Kullanmalı, Nerede Temkinli Olmalı?
  7. Pratik başlangıç planı
  8. Benden Kalan Notlar ve Saha Deneyimi
  9. Sıkça Sorulan Sorular
  10. Azure Cosmos DB Global Secondary Index ne işe yarıyor?
  11. GSI ile ikinci container arasında ne fark var?
  12. Her uygulamada GSI kullanmak mantıklı mı?
  13. Maliyet açısından faydalı mı?
  14. Kaynaklar ve İleri Okuma

⏱️ 6 dk okuma📅 6 Haziran 2026🔄 Güncelleme: 16 Temmuz 2026

Eh, Bir veritabanı projesinde en sık gördüğüm şey şu: ilk başta tek bir sorgu deseniyle başlıyorsunuz, sonra iş büyüyor, ekip yeni ekranlar istiyor, ürün tarafı “şunu da telefondan arayalım” diyor ve bir bakıyorsunuz aynı veri için üç farklı okuma yolu lazım olmuş. İşin aslı şu ki, Azure Cosmos DB’de Global Secondary Index tam da bu noktada devreye giriyor. Veri modelini baştan yıkmadan, okuma tarafını biraz daha rahat hâle getiriyorsunuz.

İlgili içerik: Azure Cosmos DB GSI ile Canlı Ajan Oturumlarını Korumak

İlgili içerik: Azure Cosmos DB Fabric Database Hub'da Tek Ekrandan İzleme

İlgili içerik: Azure Cosmos DB'ye Immutable Backup Geldi: Ne Değişiyor?

İlgili içerik: Azure Cosmos DB Conf 2026: Benim Gözümden Asıl Mesaj

Ben bu konuyu ilk kez 2023’te bir finans müşterisinde tartıştım. Asıl container müşteri kimliğiyle bölümlenmişti, ama operasyon ekibi sipariş numarasıyla hızlı arama istiyordu. Klasik çözüm neydi? İkinci container, change feed, senkronizasyon kodu… Yanı evet çalışıyor ama açık konuşayım, biraz çorba oluyor. GSI’nın hoş yanı şu: o çorbayı servis katmanından alıp platforma bırakıyor.

Peki neden?

Bir de şunu söyleyeyim: GSI sadece “daha hızlı sorgu” demek değil. Maliyet ve bakım tarafında da fark yaratıyor, hem de az buz değil. Mesela çapraz bölüm taraması yapan sorguların RU tüketimi büyüdükçe can yakmaya başlıyor. Küçük bir startup iseniz bunu bir süre idare edersiniz; ama enterprise tarafta ay sonu faturası ve performans SLA’leri devreye girince işler değişiyor.

Neden Bu Özellik Önemli?

Cosmos DB’nın güçlü tarafı zaten yatay ölçeklenmesi. Ama yatay ölçeklenme ile birlikte küçük bir gerçek de geliyor: doğru partition key seçmediyseniz bazı sorgularınız zamanla pahalılaşır (ki bu çoğu kişinin gözünden kaçıyor). Başlangıçta çok sorun etmeyeceğiniz lookup’lar, veri hacmi artınca yavaş yavaş sürünmeye başlar. Hani “bir şey olmaz” dediğiniz yer tam orasıdır.

Geçen yıl, 2024’ün Kasım ayında Logosoft tarafında yürüttüğümüz bir e-ticaret analizinde bunu net gördük. Ürün kataloğu ayrıydı, siparişler ayrıydı ve fulfillment ekibi sürekli farklı anahtarlarla arama yapıyordu. Tek container üstünde her şeyi çözmeye çalışınca cross-partition query sayısı arttı; sonra maliyet raporu geldi ve yüzler biraz düştü. GSI olsaydı bazı akışlar daha temiz olurdu, buna eminim.

GSI’nın mantığı basit: verinizin otomatik senkronlanan ikinci bir görünümünü oluşturuyorsunuz ama bu kez farklı bir partition key ile. Yanı aynı veriyi kopyalayıp elle yönetmek yerine servis sizin yerinize eşleştiriyor. Kağıt üstünde süper gibi dürüyor, pratikte de fena değil; tabiî tasarımı doğru yaparsanız.

İşte tam da bu noktada devreye giriyor.

En büyük kazanç hızdan önce sadelik geliyor: ikinci index için ayrı sync servisi yazmıyorsunuz, retry mantığını sız taşımıyorsunuz, operasyon yükü azalıyor.

(bizzat test ettim)

GSI Nasıl Çalışıyor?

Burada teknik detay önemli ama gözünüz korkmasın. Kaynak container’daki veri değiştikçe GSI da güncelleniyor. Sız ikinci container’ı sanki bağımsız bir erişim yoluymuş gibi kullanıyorsunuz; arkada Cosmos DB senkronizasyonu hallediyor (evet, doğru duydunuz). Bu yapı bana hep şehir içi ring yolunu hatırlatıyor: ana caddede trafik sıkışsa bile alternatif güzergâh var.

Bakın, Aşağıdaki tablo işi bayağı netleştiriyor:

Konu Klasik yaklaşım GSI ile yaklaşım
Senkronizasyon Kod yazılır Servis yönetir
Bölümleme Tek partition key’e bağlı kalır Farklı partition key açılır
Maliyet Compute + bakım yükü Daha az uygulama karmaşıklığı
Operasyon Tatlı bela çıkarabilir Daha düzenli ilerler

Bi saniye — Bu arada ilk denediğimde ben de ufak bir hata aldım; indeks tanımında partition key alanını yanlış eşleştirmiştim. Sorgular beklediğim kadar hedefli gitmedi. Çözüm basitti ama ders ağırdı: önce bir düşüneyim… veri desenini çizmek gerekiyor, sonra index’i kurmak lazım. Yoksa elinizde güzel görünen ama pek iş görmeyen bir yapı kalabiliyor.

2022’de Ankara’da bir kamu kurumuyla yaptığımız PoC’de de benzer durum öldü. Ekip “bizde kullanıcıyı e-posta ile buluyoruz. Destek ekibi telefonla arıyor” dediğinde klasik tek anahtar modelinin sınırı ortaya çıktı. GSI burada hayat kurtaracak türden değildi belki ama işi bayağı rahatlattı.

Kime uygun?

Eğer uygulamanızda okuma desenleri sık değişiyorsa GSI bayağı iyi oturuyor. En çok da agent tabanlı ya da kullanıcı etkileşimli sistemlerde bugün session ID ile baktığınız veriye yarın order ID ile bakmanız gerekebiliyor.

Kime göre erken olabilir?

Eğer daha en başta veri modelinizi oturtmadıysanız önce önü düzeltin derim. Çünkü her soruna index açmak biraz bandaj gibi olur; kanamayı durdurur ama kırığı iyileştirmez (buna dikkat edin)

Maliyet, Performans ve Gerçek Hayat Dengesi

Bence en hayatı konu burada başlıyor: TL bazında düşününce her gereksiz RU gerçekten hissediliyor. Kurumsal müşterilerimde gördüğüm kadarıyla Türkiye’de ekipler çoğu zaman teknik faydaya ikna oluyor. Bütçe onayı maliyet kalemine takılıyor. O yüzden “bu özellik güzel” demek yetmez; hangi durumda para kazandırdığını da anlatmak lazım (inanın bana)

Küçük ekipler için GSI çoğu zaman hızlandırıcı olur çünkü ikinci container için ekstra işlem katmanı kurmazsınız. Büyük yapılarda işe asıl değer governance tarafında çıkıyor; herkes kendi küçük sync servisini yazmayı bırakınca ortalık toparlanıyor. Daha fazla bilgi için

  • Küçük startup: Hızlı PoC, düşük operasyon yükü, sınırlı ekip kaynağı. — ciddi fark yaratıyor
  • Büyük enterprise: Daha az özel kod, daha kolay destek modeli, daha öngörülebilir mimarı. — bunu es geçmeyin
  • Bütçe kısıtlıysa: Önce query optimizasyonu ve doğru partition key deneyin; GSI’yı hemen her yere yaymayın.

Kendi deneyimimden konuşuyorum, Neyse uzatmayayım… Eğer iş yükünüzün %80’i tek anahtar üzerinden gidiyorsa GSI sizin için şart olmayabilir. Ama sürekli fan-out yapan birkaç kritik ekran varsa orada ciddi fark yaratır.

💡 Bilgi: GSI’yı doğrudan “her şeyi çözen sihirli kutu” gibi düşünmeyin; asıl kullanım alanı yeni okuma desenlerini mevcut modeli bozmadan eklemek.

Nerede Kullanmalı, Nerede Temkinli Olmalı?

Açık konuşayım, ben bu özelliği özellikle alternatif lookup senaryolarında seviyorum. Mesela müşteri kaydı email ile tutuluyor ama çağrı merkezî temsilcisi telefonla arama yapıyor olabilir; ya da siparişler customer ID ile bölümlenmişken lojistik ekibi order ID üzerinden çalışmak isteyebilir.

Bir de AI ve agentic app tarafı var ki orası ayrı dünya artık… Session state, conversation history ve kullanıcı profili sürekli farklı açıdan okunuyor. Microsoft Build döneminde takip ettiğim örneklerde bunun etkisini net gördüm; model değil veri erişim şekli değişiyor aslında.

Lakin dikkat edin: source container ile secondary index arasındaki gecikmeyi tasarımınıza katmanız gerekiyor (evet). Anlık tutarlılık beklentiniz varsa test etmeden prod’a çıkmayın derim çünkü bazı iş akışlarında milisaniyelik fark bile can sıkar. Daha fazla bilgi için

Pratik başlangıç planı

  1. En pahalı üç sorguyu bulun.
  2. Bunların hangileri partition key dışına taşıyor bakın.
  3. Sadece gerçekten tekrar eden access pattern için GSI düşünün.
  4. Pilot ortamda latency ve RU karşılaştırması yapın.
{
"sourceContainer": "orders",
"partitionKey": "/customerId",
"gsiContainer": "orders-by-orderId",
"gsiPartitionKey": "/orderId"
}

Ben olsam ilk adımı hep ölçümle atarım. AZ-305 sınavına hazırlanırken de aynı refleksi kazanmıştım aslında: önce ihtiyaç analizi, sonra servis seçimi… Bu yaklaşım Cosmos DB projelerinde de şaşırtıcı derecede işe yarıyor.

Benden Kalan Notlar ve Saha Deneyimi

2019’da kendi lab ortamımda benzer bir şeyi elle yapmaya çalışmıştım; change feed consumer yazdık, retry ekledik, poison message yönettik… Sonra baktık ki asıl problem teknoloji değilmiş — bakım yüküymüş! Bugün GSI gibi özellikler o eski emeğin üstüne bayağı iyi oturuyor bence.

Bazıları bu tip özellikleri “konfor katmanı” diye küçümsüyor ama ben öyle bakmıyorum (buna dikkat edin). Kurumsalda konfor çoğu — en azından ben öyle düşünüyorum — zaman sürdürülebilirlik demek oluyor (ve evet bütçe kurtarmak da buna dahil) (en azından benim deneyimim böyle). Eksik taraf mı? Tabiî var: her senaryoda mucize yaratmıyor ve yanlış tasarlanırsa yine sizi üzebilir!

Eğer benim tavsiyemi sorarsanız şuradan başlayın: mevcut workload’unuzu çıkarın, en çok fan-out yapan sorguları bulun ve bunların iş etkisini ölçün. Sonra pilot kurun… yoksa teoride güzel görünen şey pratikte hayal kırıklığı yaratabiliyor.

Sıkça Sorulan Sorular

Azure Cosmos DB Global Secondary Index ne işe yarıyor?

Aslında çok basit bir mantığı var: aynı veriyi farklı bir partition key ile otomatik senkronlayan ikinci bir erişim yolu. Yanı cross-partition sorgu maliyetini düşürüyor ve belirli okuma desenlerini hızlandırıyor.

GSI ile ikinci container arasında ne fark var?

İkinci container kullanıyorsanız senkronizasyon kodunu kendiniz yazmak zorunda kalıyorsunuz; GSI’da bu işi servis sizin yerinize hallediyor. Bence bu fark operasyonel açıdan gerçekten önemli, çünkü yönetmeniz gereken şey azalıyor.

Her uygulamada GSI kullanmak mantıklı mı?

Şunu söyleyeyim, Hayır, kesinlikle değil. Tecrübeme göre sadece gerçekten alternatif bir read pattern ihtiyacınız varsa kullanmak gerekiyor; yoksa gereksiz yere işleri karmaşık hâle getirebilir.

Maliyet açısından faydalı mı?

Açıkçası evet, özellikle çapraz bölüm taraması yapan ağır sorgularda ciddi fark yaratıyor. Ama toplam maliyet iş yüküne göre değişiyor; pilot test yapmadan karar vermemenizi tavsiye ederim (en azından benim deneyimim böyle)

Kaynaklar ve İleri Okuma

Azure Cosmos DB Resmî Dokümantasyonu

Microsoft Azure Blog — Global Secondary Indexes GA Duyurusu

Şunu fark ettim: Azure Cosmos DB NoSQL Sorgulama Rehberi

🤖Bu yazı yapay zeka (büyük dil modelleri) ile hazırlanmış, insan editör tarafından incelenmiştir. İçerik üretim sürecimiz.
Aşkın KILIÇ
Aşkın KILIÇYazar

20+ yıl deneyimli Azure Solutions Architect. Microsoft sertifikalı bulut mimari ve DevOps danışmanı. Azure, yapay zekâ ve bulut teknolojileri üzerine Türkçe teknik içerikler üretiyor.

AZ-305AZ-104AZ-500AZ-400DP-203AI-102

İlgili Yazılar

Azure’da Modernizasyon: Ajanlarla Sürekli Dönüşüm
Azure’da Modernizasyon: Ajanlarla Sürekli Dönüşüm12 Mar 2026
Microsoft Sovereign Private Cloud: Azure Local ile Ölçek Büyürken Kontrolü Kaybetmemek
Microsoft Sovereign Private Cloud: Azure Local ile Ölçek Büyürken Kontrolü Kaybetmemek5 May 2026
Git'te NTLM Kapanıyor: Azure DevOps Server İçin Kritik Uyarı
Git'te NTLM Kapanıyor: Azure DevOps Server İçin Kritik Uyarı3 Tem 2026
ABD Devletine Gizli Bulut: Azure Confidential Computing ile Yeni Dönem
ABD Devletine Gizli Bulut: Azure Confidential Computing ile Yeni Dönem22 Mar 2026

Bu içerik işinize yaradı mı?

Benzer içerikleri kaçırmamak için YouTube ve GitHub hesaplarımı takip edin.

YouTube GitHub

Haftalık Bülten

Her pazar özenle seçilmiş teknoloji yazıları doğrudan e-postanıza gelsin.

Etiket Azure Cosmos DB cross-partition query Global Secondary Index GSI partition key performans optimizasyonu RU tüketimi
Önceki yazı

Azure Cosmos DB vNext Emulator: Yerelde Gerçek Gibi Test Etmek

Sonraki yazı

VS Code’da Kurumsal Eklenti Dönemi: Kontrol, Hız, Düzen

İlginizi Çekebilir

.NET MAUI Xcode 27 Uyumu: Scene Lifecycle Geçişi
Aşkın KILIÇ 0

.NET MAUI Xcode 27 Uyumu: Scene Lifecycle Geçişi

19/10/2026
Visual Studio Subscription: VSLive! San Diego Dersleri
Aşkın KILIÇ 0

Visual Studio Subscription: VSLive! San Diego Dersleri

19/10/2026
Azure MCP Server 3.0: Yeni Araçlar ve Yükseltme Notları
Aşkın KILIÇ 0

Azure MCP Server 3.0: Yeni Araçlar ve Yükseltme Notları

19/10/2026

2 comments

comments user
Ebru G. 06/06/2026 17:43

Cosmos DB’de partition key dışında sorgu yazmak bazen gerçekten baş ağrısına dönüşüyor. GSI bu noktada işe yarıyor ama yazma maliyetini de göz önünde bulundurmak lazım, özellikle yoğun yazma trafiği olan sistemlerde. Siz bunu production’da kullandınız mı, RU tüketiminde belirgin bir fark gördünüz mü?

comments user
Uğur H. 06/06/2026 19:17

GSI konusunu hep kafam karışık anlardım ama okuma yükünü hafifletme açısından ele alınca daha net oturdu. Peki composite index ile birlikte kullanıldığında maliyet nasıl şekilleniyor, onu da merak ediyorum açıkçası. Bu arada şu yazınız da güzeldi: OmniVec ile Vektör Borusunu Kurmak: Azure’da Sessiz Güç — https://www.askinkilic.com.tr/omnivec-ile-vektor-borusunu-kurmak-azureda-sessiz-guc/

Yorumlar kapalı.

Yazı Ara

Takip Edin

  • Takipçi
  • Takipçi
  • Takipçi
  • Abone
  • Takipçi
  • .NET MAUI Xcode 27 Uyumu: Scene Lifecycle Geçişi
    19/10/2026 .NET MAUI Xcode 27 Uyumu: Scene Lifecycle Geçişi
  • Visual Studio 2026 18.11: Sekmeleri Klavyeyle Taşıyın
    19/10/2026 Visual Studio 2026 18.11: Sekmeleri Klavyeyle Taşıyın
  • Visual Studio Subscription: VSLive! San Diego Dersleri
    19/10/2026 Visual Studio Subscription: VSLive! San Diego Dersleri
  • Azure MCP Server 3.0: Yeni Araçlar ve Yükseltme Notları
    19/10/2026 Azure MCP Server 3.0: Yeni Araçlar ve Yükseltme Notları
  • GitHub Copilot'ta Kaldırılan Modeller ve Geçiş Planı
    18/10/2026 GitHub Copilot’ta Kaldırılan Modeller ve Geçiş Planı
  • DevOps Güncellemeleri
    09/03/2026 Azure DevOps Server Şubat Güncellemesi: Güvenlik
  • 2026-03-10_15-35-23
    10/03/2026 Microsoft 365 E7: Yapay Zeka ve Güvenlik Bir Arada
  • GitHub Copilot Pro Denemeleri Neden Durdu?
    11/04/2026 GitHub Copilot Pro Denemeleri Neden Durduruldu?
  • Artımlı Anlık Görüntü: Anında Geri Yükleme
    09/03/2026 Artımlı Anlık Görüntü: Anında Geri Yükleme
  • Bulut Sunucu Altyapısı
    09/03/2026 Microsoft Sovereign Cloud: İzolasyonda Güvenli Bulut
  • GitHub Copilot Pro Denemeleri Neden Durdu?
    11/04/2026 GitHub Copilot Pro Denemeleri Neden Durduruldu?
  • vcpkg'de Paralel Kurulum ve Güvenlik Yaması: Neler Değişti?
    06/04/2026 vcpkg’de Paralel Kurulum ve Güvenlik Yaması: Neler Değişti?
  • MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
    08/04/2026 MCP Apps’i Kolaylaştıran Fluent API: Sahada Ne Değişiyor?
  • Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
    06/04/2026 Yapay Zekâ Çağında Sanayi Politikası: Asıl Mesela Ne?
  • Microsoft Foundry Mart 2026: Sahadan İlk İzlenimler
    10/04/2026 Microsoft Foundry Mart 2026: Sahadan İlk İzlenimler

Hakkımda

Aşkın KILIÇ

Microsoft Azure Çözüm Uzmanı. Bulut bilişim, yapay zekâ, DevOps ve kurumsal güvenlik üzerine yazılar yazıyorum.

Devamını Oku →

Kategoriler

  • Azure
  • Bulut Altyapı
  • DevOps
  • Geliştirici Araçları
  • Güvenlik & Kimlik
  • Konteyner & Kubernetes
  • Kurumsal Teknoloji
  • Microsoft 365
  • Microsoft Azure
  • Veri & Analitik
  • Yapay Zeka

Popüler Etiketler

AI ajanları ASP.NET Core Azure azure app service Azure Cosmos DB Azure Developer CLI Azure DevOps Azure OpenAI azure sdk Azure SQL CI/CD code review copilot Copilot CLI DevOps geliştirici verimliliği GitHub GitHub Actions GitHub Copilot güvenlik Kimlik Doğrulama Kubernetes Kurumsal geliştirme kurumsal güvenlik kurumsal yapay zeka maliyet optimizasyonu MCP Microsoft Agent Framework Microsoft Azure Microsoft Entra ID Microsoft Foundry otomasyon performans public preview Pull Request RAG REST API SEO uyumlu verimlilik veri yönetimi Visual Studio Visual Studio 2026 VS Code yapay zeka Yazılım geliştirme
  • Gizlilik Politikası
  • Çerez Politikası
  • Kullanım Koşulları
  • Hakkımda
  • İletişim

© 2026 Aşkın KILIÇ | Tüm hakları saklıdır. | Powered By SpiceThemes

Çerez tercihleri Zorunlu çerezler sitenin çalışması için kullanılır. Analitik çerezler yalnız açık izninizden sonra Google Analytics ve Microsoft Clarity için etkinleştirilir. KVKK ve Çerez Politikası
✉

Haftalık Bülten

Azure, DevOps ve Yapay Zeka dünyasındaki en güncel içerikleri her hafta doğrudan e-postanıza alın.

Spam yok. İstediğiniz zaman iptal edebilirsiniz.
📱
Uygulamayı Yükle Ana ekrana ekle, çevrimdışı oku
Ana Sayfa
Kategoriler
💻 Geliştirici Araçları 507 yazı 🏗️ Bulut Altyapı 407 yazı 🤖 Yapay Zeka 331 yazı ☁️ Microsoft Azure 279 yazı 🔧 DevOps 277 yazı 🔒 Güvenlik & Kimlik 223 yazı 🏢 Kurumsal Teknoloji 107 yazı 📊 Veri & Analitik 78 yazı 🐳 Konteyner & Kubernetes 62 yazı 📧 Microsoft 365 22 yazı 📁 Azure 1 yazı
Ara
Popüler
Yapay Zeka Azure Kubernetes DevOps Copilot Docker
Paylaş
WhatsApp
İçindekiler
    ← Azure Cosmos DB vNext Emulator...
    VS Code’da Kurumsal Eklenti Dö... →
    📩

    Gitmeden önce!

    Her pazar özenle seçilmiş teknoloji yazıları ve AI haberleri doğrudan e-postanıza gelsin. Ücretsiz, spam yok.

    🔒 Bilgileriniz güvende. İstediğiniz zaman ayrılabilirsiniz.

    📬 Haftalık bülten: Teknoloji + AI haberleri
    Beni Takip Et Yeni Azure / AI / DevOps yazılarını GitHub ve RSS üzerinden takip edin.
    GitHub RSS