Sharding ile partitioning arasındaki fark nedir? Shard key nasıl seçilir ve sharding'in maliyetleri nelerdir?
Cevap
- Partitioning: büyük bir tabloyu aynı veritabanı sunucusu içinde daha küçük parçalara bölmek. Uygulama tek tablo görür.
- Sharding: veriyi farklı sunuculara (shard) dağıtmak; her shard verinin bir alt kümesini tutar. Yatay ölçeklemenin (yazma kapasitesi) yoludur.
Partitioning örneği (PostgreSQL)
CREATE TABLE events (
id bigint,
created_at timestamptz NOT NULL,
payload jsonb
) PARTITION BY RANGE (created_at);
CREATE TABLE events_2026_10 PARTITION OF events
FOR VALUES FROM ('2026-10-01') TO ('2026-11-01');Faydaları: sorgular yalnızca ilgili partition'ı tarar (partition pruning), eski veriyi DROP ile anında silmek mümkün olur.
Sharding stratejileri
| Strateji | Nasıl | Artı | Eksi |
|---|---|---|---|
| Range | user_id 1-1M shard A, 1M-2M shard B | Aralık sorguları kolay | Hot spot (yeni kullanıcılar hep son shard'da) |
| Hash | hash(user_id) mod N | Dengeli dağılım | Shard eklemek yeniden dağıtım gerektirir |
| Consistent hashing | Hash ring | Shard ekleyince az veri taşınır | Daha karmaşık |
| Directory / lookup | Hangi tenant hangi shard'da tablosu | Esnek, tenant taşınabilir | Lookup servisi ek bağımlılık |
İyi bir shard key
- Yüksek kardinaliteli ve eşit dağılan (ör.
tenant_id,user_id;countrydeğil). - En sık sorgulara dahil: sorguların çoğu tek shard'a gitmeli.
- Değişmeyen bir değer olmalı.
Maliyetler
- Shard'lar arası JOIN ve transaction pahalı veya imkânsız hale gelir.
- Global unique ID gerekir (UUIDv7, Snowflake ID).
- Yeniden dengeleme (resharding) operasyonel olarak zordur.
- Raporlama için verinin ayrı bir analitik sisteme akıtılması gerekir.
Bu yüzden sharding son çaredir: önce index ve sorgu optimizasyonu, cache, read replica, dikey ölçekleme ve partitioning denenir. Citus, Vitess veya dağıtık SQL veritabanları (CockroachDB, YugabyteDB) sharding'i uygulama kodundan soyutlayabilir.
İlgili Veritabanı & SQL soruları
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.