Ana içeriğe geç

Sharding

Okunuşu
şarding
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/sharding

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.

Bir bakışta

Sharding: users tablosu user_id'ye göre üç veritabanı sunucusuna bölünür; shard 1 1–999, shard 2 1000–1999, shard 3 de 2000–2999 arasındaki id'leri tutar; yönlendirici user_id 2481 için gelen sorgunun shard anahtarını okur ve sorguyu yalnızca shard 3'e gönderir.tek tablo, shard'lara bölünmüşSorguuser_id = 2481Yönlendiricishard anahtarı: user_idShard 1user_id 1 – 999Shard 2user_id 1000 – 1999Shard 3user_id 2000 – 2999
Her sunucu satırların yalnızca bir kısmını tutar. Shard anahtarı yönlendiriciye hangisine soracağını söyler; diğer shard'lar sorguyu hiç görmez.

Ö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önlendirmekjavascript
// 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.

Sık karşılaştırılanlar

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar