Sharding
- 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.
Bir bakışta
Ö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
// 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
- Veritabanı ReplikasyonuVeritabanları, s. 41Veritabanı replikasyonu, verinin bir sunucudan diğerlerine sürekli kopyalanmasıdır; böylece birkaç sunucu güvenilirlik ve ölçek için aynı veriyi tutar.
- VeritabanıVeritabanları, s. 37Veritabanı, bilgisayarda düzenli biçimde saklanan ve uygulamaların verimlice kaydedip arayıp güncelleyebildiği, bir yazılımla yönetilen veri topluluğudur.
- CAP TeoremiVeritabanları, s. 3CAP teoremi, ağ arızası dağıtık bir veritabanını böldüğünde sistemin tutarlılık ile erişilebilirlikten birini seçmesi gerektiğini söyler; ikisi birden olamaz.
- NoSQLVeritabanları, s. 21NoSQL, veriyi ilişkisel tablolar yerine doküman, anahtar-değer çifti, geniş sütun ya da çizge gibi başka modellerde saklayan veritabanı ailesidir.
- ÖnbellekBackend ve API'ler, s. 34Önbellek, sık kullanılan verilerin kopyalarını tutan hızlı ve geçici bir depolama katmanıdır; sonraki istekler yavaş işi tekrarlamadan hızla karşılanır.
- PartitioningVeritabanları, s. 25Partitioning (bölümleme), büyük bir tabloyu tarih aralığı gibi bir kurala göre partition'lara böler; sorgular ilgisiz veriyi atlar, eski veri kolayca silinir.
- Consistent HashingYazılım Mimarisi, s. 6Consistent hashing (tutarlı hashleme), anahtarları sunuculara, sunucu eklenip çıkarıldığında yalnızca küçük bir kısmı yer değiştirecek şekilde dağıtır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin