Middle+
Ce este sharding-ul orizontal?
sobes.tech AI
Răspuns de la AI
Sharding-ul orizontal este o tehnică de scalare a bazei de date care implică împărțirea datelor în părți, numite shards, și distribuirea acestor shards pe mai mulți serveri independenți. Fiecare shard conține o submulțime a tuturor rândurilor tabelului, păstrând toate coloanele.
Avantajele sharding-ului orizontal:
- Scalabilitate: Permite gestionarea unui volum în creștere de date și trafic prin adăugarea de noi servere pentru stocarea shardurilor.
- Performanță: Reduce volumul de date cu care lucrează fiecare server, accelerând executarea interogărilor.
- Disponibilitate: Dacă un shard devine inaccesibil, celelalte continuă să funcționeze.
- Reducerea încărcăturii: Distribuie sarcina de intrare/ieșire pe mai multe servere.
Dezavantajele sharding-ului orizontal:
- Complexitate: Implementarea și gestionarea sharding-ului necesită eforturi semnificative de inginerie.
- Tranzacții distribuite: Tranzacțiile care implică mai mulți shards sunt complexe de implementat și pot reduce performanța.
- Rebalansare: Redistribuirea datelor între shards în cazul schimbării încărcăturii sau adăugării de noi servere poate fi un proces complex și consumator de resurse.
- Interogări între shards: Interogările care necesită combinarea datelor din diferite shards (
JOIN) pot fi ineficiente.
Metode de sharding:
- Sharding pe interval: Datele sunt distribuite pe baza unui interval de valori în cheia de sharding.
- Sharding pe hash: Datele sunt distribuite pe baza valorii hash a cheii de sharding.
- Sharding director: O tabelă de mapare indică pe ce shard se află anumite date sau intervale de date.
Exemplu simplificat de concept de sharding:
Se are o tabelă de utilizatori cu un volum mare de date. În loc să stocheze toți utilizatorii pe un singur server, se pot împărți în shards după prima literă a numelui de familie:
- Shard 1: Utilizatori cu nume de familie de la A la E
- Shard 2: Utilizatori cu nume de familie de la J la L
- Shard 3: Utilizatori cu nume de familie de la M la S
- Shard 4: Utilizatori cu nume de familie de la T la Y
Fiecare shard este stocat pe un server separat.
<?php
// Funcție de exemplu care determină shard-ul pe baza numelui de familie
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; // Returnează 0 pentru cazuri nedefinite
}
// Utilizare
$lastName = "Иванов";
$shardId = determineShardByLastName($lastName);
// Într-un sistem real, trebuie să te conectezi la baza de date a shard-ului corespunzător
?>