Ölçeklendirme Planı: Çoğaltma Kümesinden Parçalı Kümeye
Öğrenenler, kapasite planı hazırlayacak ve uygulamanın okuma-yazma dağılımını destekleyen, ancak yoğunlaşma noktaları oluşturmayan bir parça anahtarı seçecektir.
Ölçeklendirme Planı: Çoğaltma Kümesinden Parçalı Kümeye, CoddyKit'te ücretsiz bir MongoDB Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, MongoDB Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. MongoDB Academy kursu toplamda 4 dersten oluşur.
Ne Zaman Ölçeklendirmeniz Gerekir?
Çoğu uygulama tek bir MongoDB çoğaltma kümesiyle başlar ve hiçbir zaman parçalamaya ihtiyaç duymaz. Parçalama önemli ölçüde karmaşıklık ekler ve ilk tercih değil, son çare olmalıdır. Şu durumlarda parçalamayı değerlendirin: veri hacminiz tek bir çoğaltma kümesinin uygun maliyetle depolayabileceğinden fazlaysa; yazma aktarım hızınız tek bir birincilin işleyebileceğinden fazlaysa veya belirli koleksiyonlar bellekte verimli şekilde dizinlenemeyecek kadar büyükse. Parçalamadan önce her zaman dikey ölçeklendirmeyi (daha büyük örnekler) ve okuma ölçeklendirmesini (okumaları ikincillere dağıtma) deneyin.
1. Aşama: Tek Çoğaltma Kümesi
Her MongoDB dağıtımı için standart başlangıç noktası 3 üyeli bir çoğaltma kümesidir: bir birincil ve iki ikincil. Bu yapı yüksek kullanılabilirlik (birincil başarısız olursa otomatik yük devretme), veri dayanıklılığı (yazmaların birden çok üyeye çoğaltılması) ve okuma ölçeklendirmesi (raporlama iş yükleri için okumaların ikincillere gönderilmesi) sağlar. E-ticaret bitirme projemiz için 3 üyeli bir M30 Atlas kümesi, günlük milyonlarca siparişi rahatlıkla işler. Buradan başlayın ve parçalamayı değerlendirmeden önce ölçüm yapın.
// Capacity metrics to monitor on a single replica set
// (via Atlas Metrics or db.serverStatus())
const metricsToWatch = [
'connections.current', // approaching maxIncomingConnections?
'opcounters.insert', // write ops/sec approaching primary limit?
'mem.resident', // working set fitting in RAM?
'wiredTiger.cache.bytesCurrentlyInCache', // cache utilisation
'replicationLag' // secondaries keeping up?
]2. Aşama: İkincil Okumalarla Okuma Ölçeklendirmesi
Parçalamadan önce, readPreference: 'secondary' kullanarak analiz ve raporlama sorgularını ikincillere yönlendirip okumaları ölçeklendirin. Bu, işletimsel karmaşıklık eklemeden birincil üzerindeki okuma yükünü azaltır. Atlas'ta Analytics Nodes, hiçbir zaman birincil seçilmeyen ve ağır toplama iş yüklerini birincil performansını etkilemeden üstlenen özel ikincillerdir. Bu yaklaşım, yazma aktarım hızının kendisi darboğaz hâline gelene kadar iyi çalışır.
// Route heavy analytics to secondary nodes
const { MongoClient } = require('mongodb')
const client = new MongoClient(process.env.ATLAS_URI, {
readPreference: 'secondary' // global default for this client
})
// Or per-operation
const result = await db.collection('orders').aggregate(
[ /* heavy reporting pipeline */ ],
{ readPreference: 'secondary' } // does not compete with primary writes
)3. Aşama: Ne Zaman Parçalanmalı
Dikey ölçeklendirmenin çözemeyeceği bir sınıra ulaştığınızda parçalayın: en büyük kullanılabilir örnekte bile birincilin yazma aktarım hızı doygunluğa ulaşıyorsa; bir koleksiyonun çalışma kümesi (etkin olarak kullanılan veri ve dizinler), en büyük katmanda bile kümenin RAM kapasitesine sığmıyorsa veya belirli bir koleksiyon tek bir kümenin diskinde depolanamayacak kadar büyükse. Uygulamada çoğu uygulama yazma aktarım hızı sınırından önce RAM sınırına ulaşır; WiredTiger önbellek kullanımını ve çalışma kümesi boyutunu aylık olarak izleyin.
// Indicator: working set exceeding cache
// db.serverStatus().wiredTiger.cache
const cache = db.serverStatus().wiredTiger.cache
const cacheHitRatio = 1 - (cache['pages read into cache'] / cache['pages requested from the cache'])
console.log('Cache hit ratio:', (cacheHitRatio * 100).toFixed(1) + '%')
// Below 95%: working set is not fitting in cache — time to scaleHangi Koleksiyonun Parçalanacağının Seçilmesi
Yalnızca darboğaza neden olan koleksiyonları parçalayın. E-ticaret platformumuzda orders koleksiyonu en hızlı büyüyecek ve en fazla yazma trafiğini oluşturacaktır. products koleksiyonu büyük olabilir, ancak çoğunlukla ikincillerden karşılanabilecek okuma işlemleri alır. products koleksiyonunu parçalamadan bırakıp orders koleksiyonunu parçalamak (parçalanmamış bir yayın koleksiyonu olarak her parçada tutmak) yaygın ve pratik bir yaklaşımdır.
// Enable sharding on the database
sh.enableSharding('ecommerce')
// Shard the orders collection
sh.shardCollection('ecommerce.orders', { userId: 'hashed' })
// Verify shard distribution
sh.status()
db.orders.getShardDistribution()Orders İçin Parça Anahtarı Seçimi
orders için parça anahtarı, yazmaları parçalar arasında eşit dağıtmalı ve en yaygın sorgu kalıplarını desteklemelidir. userId değerini karma parça anahtarı olarak kullanmak, kullanıcı kimlikleri yüksek kardinaliteli ve rastgele olduğu için yazmaları eşit biçimde dağıtır. Dezavantajı şudur: tek bir kullanıcıyla sınırlı sorgular tüm parçalara dağılır. { userId: 1, _id: 1 } üzerinde bir aralıklı parça anahtarı kullanmak, bir kullanıcının siparişlerini aynı parçada tutar (kullanıcıya özel sorgular daha hızlıdır), ancak birkaç kullanıcı etkinliğin çoğunu oluşturuyorsa sıcak parçalar oluşması riskini taşır.
// Option 1: Hashed shard key — uniform write distribution
sh.shardCollection('ecommerce.orders', { userId: 'hashed' })
// Pros: even distribution
// Cons: user order history queries scatter across all shards
// Option 2: Compound ranged shard key — user orders co-located
sh.shardCollection('ecommerce.orders', { userId: 1, _id: 1 })
// Pros: all orders for a user are on one shard — fast history queries
// Cons: may create hot shards if a few users dominate trafficVeri Yerleşimi İçin Bölge Parçalama
E-ticaret platformu veri yerleşimi gereksinimleri olan birden çok bölgeye hizmet veriyorsa (AB verileri Avrupa'da kalmalıdır), belgeleri parça anahtarı aralıklarına göre belirli parçalara sabitlemek için bölge parçalamayı kullanın. Her bölge için bölgeler oluşturun, parçaları bölgelere atayın ve hangi parça anahtarı aralıklarının hangi bölgeye eşleneceğini tanımlayın. AB kullanıcılarının verileri AB bölgesindeki parçalarda kalır ve ayrı kümeler tutmadan GDPR gereksinimlerini karşılar.
// Zone sharding for regional data residency
// Assign shards to zones
sh.addShardToZone('shard0001', 'EU')
sh.addShardToZone('shard0002', 'US')
sh.addShardToZone('shard0003', 'APAC')
// Define shard key ranges for each region
// (Assuming userId prefix encodes region: 'EU-', 'US-', 'APAC-')
sh.updateZoneKeyRange('ecommerce.orders',
{ userId: 'EU-' }, { userId: 'EU-zzz' }, 'EU'
)
sh.updateZoneKeyRange('ecommerce.orders',
{ userId: 'US-' }, { userId: 'US-zzz' }, 'US'
)mongos ve Yapılandırma Sunucusu
Parçalanmış bir kümede mongos örnekleri sorgu yönlendirme katmanıdır. Uygulama sürücüleri doğrudan parçalara değil, mongos'a bağlanır. mongos, her sorgunun verilerini hangi parçaların tuttuğunu belirlemek için yapılandırma sunucusu çoğaltma kümesini (kümenin meta verilerini, parça eşlemelerini ve bölge atamalarını tutar) okur. Yüksek kullanılabilirlik için her zaman en az iki mongos örneği dağıtın; bunlar durum bilgisi tutmaz ve veri kaybı olmadan yeniden başlatılabilir.
Hedefli ve Dağıtıp Birleştiren Sorgular
Parçalanmış bir kümede hedefli sorgu, filtresinde parça anahtarını içerir; mongos bunu tam olarak bir parçaya yönlendirir. Dağıtıp birleştiren sorgu parça anahtarını içermez; mongos sorguyu tüm parçalara yayınlamak ve sonuçları birleştirmek zorundadır. Dağıtıp birleştiren sorgular maliyetlidir ve yoğun kullanılan yollarda kaçınılmalıdır. Parça anahtarınızı ve sorgu kalıplarınızı, en sık kullanılan sorgular parça anahtarı alanını içerecek şekilde tasarlayın.
// TARGETED: includes shard key (userId) — goes to one shard only
db.orders.find({ userId: 'user-123', status: 'pending' })
// SCATTER-GATHER: no shard key — hits ALL shards (expensive!)
db.orders.find({ status: 'pending', total: { $gt: 100 } })
// Verify with explain in sharded cluster
db.orders.find({ userId: 'user-123' }).explain('executionStats')
// Look for 'SINGLE_SHARD' vs 'SHARD_MERGE' in the winning planKapasite Planlama ve İzleme
Bir kapasite modeli oluşturun: her parçanın ne zaman dolacağını öngörmek için günlük belge büyüme hızını × ortalama belge boyutunu tahmin edin. Atlas'ta kullanım eşikleri aşıldığında depolama eklemek veya örnek katmanlarını yükseltmek için Cluster Autoscaling özelliğini kullanın. Şu durumlar için Atlas uyarıları ayarlayın: disk kullanımı %80'in üzerinde; CPU kullanımı 1 saatten uzun süre %70'in üzerinde ve çoğaltma gecikmesi 10 saniyenin üzerinde. Proaktif izleme, sabah 3'te ortaya çıkan telaşlı müdahaleleri önler.
// Capacity projection script
const avgDocBytes = 1024 // 1 KB average order document
const dailyOrders = 50000
const retentionDays = 365 * 3 // 3 years
const totalOrders = dailyOrders * retentionDays
const totalBytes = totalOrders * avgDocBytes
const totalGB = totalBytes / 1e9
console.log('Projected orders:', totalOrders.toLocaleString())
console.log('Projected storage:', totalGB.toFixed(0), 'GB')
// Add 3x for indexes + WiredTiger overhead
console.log('Recommended disk:', (totalGB * 3).toFixed(0), 'GB')Atlas Parçalanmış Kümeleri ve Kendi Barındırdığınız Kümeler
Atlas, parçalama altyapısının tamamını otomatik olarak yönetir: mongos yönlendiricilerini, yapılandırma sunucularını ve parça çoğaltma kümelerini sağlama; parçaları dengeleme ve kümeye düzeltme paketleri uygulama. Kendi barındırdığınız dağıtımlarda her bileşen manuel olarak sağlanmalı, izlenmeli ve bakımı yapılmalıdır; bu önemli bir işletim yüküdür. Çoğu ekip için Atlas parçalamanın sağladığı işletimsel tasarruf, uyumluluk gereksinimleri şirket içinde dağıtımı zorunlu kılmadıkça, kendi barındırılan çözüme göre ödenen ek maliyeti haklı çıkarır.
Hızlı Kontrol
Bu dersteki MongoDB ve NoSQL Veritabanları kavramlarını anlayıp anlamadığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: parçalamadan önce dikey ölçeklendirme yapın ve ikincil okumalardan yararlanın; parçalama, çoğu uygulamanın hiçbir zaman ihtiyaç duymadığı önemli bir karmaşıklık ekler. Parça anahtarı seçimi, yazma dağılımı (karma) ile sorgu hedefleme (aralıklı) arasında denge kurmalıdır. Parça anahtarını içeren hedefli sorgular tek bir parçaya giderken dağıtıp birleştiren sorgular tüm parçalara ulaşır ve maliyetlidir. Sırada, güvenlik sağlamlaştırması ve üretime hazırlık kontrol listesiyle bitirme projesini tamamlıyoruz.
Yapay zeka eğitmeniyle JavaScript öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 30
- Dersler
- 120
Sıkça Sorulan Sorular
“Ölçeklendirme Planı: Çoğaltma Kümesinden Parçalı Kümeye” dersi ücretsiz mi?
Evet — “Ölçeklendirme Planı: Çoğaltma Kümesinden Parçalı Kümeye” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve MongoDB Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. MongoDB Academy kursu toplamda 4 dersten oluşur.
“Ölçeklendirme Planı: Çoğaltma Kümesinden Parçalı Kümeye” dersinde ne öğreneceğim?
Öğrenenler, kapasite planı hazırlayacak ve uygulamanın okuma-yazma dağılımını destekleyen, ancak yoğunlaşma noktaları oluşturmayan bir parça anahtarı seçecektir. MongoDB Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
MongoDB Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te MongoDB Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Ölçeklendirme Planı: Çoğaltma Kümesinden Parçalı Kümeye” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu MongoDB Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her MongoDB Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Gereksinim Analizi ve Şema Tasarımı
- Dizin Stratejisi ve Sorgu Planlayıcısı Doğrulaması
- Ölçeklendirme Planı: Çoğaltma Kümesinden Parçalı Kümeye
- Güvenlik Güçlendirme ve Üretim Kontrol Listesi