Middle+
Horizontal sharding nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Yatay bölümlendirme, verilənlərin miqyasını artırmaq üçün istifadə olunan texnikadır və məlumatların shardlar adlanan hissələrə bölünməsi və bu shardların müstəqil serverlərə paylanması ilə həyata keçirilir. Hər bir shard, cədvəlin bütün sətirlərinin alt toplusunu ehtiva edir, lakin bütün sütunları saxlayır.
Yatay bölümləndirmənin üstünlükləri:
- Miqyaslandırma: Yeni serverlər əlavə etməklə məlumatların və trafikin artan həcmini idarə etməyə imkan verir.
- Performans: Hər bir serverin işlədiyi məlumatların miqdarını azaldır, bu da sorğuların icrasını sürətləndirir.
- Əlçatanlıq: Bir shard əlçatmaz olsa, digər shardlar işləməyə davam edir.
- Yükün azaldılması: Giriş/çıxış yükünü bir neçə server arasında paylayır.
Yatay bölümləndirmənin çatışmazlıqları:
- Mürəkkəblik: Sharding-in tətbiqi və idarə olunması mühəndislik səyləri tələb edir.
- Paylanmış əməliyyatlar: Bir neçə shard-ı əhatə edən əməliyyatlar mürəkkəbdir və performansı azalda bilər.
- Yenidən balanslaşdırma: Yük dəyişiklikləri və ya yeni serverlərin əlavə olunması zamanı məlumatların yenidən paylanması mürəkkəb və resurs tələb edən proses ola bilər.
- Shardlararası sorğular: Müxtəlif shard-lardan məlumatların birləşdirilməsini tələb edən sorğular (
JOIN) effektiv olmaya bilər.
Sharding metodları:
- Aralıq sharding: Məlumatlar, sharding açarındakı dəyər aralığına əsasən paylanır.
- Hash sharding: Məlumatlar, sharding açarının hash dəyərinə əsasən paylanır.
- Qovluq sharding: Xəritə cədvəli, müəyyən məlumatların və ya məlumat aralıqlarının hansı shardda olduğunu göstərir.
Sadə sharding konseptinin nümunəsi:
Böyük məlumat həcminə malik istifadəçi cədvəli mövcuddur. Bütün istifadəçiləri tək bir serverdə saxlamaq yerinə, onları soyadının ilk hərfinə görə shardlara bölmək olar:
- Shard 1: A-dan E-yə qədər soyadlı istifadəçilər
- Shard 2: J-dən L-yə qədər soyadlı istifadəçilər
- Shard 3: M-dən S-yə qədər soyadlı istifadəçilər
- Shard 4: T-dən Y-yə qədər soyadlı istifadəçilər
Hər bir shard ayrı bir serverdə saxlanılır.
<?php
// Soyadına əsasən shard-u müəyyən edən nümunə funksiyası
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; // Qeyri-müəyyən hallar üçün 0 qaytarır
}
// İstifadə
$lastName = "Иванов";
$shardId = determineShardByLastName($lastName);
// Əsl sistemdə, uyğun shard-ın verilənlər bazasına qoşulmaq lazımdır
?>