Sobes.tech
Middle+

Какво е хоризонтално шардване?

sobes.tech AI

Отговор от AI

Хоризонталното шардване е техника за мащабиране на база данни чрез разделяне на данните на части, наречени шарди, и разпределянето им между няколко независими сървъра. Всеки шард съдържа подмножество от всички редове на таблицата, като запазва всички колони.

Предимства на хоризонталното шардване:

  • Мащабируемост: Позволява обработка на нарастващ обем данни и трафик чрез добавяне на нови сървъри за съхранение на шардове.
  • Производителност: Намалява обема на данните, с които работи всеки сървър, ускорявайки изпълнението на заявки.
  • Достъпност: Ако един шард стане недостъпен, останалите шардове продължават да работят.
  • Намаляване на натоварването: Разпределя натоварването на входа/изхода между няколко сървъра.

Слабости на хоризонталното шардване:

  • Сложност: Внедряването и управлението на шардването изисква значителни инженерни усилия.
  • Разпределени транзакции: Транзакциите, обхващащи няколко шарда, са сложни за реализиране и могат да намалят производителността.
  • Ребалансиране: Преразпределянето на данни между шардовете при промяна на натоварването или добавяне на нови сървъри може да бъде сложно и ресурсоемко.
  • Заявки между шардовете: Заявки, изискващи обединяване на данни от различни шарда (например с JOIN), могат да бъдат неефективни.

Методи на шардване:

  • Шардване по диапазон: Данните се разпределят въз основа на диапазона от стойности в ключа за шардване.
  • Шардване по хеш: Данните се разпределят въз основа на хеш стойността на ключа за шардване.
  • Директория за шардване: Таблица за съпоставяне показва на кой шард се намират определени данни или диапазони от данни.

Пример за концепция за шардване (опростено):

Има таблица с потребители с голям обем данни. Вместо да съхраняваме всички потребители на един сървър, можем да ги разделим на шардове по първата буква на фамилията:

  • Шард 1: Потребители с фамилии от А до Е
  • Шард 2: Потребители с фамилии от Ж до Л
  • Шард 3: Потребители с фамилии от М до С
  • Шард 4: Потребители с фамилии от Т до Я

Всеки шард се съхранява на отделен сървър.

<?php

// Примерна функция, определяща шард въз основа на фамилията
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; // Връща 0 за неопределени случаи
}

// Използване
$lastName = "Иванов";
$shardId = determineShardByLastName($lastName);
// В реална система трябва да се свържете с съответната база данни на шарда

?>