Sobes.tech
Middle+

Yatay sharding nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Yatay bölümlendirme, veritabanlarının ölçeklenebilirlik tekniğidir ve verilerin, shard adı verilen parçalara bölünerek bağımsız sunuculara dağıtılmasıyla gerçekleştirilir. Her shard, tablonun tüm satırlarının bir alt kümesini içerir, ancak tüm sütunları korur.

Yatay bölümlendirmenin avantajları:

  • Ölçeklenebilirlik: Yeni sunucular ekleyerek shard'ları depolamak ve artan veri ve trafik hacmini yönetmek mümkündür.
  • Performans: Her sunucunun çalıştığı veri miktarını azaltır, böylece sorgu performansını artırır.
  • Erişilebilirlik: Bir shard erişilemez hale gelirse, diğer shard'lar çalışmaya devam eder.
  • Yük dağılımı: Giriş/çıkış yükünü birkaç sunucuya dağıtır.

Yatay bölümlendirmenin dezavantajları:

  • Karmaşıklık: Uygulama ve yönetim önemli mühendislik çabası gerektirir.
  • Dağıtık işlemler: Birden fazla shard'ı kapsayan işlemler karmaşıktır ve performansı düşürebilir.
  • Dengeleme: Yük değişikliği veya yeni sunucu ekleme durumunda verilerin yeniden dağıtılması karmaşık ve kaynak tüketici olabilir.
  • Shard'lar arası sorgular: Farklı shard'lardan veri birleştirmeyi gerektiren sorgular (JOIN sorguları) verimsiz olabilir.

Shardleme yöntemleri:

  • Aralık bazlı shardleme: Veriler, shard anahtarındaki değer aralığına göre dağıtılır.
  • Hash bazlı shardleme: Veriler, shard anahtarının hash değerine göre dağıtılır.
  • Dizin bazlı shardleme: Bir eşleme tablosu, belirli verilerin veya veri aralıklarının hangi shard'da olduğunu gösterir.

Yapısal bir örnek:

Büyük veri hacmine sahip bir kullanıcı tablosu düşünün. Tüm kullanıcıları tek bir sunucuda tutmak yerine, soyadının ilk harfine göre shard'lara ayırabilirsiniz:

  • Shard 1: Soyadı A'dan E'ye olan kullanıcılar
  • Shard 2: Soyadı J'den L'ye olan kullanıcılar
  • Shard 3: Soyadı M'den S'ye olan kullanıcılar
  • Shard 4: Soyadı T'den Y'ye olan kullanıcılar

Her shard, ayrı bir sunucuda saklanır.

<?php

// Soyadına göre shard belirleyen örnek fonksiyon
function determineShardByLastName(string $lastName): int
{
    $firstLetter = mb_strtoupper(mb_substr($lastName, 0, 1));

    if ($firstLetter >= 'А' && $firstLetter <= 'Е') {
        return 1;
    } elseif ($firstLetter >= 'Ж' && $firstLetter <= 'Л') {
        return 2;
    } elseif ($firstLetter >= 'М' && $firstLetter <= 'С') {
        return 3;
    } elseif ($firstLetter >= 'Т' && $firstLetter <= 'Я') {
        return 4;
    }

    return 0; // Belirsiz durumlar için 0 döndür
}

// Kullanım
$lastName = "Иванов";
$shardId = determineShardByLastName($lastName);
// Gerçek bir sistemde, ilgili shard veritabanına bağlanmak gerekir

?>