Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Що таке шардинг бази даних і чому його відкладають до останнього?

Шардинг - розподіл даних однієї логічної бази між кількома фізичними серверами за ключем шардингу. Кожен сервер (шард) зберігає частину рядків і обслуговує частину навантаження - зокрема записів, які реплікація не масштабує.

Стратегії вибору шарду:

  • за діапазоном (користувачі 1-1 млн на шарді A) - просто, але нерівномірно: нові активні користувачі всі на останньому шарді;
  • за хешем ключа - рівномірно, але діапазонні запити йдуть на всі шарди; додавання шарду переміщує багато даних (зменшує це консистентне хешування);
  • за довідником - таблиця відповідності «ключ → шард»: гнучко, але довідник стає ще одним критичним компонентом;
  • за орендарем (tenant) - кожен клієнт SaaS на своєму шарді: природна межа, дані клієнта разом.

Чому шардинг - останній засіб:

  • запити між шардами: JOIN, агрегати, сортування по всіх даних стають розподіленими - їх збирає застосунок;
  • транзакції між шардами - без звичних гарантій ACID; потрібні саги чи двофазний коміт;
  • унікальність і ідентифікатори - автоінкремент на кожному шарді дасть дублікати; потрібні UUID/Snowflake;
  • перебалансування - додати шард означає перенести частину даних під навантаженням;
  • гарячі шарди - великий клієнт чи популярний ключ перевантажує один сервер;
  • операційна складність - бекапи, міграції схеми, моніторинг на N серверах;
  • вибір ключа майже незворотний - помилка дорого коштує через роки.

Що спробувати раніше:

  1. індекси, оптимізація запитів, усунення N+1;
  2. вертикальне масштабування бази (сучасні сервери - сотні ядер і терабайти пам'яті);
  3. кеш і репліки для читання;
  4. секціонування (partitioning) великих таблиць усередині однієї бази;
  5. винесення окремих доменів у власні бази (функціональне розділення) - лог подій, аналітика, пошук;
  6. архівація старих даних.

Коли шардинг виправданий: записи чи обсяг даних справді перевищують можливості найпотужнішого сервера, або вимоги до ізоляції клієнтів (SaaS з великими орендарями). Альтернатива - розподілені бази з вбудованим шардингом (Vitess, Citus, CockroachDB), що беруть частину складності на себе.

Докладніше в документації: Azure Architecture: Sharding

Схожі питання