Dağıtık Veritabanı Sistemlerinde Veri Tutarlılığı ve Sharding Stratejileri
Modern web uygulamalarının ölçeklenmesi, veritabanı katmanında dikey büyümenin (vertical scaling) sınırlarına ulaşıldığında yatay büyümeyi (horizontal scaling) zorunlu kılar. Dağıtık veritabanı mimarileri, veriyi birden fazla fiziksel sunucuya bölerek yüksek erişilebilirlik sunar. Ancak bu durum, CAP teoremi gereği tutarlılık (consistency) ve bölünebilme toleransı (partition tolerance) arasında kritik bir denge kurulmasını gerektirir.
ACID Prensipleri Dağıtık Mimaride Nasıl Korunur?
Geleneksel ilişkisel veritabanlarında tek bir sunucu üzerinde sağlanan ACID (Atomicity, Consistency, Isolation, Durability) garantileri, sistem dağıtık hale geldiğinde karmaşıklaşır. İki Aşamalı Taahhüt (Two-Phase Commit - 2PC) protokolü, ağ üzerindeki tüm düğümlerin bir işlemi ya tamamen onaylamasını ya da tamamen geri almasını sağlar. Bu yöntem tutarlılığı korur ancak ağ gecikmelerine bağlı olarak performans maliyeti oluşturabilir.
"Büyük veri sistemlerinde tutarlılıktan ödün vermeden ölçeklenmek imkansızdır. Önemli olan, iş modeline uygun gecikme toleransını doğru belirlemektir."
Veri Bölümleme (Sharding) Yöntemleri
Veri tabanındaki yükü dengeli bir şekilde dağıtmak amacıyla kullanılan temel sharding yaklaşımları şunlardır:
- Range-Based Sharding: Verilerin belirli bir anahtar aralığına göre (örneğin ID veya tarih aralığı) ilgili sunuculara yazılması.
- Hash-Based Sharding: Shard anahtarının bir hash fonksiyonundan geçirilerek elde edilen sonuca göre sunuculara dağıtılması, daha dengeli bir yük dağılımı sağlar.
- Directory-Based Sharding: Hangi verinin hangi sunucuda olduğunu tutan merkezi bir eşleme tablosunun (lookup table) kullanılması.
Veritabanı Modellerinin Performans Karşılaştırması
Farklı mimari yapıların yoğun okuma ve yazma işlemlerinde gösterdiği throughput değerleri analiz edilmiştir:
| Mimari Tipi | Yazma Performansı | Okuma Performansı | Yatay Ölçeklenme |
|---|---|---|---|
| Tekil SQL (Monolitik) | Orta | Yüksek | Kısıtlı |
| Master-Slave Relational | Orta | Çok Yüksek | Sadece Okuma Yönünde |
| Dağıtık NoSQL (Sharded) | Çok Yüksek | Yüksek | Sınırsız (Mükemmel) |
Replikasyon Gecikmeleri ve Nihai Tutarlılık
Asenkron replikasyon kullanılan sistemlerde, ana sunucuya (master) yazılan bir verinin ikincil sunuculara (slave) ulaşması milisaniyeler sürebilir. Bu durum, kullanıcının veriyi güncelledikten ве hemen sonra eski veriyi görmesine (read-after-write inconsistency) yol açabilir. Bu tip senaryoları engellemek için kritik verilerde senkron, loglama işlemlerinde ise asenkron replikasyon modelleri tercih edilmelidir.