Veri Bölümleme ve Çoğaltma
Veri bölümleme, bir veritabanını ölçeklenebilirlik amacıyla birden çok düğüme ayırırken, çoğaltma ise verilerin kopyalarını kullanılabilirlik ve okuma performansı için çeşitli düğümlerde tutmaktadır; bu iki yöntem birlikte dağıtılmış bir veritabanının nasıl ölçeklendiğini ve hatalara karşı nasıl dayanıklı olduğunu belirlemektedir.
Tanım
Bölümleme (parçalama veya sharding), bir ilişkinin satırlarını veya sütunlarını birden çok düğüme bölerek her birinin verinin bir kısmını tutmasını sağlamaktadır; çoğaltma ise aynı verinin kopyalarını birden çok düğümde depolamaktadır; yerleştirme ve çoğaltma politikaları birlikte ölçeklenebilirliği, kullanılabilirliği ve yük dengelemesini yönetmektedir.
Kapsam
Bu konu, verilerin düğümler arasında nasıl yerleştirildiğini ele almaktadır: aralık, karma veya liste bazında yatay bölümleme (sharding) ve sütun bazında dikey bölümleme; tutarlı karma (consistent hashing) dahil olmak üzere bölümleme stratejileri; ve senkronize ile asenkron, birincil-yedek (primary-backup) ile çoklu-birincil (multi-primary) çoğaltma modelleri — ve bunların ima ettiği tutarlılık-kullanılabilirlik ödünleşimleri. Bölümlemenin paralelliği nasıl sağladığını ve çoğaltmanın hata toleransını nasıl mümkün kıldığını incelemektedir. Çoğaltmaları uyum içinde tutan commit ve konsensüs protokolleri, bitişik bir konu olduğundan bu kapsamın dışında tutulmuştur.
Temel sorular
- Aralık, karma ve liste bölümleme, satırları düğümler arasında nasıl dağıtmaktadır?
- Dikey bölümleme, yatay bölümlemeye ne zaman tercih edilmektedir?
- Tutarlı karma, düğümler eklendiğinde veya çıkarıldığında veri hareketini nasıl sınırlamaktadır?
- Senkronize ve asenkron çoğaltma arasındaki ödünleşimler nelerdir?
- Birincil-yedek ve çoklu-birincil çoğaltma, tutarlılık ve kullanılabilirlik açısından nasıl farklılık göstermektedir?
Anahtar kavramlar
- yatay bölümleme (sharding)
- dikey bölümleme
- aralık, karma ve liste bölümleme
- tutarlı karma (consistent hashing)
- senkronize ve asenkron çoğaltma
- birincil-yedek çoğaltma
- çoklu-birincil çoğaltma
- bölümleme anahtarı ve yük dengeleme
Temel kuramlar
- Yatay ve dikey bölümleme
- Yatay bölümleme (sharding), bir tablonun satırlarını bir bölümleme anahtarı aracılığıyla düğümler arasında dağıtarak yükü yaymakta ve paralel işlemeyi mümkün kılmaktadır; dikey bölümleme ise bir tabloyu sütunlara göre ayırmaktadır; bölümleme fonksiyonu, yük dengelemesini ve sorgu yerelliğini kritik düzeyde etkilemektedir.
- Tutarlı karma (consistent hashing)
- Tutarlı karma, anahtarları ve düğümleri bir halka üzerine eşleyerek bir düğüm eklendiğinde veya çıkarıldığında anahtarların yalnızca küçük, sınırlı bir kısmının hareket etmesini sağlamaktadır; bu da onu esnek dağıtılmış veri depolarında bölümleme için temel bir teknik haline getirmektedir.
- Çoğaltma modelleri ve ödünleşimleri
- Senkronize çoğaltma, gecikme ve bölümler altında kullanılabilirlik maliyetiyle kopyaları özdeş tutarken, asenkron çoğaltma daha hızlıdır ancak eski veriler sunabilmektedir; birincil-yedek (primary-backup) yazmaları merkezileştirirken, çoklu-birincil (multi-primary) çatışma çözümü maliyetiyle her yerde yazmaya izin vermektedir.
Klinik önem
Bölümleme ve çoğaltma, veri sistemlerinin ölçeklenmesini ve kullanılabilir kalmasını sağlayan temel mekanizmalardır: sharding, tek bir mantıksal veritabanının hiçbir makinenin tek başına kaldıramayacağı iş yüklerini sunmasına olanak tanırken, çoğaltma ise hizmetlerin arızalar ve bölgeler arasında çalışır ve hızlı kalmasını sağlamaktadır, bu da bu teknikleri her büyük ölçekli veri platformu için merkezi hale getirmektedir.
Tarihçe
Parçalama ve çoğaltma, 1970'lerin sonları ve 1980'lerin başlarındaki dağıtılmış veritabanı sistemlerinde incelenmiştir. Karger ve meslektaşları tarafından 1997'de web önbellekleme için tanıtılan tutarlı karma (consistent hashing), daha sonra ölçeklenebilir anahtar-değer depoları tarafından bir bölümleme şeması olarak benimsenmiş ve büyük internet hizmetleri, esneklik ve kullanılabilirlik için agresif sharding ve çoğaltmayı yaygınlaştırmıştır.
Öne çıkan isimler
- M. Tamer Özsu
- Patrick Valduriez
- David Karger
İlgili konular
Temel eserler
- ozsu2011
- karger1997
Sıkça sorulan sorular
- Bölümleme ve çoğaltma arasındaki fark nedir?
- Bölümleme, veriyi her düğümün farklı bir alt kümesini tutacak şekilde bölerek depolama ve yükü ölçeklenebilirlik için dağıtmaktadır. Çoğaltma ise aynı verinin kopyalarını birden çok düğümde kullanılabilirlik ve daha hızlı okumalar için tutmaktadır. Çoğu büyük sistem her ikisini de yapmaktadır: veri düğümler arasında sharding ile bölünmekte ve her bir shard birkaç kez çoğaltılmaktadır.
- Neden düz karma bölümleme yerine tutarlı karma (consistent hashing) kullanılmaktadır?
- Sıradan modülo tabanlı karma bölümlemede, düğüm sayısını değiştirmek neredeyse her anahtarı yeniden eşlemekte ve büyük bir veri hareketini zorunlu kılmaktadır. Tutarlı karma, anahtarları ve düğümleri bir halka üzerinde düzenleyerek bir düğüm eklendiğinde veya çıkarıldığında yalnızca o düğüme yakın anahtarların yeniden atanmasını sağlamakta, böylece küme büyüdükçe veya küçüldükçe yeniden dengeleme maliyetini düşük tutmaktadır.