Sobes.tech
Middle+

Mi az a horizontális sharding?

sobes.tech MI

Válasz az MI-től

Vízszintes sharding egy adatbázis-skálázási technika, amely az adatok részekre osztásával és ezeknek a részeknek több független szerverre történő elosztásával valósul meg. Minden shard a táblázat összes sorának egy részét tartalmazza, de minden oszlopot megtart.

A vízszintes sharding előnyei:

  • Skálázhatóság: Lehetővé teszi a növekvő adatmennyiség és forgalom kezelését új szerverek hozzáadásával a shardok tárolására.
  • Teljesítmény: Csökkenti az egy szerveren dolgozó adatok mennyiségét, ezáltal gyorsítva a lekérdezések végrehajtását.
  • Elérhetőség: Ha egy shard nem elérhető, a többi shard továbbra is működik.
  • Terheléselosztás: Az I/O terhelést több szerver között osztja szét.

A vízszintes sharding gyengeségei:

  • Bonyolultság: A sharding bevezetése és kezelése jelentős mérnöki erőfeszítést igényel.
  • Elosztott tranzakciók: Több shard-ot érintő tranzakciók nehezek a megvalósításban, és csökkenthetik a teljesítményt.
  • Újraelosztás: Az adatok újraelosztása a shardok között a terhelés változásakor vagy új szerverek hozzáadásakor bonyolult és erőforrás-igényes lehet.
  • Kérdések shardok között: Az olyan kérdések, amelyek több shard adatait igénylik (pl. JOIN műveletek), nem hatékonyak lehetnek.

A sharding módszerei:

  • Tartomány szerinti sharding: Az adatok a shard kulcs értéktartományai alapján kerülnek elosztásra.
  • Hash-alapú sharding: Az adatok a shard kulcs hash értéke alapján kerülnek elosztásra.
  • Direktórium szerinti sharding: Egy hozzárendelő táblázat jelzi, hogy mely adatok vagy adat tartományok mely shardon találhatók.

Egyszerűsített shardolási példa (konceptuálisan):

Van egy felhasználói táblázat nagy adatmennyiséggel. Ahelyett, hogy minden felhasználót egy szerveren tárolnánk, a vezetéknevek első betűje szerint oszthatjuk őket shardokra:

    1. shard: Felhasználók A-tól E-ig
    1. shard: Felhasználók J-tól L-ig
    1. shard: Felhasználók M-től S-ig
    1. shard: Felhasználók T-től Y-ig

Minden shard külön szerveren található.

<?php

// Egy példa függvény, amely a vezetéknevet alapul véve határozza meg a shardot
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; // Nem meghatározott esetekben 0-t ad vissza
}

// Használat
$lastName = "Иванов";
$shardId = determineShardByLastName($lastName);
// A való életben csatlakozni kell a megfelelő shard adatbázisához

?>