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

StratejiNasılArtıEksi
Rangeuser_id 1-1M shard A, 1M-2M shard BAralık sorguları kolayHot spot (yeni kullanıcılar hep son shard'da)
Hashhash(user_id) mod NDengeli dağılımShard eklemek yeniden dağıtım gerektirir
Consistent hashingHash ringShard ekleyince az veri taşınırDaha karmaşık
Directory / lookupHangi tenant hangi shard'da tablosuEsnek, tenant taşınabilirLookup servisi ek bağımlılık

İyi bir shard key

  • Yüksek kardinaliteli ve eşit dağılan (ör. tenant_id, user_id; country değ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.

  1. INNER JOIN ile LEFT JOIN arasındaki fark nedir?KolayVeritabanı & SQLBackend
  2. Bir tablodaki ikinci en yüksek maaşı bulun.OrtaVeritabanı & SQLBackend
  3. Index nedir? Dezavantajları nelerdir?OrtaVeritabanı & SQLBackend
  4. ACID nedir?OrtaVeritabanı & SQLBackend
  5. Normalizasyon nedir? Ne zaman denormalizasyon yaparsınız?ZorVeritabanı & SQLBackend
  6. N+1 sorgu problemi nedir ve nasıl çözülür?OrtaVeritabanı & SQLBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle