# Sharding

Adres: https://softwaredictionary.org/tr/terimler/sharding
Kategori: Veritabanları
Son güncelleme: 2026-09-30
Okunuşu: şarding

Kısaca: Sharding, bir veritabanının verisini shard adı verilen birkaç sunucuya bölerek ölçeklendirme yöntemidir; her biri toplamın yalnızca bir kısmını saklar ve işler.

## Veritabanı sharding'i nedir?

Sharding, büyük bir veritabanını ayrı sunucularda yaşayan, shard adı verilen daha küçük parçalara böler. Her shard satırların bir alt kümesini tutar, örneğin A'dan M'ye kullanıcılar bir sunucuda, N'den Z'ye olanlar başka bir sunucuda; tüm shard'lar aynı şemayı paylaşır. Birlikte, tek bir makineden daha fazla veri saklayıp daha fazla trafiği karşılayabilen tek bir mantıksal veritabanı gibi davranırlar.

Her satırın nereye gideceğine bir shard anahtarı (shard key) karar verir. Aralık tabanlı sharding'de satırlar tarih ya da ID aralıkları gibi anahtar aralıklarına göre bölünür; hash tabanlı sharding'de anahtar bir hash fonksiyonundan geçirilir ve satırlar eşit dağılır; dizin tabanlı sharding'de ise bir arama tablosu her anahtarı shard'ına eşler. Uygulama, bir yönlendirme katmanı ya da veritabanının kendisi, her sorguyu doğru sunucuya göndermek için shard anahtarını kullanır.

Bir büyük kütüphanenin koleksiyonunu yazar soyadına göre birkaç binaya böldüğünü düşünün: her bina daha küçük ve daha az kalabalıktır, ancak hangisine gideceğinizi bilmeniz gerekir. Sharding büyük web uygulamalarında kullanılır ve MongoDB, Apache Cassandra, Vitess'li MySQL ve Citus'lu PostgreSQL gibi sistemlerde yerleşik olarak ya da eklentiyle bulunur.

Sharding çoğu zaman replikasyonla karıştırılır. Replikasyon aynı veriyi erişilebilirlik ve okuma ölçeklemesi için birkaç sunucuya kopyalar; sharding ise yazmaları ve depolamayı ölçeklemek için farklı veriyi sunuculara böler ve büyük sistemler genellikle her shard'ı replike ederek ikisini birleştirir. Shard'lar arasına yayılan sorgular ve transaction'lar daha yavaş ve daha zor olduğundan ve kötü bir shard anahtarı trafiğin çoğunu tek bir shard'a yığan sıcak noktalar (hot spot) yaratabildiğinden, ekipler genellikle ancak indeksleme, önbellekleme ve daha güçlü donanım yetmez hale geldiğinde sharding'e geçer.

## Önemli noktalar

- Sharding, bir veritabanının satırlarını birden fazla sunucuya böler.
- Bir shard anahtarı, her satırı hangi shard'ın saklayacağını belirler.
- Yaygın stratejiler aralık tabanlı, hash tabanlı ve dizin tabanlı sharding'dir.
- Sharding yazmaları ve depolamayı ölçekler; replikasyon erişilebilirlik ve okumalar için veriyi kopyalar.
- Shard'lar arası sorgular ve kötü seçilmiş bir shard anahtarı başlıca tuzaklardır.

## Örnek: Hash tabanlı sharding ile sorguları yönlendirmek

```javascript
// Pick a shard from the user ID, so all of a user's rows live together
import { createHash } from "node:crypto";

const shards = [dbShard0, dbShard1, dbShard2, dbShard3];

function shardFor(userId) {
  const hash = createHash("md5").update(String(userId)).digest();
  return shards[hash.readUInt32BE(0) % shards.length];
}

const db = shardFor(42);
const orders = await db.query("SELECT * FROM orders WHERE user_id = $1", [42]);
```

## Sık sorulan sorular

**Sharding ile replikasyon arasındaki fark nedir?**

Sharding, her sunucunun verinin farklı bir kısmını tutması için veriyi böler; bu da depolamayı ve yazmaları ölçekler. Replikasyon ise aynı veriyi birkaç sunucuya kopyalar; bu da erişilebilirliği ve okuma kapasitesini artırır. Birçok üretim sistemi ikisini birden kullanır.

**Sharding ile bölümleme (partitioning) arasındaki fark nedir?**

Bölümleme, bir tabloyu çoğunlukla tek bir veritabanı sunucusu içinde parçalara ayırmanın genel fikridir. Sharding ise birden fazla sunucuya yayılan yatay bölümlemedir; yani her parça kendi makinesinde çalışır.

**Bir veritabanı ne zaman shard'lanmalıdır?**

Genellikle yalnızca indeksleme, önbellekleme, sorgu ayarlama, okuma replikaları ve daha büyük donanımı denedikten sonra tek bir sunucu veri boyutunu ya da yazma yükünü artık kaldıramadığında. Sharding kalıcı karmaşıklık getirir; bu yüzden nadiren ilk ölçekleme adımıdır.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
