Microsoft AZ-204: Azure Cosmos DB — Çalışma kılavuzu
Şunun bir parçası: Microsoft Azure Developer Associate AZ-204 — Çalışma kılavuzu. Doğrulanmış cevaplarla şurada pratik yapın: Microsoft sınav merkezi, veya şurada süreli deneme sınavları çözün: ExamRoll.io.
Genel Bakış
Azure Cosmos DB, düşük gecikmeli, elastik olarak ölçeklenebilir uygulamalar için tasarlanmış, tam olarak yönetilen, küresel olarak dağıtılmış, çok modelli bir veritabanıdır. Ortak, bölümlenmiş bir depolama ve çoğaltma motoru üzerinde birden çok API sunar, beş ayarlanabilir tutarlılık seviyesi sağlar ve kullanılabilirlik, gecikme, aktarım hızı ve tutarlılık için kapsamlı SLA’lar sunar. Veriler hesaplar, veritabanları ve kapsayıcılar (veya API’ye bağlı olarak koleksiyonlar/tablolar/graflar) şeklinde düzenlenir. Kapsayıcılar, bir bölüm anahtarı ile yatay olarak bölümlenir ve ölçeklenir ve tüm işlemler, CPU, IOPS ve belleği soyutlayan normalleştirilmiş bir para birimi olan İstek Birimleri (RU) cinsinden ölçülür.
API’ler ve Programlanabilirlik
Cosmos DB, veri modelinizi yeniden yazmadan yerel SDK’ları ve sürücüleri kullanabilmeniz için birkaç kablo uyumlu API’yi destekler:
- SQL (Core) API: Yeni iş yükleri için önerilen varsayılan seçenektir. Zengin, SQL benzeri sorgulama (SELECT, WHERE, ORDER BY, bir belge içinde JOIN, toplamalar) ve hesaplanmış yüklemler/projeksiyonlar için deterministik UDF’ler ile JSON belgelerini depolar. Sunucu tarafı iş mantığı, tek bir mantıksal bölüm içinde JavaScript saklı yordamları ve ön/son tetikleyiciler olarak çalışır ve bölüm anahtarını paylaşan birden çok öğe üzerinde ACID işlemlerini mümkün kılar. TransactionalBatch, bir bölüm içinde çoklu öğe işlemleri sağlar. Nokta okumaları (id + bölüm anahtarı) RU açısından en verimli olanlardır. Şu gibi bir kodla bir .NET istemcisi oluşturun:
undefined
.
MongoDB API: MongoDB ile kablo uyumludur, bu da standart MongoDB sürücülerinin ve araçlarının (örneğin, geçişler için mongodump/mongorestore) kullanımını sağlar. Cosmos DB’nin dağıtımı, otomatik ölçeklendirmesi ve SLA’ları ile desteklenen MongoDB özelliklerini kullanabilirsiniz. Çok belgeli işlemler aynı mantıksal bölüm içinde desteklenir; kullanıcı başına katı atomiklik için, bölümlenmemiş bir koleksiyon kullanın veya ilgili belgelerin bir bölümü paylaşması için kullanıcı adı gibi bir özelliğe göre bölümleme yapın.
Cassandra API: Apache Cassandra sürücüleri ve CQL ile uyumludur. Geniş sütunlu ve zaman serisi erişim desenleri için idealdir. Düğüm yönetimi yerine otomatik küresel dağıtım ve RU tabanlı ölçeklendirme elde edersiniz.
Gremlin API: TinkerPop Gremlin sorguları ve geçişleri ile özellik grafiği modeli. Bölümleme, ölçeklenebilir geçişler için köşe noktalarını ve kenarları dağıtmak için esastır.
Table API: Azure Table Storage uyumlu SDK’lar ve semantiklerle anahtar-değer, ancak Cosmos DB’nin küresel dağıtımı, RU aktarım hızı ve daha düşük gecikmeli dizinleri ile desteklenir.
API’ler arasında ortak olan SDK işlemleri arasında CRUD, ETag’lerle iyimser eşzamanlılık, upsert’ler, sunucu tarafı betikler (saklı yordamlar, tetikleyiciler) ve UDF’ler (SQL API) bulunur. Sorgular, RU’ları azaltmak ve güvenliği artırmak için parametrelendirilir. Toplu işlemler ve akış API’leri, yüksek verimli alım için istemci ek yükünü ve RU maliyetlerini en aza indirir.
Tutarlılık, Dizinleme ve Sorgu Semantiği
Cosmos DB, hesap başına beş iyi tanımlanmış tutarlılık seviyesi sunar (birçok SDK’da istek başına geçersiz kılınabilir):
Güçlü: Doğrusallaştırılabilirlik—okumalar küresel olarak en son işlenmiş yazmayı görür. Doğruluğu en üst düzeye çıkarır, yazma gecikmesini ve bölgesel esnekliği sınırlar ve çok bölgeli yazmalar etkinken kullanılamaz.
Sınırlı Eskime: Okumalar, yazmalardan en fazla K sürüm veya T süre kadar geride kalır. Monotonik okuma ve yazma sıralamasını garanti eder; sınırlı gecikmeyi tolere edebilen küresel olarak dağıtılmış okumalar için iyi bir dengedir.
Oturum (varsayılan): Oturum başına kendi yazdığını okuma, yazmanın okumayı takip etmesi ve monotonik okumalar. Her istemci bir oturum belirteci tutar; bunu düğümler arasında paylaşmak (örneğin, SDK’daki istek seçenekleri aracılığıyla) bu düğümler arasında kendi yazdığını okuma özelliğini korur.
Tutarlı Ön Ek: Okumalar asla sıra dışı yazmaları gözlemlemez, ancak günlüğün bir ön ekini görebilir.
Nihai: Sıralama garantisi olmaksızın en yüksek kullanılabilirlik ve en düşük gecikme.
Dizinleme, SQL API için varsayılan olarak otomatik ve tutarlıdır. Her öğe ve özellik, şema yönetimi olmaksızın dizinlenir, bu nedenle yazmalar dizini hemen günceller (dizinleme modu Tutarlı). Dizinleme ilkesini şu şekilde iyileştirebilirsiniz:
- RU yazma maliyetlerini düşürmek için büyük veya yazma yoğun yolları hariç tutun.
- Birden çok özellikte verimli ORDER BY’ı ve farklı özelliklerde filtreleme ile sıralamayı birleştiren sorguları desteklemek için bileşik dizinler ekleyin.
- GeoJSON türleri (Point, LineString, Polygon, MultiPolygon) için uzamsal dizinler ekleyin ve ST_DISTANCE, ST_WITHIN ve ST_INTERSECTS gibi uzamsal işlevlerle sorgulama yapın. Dizinleme modu, yalnızca id/bölüm anahtarı ile okunan yazma için optimize edilmiş kapsayıcılar için Yok olarak da ayarlanabilir. Farklı API’ler dizinlemeyi kendi yerel paradigmaları aracılığıyla sunar (örneğin, MongoDB ve Cassandra sürücü yapıları), ancak hepsi temel Cosmos dizinleme motorundan yararlanır.
Öğe boyutuna ve sorgu şekline dikkat edin. SQL API bir öğe boyutu sınırı uygular (örneğin, 2 MB) ve bölümler arası sorgular, büyük projeksiyonlar ve karmaşık yüklemler RU tüketimini artırır. RU maliyetini en aza indirmek için seçici projeksiyonlar, uygun filtreler ve bölüm farkındalığı olan sorgular kullanın.
Bölümleme ve Aktarım Hızı (RU’lar)
Cosmos DB, mantıksal ve fiziksel bölümleri birbirinden ayırır:
- Mantıksal bölümler, öğeleri bir bölüm anahtarı değerine göre gruplandırır. Aynı anahtarı paylaşan tüm öğeler, işlemsel toplu işlere (transactional batches) ve sunucu tarafı betiklerine birlikte katılır.
- Fiziksel bölümler hizmet tarafından yönetilir ve birçok mantıksal bölümü barındırır. Aktarım hızı (RU’lar) ve depolama, fiziksel bölümler arasında dağıtılır; “yoğun” (hot) mantıksal bölümler, bir fiziksel bölümün aktarım hızında darboğaza neden olabilir.
Yüksek kardinaliteye ve zaman içinde eşit erişim dağılımına sahip etkili bir bölüm anahtarı seçin. İyi anahtarlar, birincil erişim yolunuzla (örneğin, userId, deviceId, tenantId veya orderId) ilişkilidir. Eğriliğe (skew) neden olan düşük kardinaliteli veya zaman dilimlerine ayrılmış (time-bucketed) anahtarlardan (örneğin, country, status veya day) kaçının. Tek bir özelliğin uygun olmadığı durumlarda:
- Birden çok özelliği birleştiren (concatenate) sentetik bir anahtar kullanın.
- Ön ek (prefix) ile sorgulanabilirliği korurken veya bir arama tablosu (lookup) tutarak yükü bölümler arasında yaymak için rastgele veya hash’lenmiş bir son ek ekleyin.
- Daha iyi dağıtım ve verimli ön ek (prefix) sorguları sağlamak için birden çok özelliği birleştiren hiyerarşik bölüm anahtarlarını değerlendirin.
Aktarım hızı modelleri:
- Sağlanan aktarım hızı (Provisioned throughput): Bir container veya veritabanı (alt container’lar tarafından paylaşılır) üzerinde RU/s ayırın. Maliyet istikrarı ile öngörülebilir performans sunar. Manuel olarak veya API’ler/CLI aracılığıyla ölçeklendirin.
- Otomatik ölçeklendirme (Autoscale): Maksimum bir RU/s değeri belirleyin; Cosmos DB, yüke bağlı olarak bu maksimumun %10’u ile %100’ü arasında elastik olarak ölçeklenir. Saatlik kullanılan en yüksek RU üzerinden faturalandırılır; değişken iş yükleri ve bilinmeyen ani artışlar için mükemmeldir.
- Sunucusuz (Serverless): Sağlanan RU/s yoktur; işlem başına RU tüketimine göre ödeme yaparsınız. Öngörülebilir bir taban çizgisi olmayan geliştirme, ani artış gösteren (spiky) veya düşük aktarım hızlı iş yükleri için idealdir.
RU optimizasyon teknikleri arasında id+bölüm anahtarı ile yapılan nokta okumaları (point reads), parametreli sorgular, seçici projeksiyonlar (selective projections), JOIN benzeri desenleri azaltmak için denormalizasyon ve karmaşık çoklu container sorguları yerine türetilmiş görünümler (derived views) için değişiklik akışını (change feed) kullanma yer alır. RU maliyeti yüksek yeniden denemelerden kaçınmak için eş zamanlılık kontrolü (concurrency control) amacıyla If-Match ile birlikte ETag’leri kullanın. RU metriklerini ve kısıtlamayı (throttling) (HTTP 429) izleyin ve SDK’larda sapma (jitter) içeren yeniden deneme politikaları uygulayın.
Küresel Dağıtım ve Değişiklik Akışı
Cosmos DB’nin anahtar teslim, çok bölgeli dağıtım özelliği, istediğiniz zaman bölge eklemenize veya kaldırmanıza olanak tanır. Tüm bölgeler okunabilirdir; çok bölgeli yazma işlemlerini etkinleştirmek, yakın bölgelerde 99. yüzdelik dilimde 10 ms’nin altında okuma gecikmesiyle her yerde eş zamanlı yazma işlemlerine izin verir. İstemci SDK’ları, trafiği yerel olarak yönlendirmek ve sorunsuz bir şekilde yük devretmek için tercih edilen bölgelerle yapılandırılmalıdır. .NET’te, tercih edilen bölgeleri
undefined
(veya diğer SDK’lardaki eşdeğeri) aracılığıyla belirtin. Çok bölgeli yazma işlemleri bir çakışma çözümleme ilkesi gerektirir:
- Son Yazanın Kazanması (Last Write Wins): Bir çakışma çözümleme yolu (örneğin, bir zaman damgası veya sürüm özelliği) kullanın. Belirtilmezse, sistem zaman damgası kullanılabilir.
- Özel Çözümleme: Çakışmaları deterministik olarak uzlaştırmak için bir birleştirme saklı yordamı (merge stored procedure) kullanın.
- Manuel: Çakışma akışını (conflicts feed) inceleyin ve açıkça çözün.
Değişiklik akışı (change feed), her mantıksal bölüm anahtarı başına sıralı, yalnızca ekleme yapılabilen (append-only) bir değişiklik günlüğü sağlar. Şu durumlar için idealdir:
- Olay güdümlü mimariler ve CQRS (belgeleri okuma için optimize edilmiş görünümlere yansıtma).
- Alt akış (downstream) işlem hatları (veri gölüne alım, arama dizinlemesi, önbellek geçersizleştirme).
- Neredeyse gerçek zamanlı analitik ve denetim. İki ana tüketim deseni vardır:
- Değişiklik Akışı İşlemci (Change Feed Processor) kütüphanesi: Bölümleri çalışanlar arasında dengelemek ve güvenli bir şekilde yatay ölçeklenmek için bir kiralamalar (leases) kapsayıcısı kullanan dağıtık, hataya dayanıklı işleme.
undefined
ile Çekme (Pull) modeli: Kontrol ettiğiniz denetim noktası (checkpointing) mantığıyla değişiklikleri açıkça yineleyin; işi paralelleştirmek için
undefined
boyunca segmentlere ayırın. Azure Functions, sunucusuz işleme için işlemci desenini sarmalayan bir Cosmos DB tetikleyicisi sunar. Baştan veya “şimdi"den başlayabilirsiniz ve tam doğruluklu değişiklik akışı (full-fidelity change feed), eksiksiz denetim izleri için ara güncellemeleri ve silmeleri yakalar. Kiralama (lease) kapsayıcınızı yeterli aktarım hızı (throughput) ile tasarlayın ve yeniden denemeleri ve en az bir kez teslimatı (at-least-once delivery) karşılamak için bir kez etkili (idempotent) işleyiciler seçin.
Pratik Problem Senaryosu
Spotify’ın, kullanıcı etkileşimlerini gerçek zamanlı olarak alan, kullanıcı başına önerileri güncelleyen ve en yakın bölgeden düşük gecikmeli okumalar sunan, küresel olarak kullanılabilir bir kişiselleştirme hizmeti sunması gerekiyor. Yazma işlemleri dünya çapındaki mobil istemcilerden gelebilir ve öneri güncellemelerinin alt akış (downstream) sistemlere yayılması gerekir.
- Çok bölgeli yazma işlemleriyle Cosmos DB SQL (Core) API’sini seçin
- Neden: Core API, zengin sorgulama ve sunucu tarafı programlanabilirlik sunar. Çok bölgeli yazma işlemleri, küresel olarak yazma gecikmesini en aza indirir ve yazma kesintisi olmadan bölgesel yük devretmeyi tolere eder.
- Yüksek kardinaliteye sahip bir bölüm anahtarı ve hiyerarşik anahtarlar tanımlayın
- Yaklaşım: userId’ye göre bölümleme yapın; aşırı aktif kullanıcılar için, “bucket"ın bir hash son eki olduğu [“userId”, “bucket”] gibi hiyerarşik anahtarlar kullanın.
- Neden: Yazma ve okuma yükünü eşit olarak dağıtır, kullanıcı başına işlemsel (transactional) güncellemelere olanak tanır ve sıcak bölümlerden (hot partition) kaçınır.
- Birincil kapsayıcılarda otomatik ölçeklenen aktarım hızını (autoscale throughput) yapılandırın
- Neden: Trafik günlük döngüsel ve kampanya odaklıdır; otomatik ölçeklendirme, yapılandırılan maksimum RU/s’ye kadar olan ani artışları yönetirken maliyeti gerçek yüke orantılı tutar.
- Hesap düzeyinde tutarlılığı Oturum (Session) olarak ayarlayın
- Neden: Mobil istemciler, Güçlü (Strong) tutarlılığın gecikme kısıtlamaları olmadan kullanıcı deneyimi için kendi yazdığını okuma (read-your-writes) özelliğine ihtiyaç duyar. Oturum (Session) belirteçleri, düğümler arasında oturum semantiğini korumak için istemciler ve ağ geçidi (gateway) katmanı tarafından taşınır.
- Azure Functions ve Değişiklik Akışı İşlemcisi (Change Feed Processor) ile değişiklik akışı işlemeyi uygulayın
- Yaklaşım: Etkileşimler kapsayıcısına bağlı bir Cosmos DB tetikleyicisi olan bir Functions uygulaması oluşturun. Adanmış bir kiralamalar (leases) kapsayıcısı kullanın ve paralellik için birden çok örneği etkinleştirin.
- Neden: Bu, somutlaştırılmış görünümleri (materialized view) (örneğin, bir öneriler kapsayıcısı) güncellemek ve akış analitiği için olayları Event Hubs’a yayımlamak amacıyla dayanıklı, ölçeklenebilir ve düşük operasyonel yük gerektiren bir işleme sağlar.
- Özelleştirilmiş bir dizinleme ilkesine sahip türetilmiş bir öneriler kapsayıcısı oluşturun
- Yaklaşım: Büyük, yazma ağırlıklı özellikleri dizinlemeden hariç tutun; TOP-K sorgularını desteklemek için (userId, score DESC) için bileşik dizinler ekleyin.
- Neden: Kişiselleştirilmiş akışlar için verimli sıralanmış aramalara olanak tanırken RU yazma maliyetlerini düşürür.
- SDK’larda tercih edilen bölgelerle küresel dağıtımı etkinleştirin
- Yaklaşım: Kuzey Amerika, Avrupa ve APAC’ta bölgeler ekleyin. Uygulama dağıtım bölgesine göre
undefined
‘ı
undefined
ile yapılandırın.
- Neden: 10 ms’nin altında gecikme için okumaların yerel olarak sunulmasını ve yük devretmenin şeffaf olmasını sağlar.
- Çakışma çözümleme ve gözlemlenebilirliği yapılandırın
- Yaklaşım: Bir kez etkili (idempotent) güncellemeler için sunucu tarafından oluşturulan bir mantıksal saat (sürüm özelliği) ile Son Yazanın Kazanması (Last Write Wins) ilkesini kullanın ve nadir uç durumlar için çakışmaları bir izleme kuyruğuna yönlendirin.
- Neden: Eş zamanlı çok bölgeli yazma işlemleri altında deterministik yakınsamayı garanti eder ve operasyonel görünürlük sağlar.
Bu mimari, küresel olarak düşük gecikmeli okuma ve yazma işlemleri, değişiklik akışı aracılığıyla dayanıklı olay işleme, maliyet etkin otomatik ölçeklendirme ve kişiselleştirme iş yükleri için uygun sağlam tutarlılık semantiği sunar.
← Azure Storage ve Blob Storage · Tüm alanlar · Azure Konteyner Çözümleri →
Bu soruları çözün → · ExamRoll.io’da süreli pratik →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Sınavınızı geçin →