Sobes.tech
Middle+

Kas yra horizontali shard'inimas?

sobes.tech AI

Atsakymas iš AI

Horizontalus shard'inimas yra duomenų bazės mastelio keitimo technika, kurią sudaro duomenų padalijimas į dalis, vadinamas shardais, ir šių shardų paskirstymas keliuose nepriklausomuose serveriuose. Kiekvienas shardas apima visų eilučių dalį lentelėje, bet išlaiko visas stulpelius.

Horizontaliojo shard'inimo privalumai:

  • Mastelio keitimas: leidžia apdoroti augantį duomenų kiekį ir srautą, pridedant naujus serverius shardų saugojimui.
  • Našumas: sumažina kiekvieno serverio apdorojamų duomenų kiekį, tai pagreitina užklausų vykdymą.
  • Prieinamumas: jei vienas shardas tampa neprieinamas, kiti shardai toliau veikia.
  • Naštos paskirstymas: paskirsto įvesties/išvesties apkrovą keliuose serveriuose.

Horizontaliojo shard'inimo trūkumai:

  • Sudėtingumas: shard'inimo diegimas ir valdymas reikalauja daug inžinerinių pastangų.
  • Išsklaidytos transakcijos: kelių shardų apimantys transakcijos yra sudėtingi įgyvendinti ir gali sumažinti našumą.
  • Balansavimas: duomenų perkėlimas tarp shardų keičiant apkrovą arba pridedant naujus serverius gali būti sudėtingas ir išteklių reikalaujantis procesas.
  • Užklausos tarp shardų: užklausos, reikalaujančios duomenų sujungimo iš skirtingų shardų (pvz., JOIN užklausos), gali būti neefektyvios.

Shard'inimo metodai:

  • Intervalo pagrindu shard'inimas: duomenys paskirstomi pagal reikšmių intervalą shard'o rakte.
  • Hash pagrindu shard'inimas: duomenys paskirstomi pagal hash reikšmę shard'o rakto.
  • Direktorijos shard'inimas: žemėlapio lentelė nurodo, kuriame shard'e yra tam tikri duomenys arba duomenų intervalai.

Pavyzdinis shard'inimo pavyzdys (supaprastintas):

Yra naudotojų lentelė su dideliu duomenų kiekiu. Vietoj to, kad saugotume visus naudotojus viename serveryje, galime juos padalinti į shard'us pagal pavardės pirmąją raidę:

  • Shard 1: naudotojai su pavardėmis nuo A iki E
  • Shard 2: naudotojai su pavardėmis nuo Ж iki Л
  • Shard 3: naudotojai su pavardėmis nuo М iki С
  • Shard 4: naudotojai su pavardėmis nuo Т iki Я

Kiekvienas shardas saugomas atskirame serveryje.

<?php

// Pavyzdinė funkcija, nustatanti shard pagal pavardę
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; // Grąžina 0 neapibrėžtiems atvejams
}

// Naudojimas
$lastName = "Иванов";
$shardId = determineShardByLastName($lastName);
// Realiame sistemoje reikės prisijungti prie atitinkamos shard duomenų bazės

?>