MongoDB, özellikle büyük ölçekli uygulamalar için vazgeçilmez bir NoSQL veritabanı haline geldi. Ancak veri miktarı arttıkça, tek bir sunucunun hem performans hem de güvenilirlik açısından yetersiz kalması kaçınılmazdır. İşte bu noktada devreye sharding (veri parçalama) ve replication (çoğaltma) mekanizmaları giriyor. Bu rehberde, MongoDB'nin bu iki kritik özelliğini adım adım ele alacağız.
Replication: Verinin Yedeklenmesi ve Yüksek Erişilebilirlik
Replication, MongoDB'de verinin birden fazla sunucuya kopyalanması işlemidir. Bu sayede bir sunucu arızalandığında diğerleri devreye girerek hizmet kesintisiz devam eder. MongoDB'nin replication yapısı Replica Set olarak adlandırılır.
Replica Set Nasıl Çalışır?
Bir replica set en az 3 üyeden oluşur: Primary (birincil) ve Secondary (ikincil) sunucular. Tüm yazma işlemleri primary üzerinde yapılır, ikincil sunucular ise bu verileri oplog (operation log) aracılığıyla eşzamanlı olarak kopyalar. Örneğin, 3 sunuculu bir replica set'te primary arızalanırsa, kalan iki secondary arasında bir seçim yapılır ve yeni primary belirlenir. Bu süreç genellikle birkaç saniye sürer.
Replica set'in avantajları arasında otomatik failover, yedeklilik ve okuma işlemlerinin secondary'lere yönlendirilerek yük dağıtımı sayılabilir. Ancak unutulmamalıdır ki, replication yazma performansını doğrudan artırmaz; hatta yazma gecikmesi bir miktar artabilir.
Sharding: Yatay Ölçeklendirme ile Sınırsız Veri
Sharding, büyük veri kümelerini birden fazla sunucuya (shard) dağıtarak performansı artırma yöntemidir. MongoDB'de sharding, otomatik olarak veriyi chunk adı verilen parçalara böler ve bunları farklı shard'lara yerleştirir.
Sharding Bileşenleri
Bir MongoDB sharding kümesi üç temel bileşenden oluşur:
- Shard: Verinin bir kısmını tutan replica set. Her shard kendi içinde replication yapar.
- Config Servers: Kümenin metadata'sını (hangi verinin nerede olduğu) saklayan özel replica set.
- Mongos: Uygulamaların veritabanına bağlandığı yönlendirici. Sorguları doğru shard'a yönlendirir.
Örneğin, bir e-ticaret sitesinde kullanıcı verilerini user_id'ye göre shard'lamak yaygındır. user_id 1-10000 arasındaki kullanıcılar bir shard'a, 10001-20000 arasındakiler başka bir shard'a gider. Bu sayede her shard üzerindeki yük azalır.
Shard Key Seçimi
Shard key, verinin hangi kritere göre dağıtılacağını belirler. Yanlış shard key seçimi veri dağılımında dengesizliğe (hotspot) yol açar. İdeal shard key yüksek kardinaliteye sahip, sık kullanılan ve düzgün dağılmış bir alan olmalıdır. Örneğin, hashed shard key kullanmak çoğu durumda iyi bir tercihtir.
Sharding ve Replication Birlikte Nasıl Çalışır?
Pratikte, sharding ve replication çoğu zaman birlikte kullanılır. Her shard aslında bir replica set'tir. Yani hem veri parçalanır hem de her parça yedeklenir. Bu, hem yüksek performans hem de yüksek erişilebilirlik sağlar. Örneğin, 3 shard'lı bir kümede her shard 3 üyeli bir replica set ise toplam 9 MongoDB sunucusu gerekir. Bu maliyetli olsa da, büyük ölçekli uygulamalar için kaçınılmazdır.
Unutmayın: Sharding karmaşıklığı artırır. Veri modeliniz küçükse veya tek bir sunucu yeterliyse sharding kullanmayın. Replication ise her projede olmazsa olmazdır.
Performans Optimizasyonu İpuçları
Write Concern ve Read Preference
Replica set'lerde yazma işlemlerinin ne kadar güvence altına alınacağını write concern belirler. w:1 yazma işleminin sadece primary'e yazılmasını isterken, w:majority çoğunluğa yazılmasını garanti eder. Okuma işlemlerinde ise read preference ile ikincil sunuculardan okuma yaparak yük dağıtılabilir.
Chunk Boyutu ve Balans
Sharding kümesinde chunk boyutu varsayılan olarak 64 MB'tır. Veri eklendikçe chunk'lar bölünür veya birleştirilir. Balancer adlı arka plan işlemi, chunk'ları shard'lar arasında eşit dağıtmak için sürekli çalışır. Ancak yoğun yazma trafiği sırasında balancer'ı geçici olarak devre dışı bırakmak performansı artırabilir.
Sonuç
MongoDB'de sharding ve replication, veritabanı yönetiminin vazgeçilmez iki aracıdır. Doğru yapılandırıldığında, kesintisiz hizmet ve yüksek performans sağlarlar. HostingServer.com.tr olarak, MongoDB tabanlı projelerinizde hem sharding hem de replication'ı etkin bir şekilde kullanmanızı öneriyoruz. İhtiyacınıza uygun bir küme tasarımı için uzman ekibimiz her zaman yanınızda.