Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: sharding, database partitioning, horizontal scaling, shard key, range sharding, hash sharding

По каким принципам можно делить данные между шардами? Приведи примеры стратегий шардирования.

Вопрос проверяет понимание стратегий шардирования баз данных для горизонтального масштабирования.

Короткий ответ

Шардирование делит данные между несколькими серверами (шардами) по ключу шардирования. Основные стратегии: диапазонное (range) — данные распределяются по диапазонам значений ключа, например, по ID пользователя; хеш-шардирование — ключ хешируется, и данные попадают в шард по остатку от деления; также есть географическое шардирование по региону. Выбор стратегии зависит от паттернов доступа и равномерности нагрузки.

Длинный ответ

Принципы шардирования

Шардирование — это техника горизонтального масштабирования баз данных, при которой большая таблица разбивается на более мелкие части (шарды), каждая из которых хранится на отдельном сервере. Основная цель — распределить нагрузку и объем данных, чтобы система могла обрабатывать больше запросов и хранить больше информации, чем один сервер.

Стратегии шардирования

Выбор стратегии зависит от того, как приложение обращается к данным. Основные подходы:

  • Диапазонное шардирование (Range Sharding): Данные распределяются по шардам на основе диапазона значений ключа шардирования. Например, пользователи с ID от 1 до 10000 попадают на шард 1, от 10001 до 20000 — на шард 2 и так далее. Этот подход прост в реализации и поддерживает эффективные запросы по диапазону, но может привести к неравномерной нагрузке, если данные распределены неравномерно (например, новые пользователи активнее старых).
  • Хеш-шардирование (Hash Sharding): Ключ шардирования хешируется, и по остатку от деления на количество шардов определяется целевой шард. Например, shard_id = hash(user_id) % N. Это обеспечивает равномерное распределение данных, но делает запросы по диапазону неэффективными, так как данные разбросаны по всем шардам.
  • Географическое шардирование (Geographic Sharding): Данные распределяются по шардам на основе географического расположения пользователей. Например, все пользователи из Европы хранятся на сервере в Европе, из Азии — на сервере в Азии. Это снижает задержки для пользователей, но усложняет глобальные запросы и балансировку.

Пример кода: выбор шарда по хешу

function getShardId(userId, totalShards) {
  const hash = hashCode(userId.toString());
  return Math.abs(hash) % totalShards;
}

// Пример использования
const userId = 12345;
const shardCount = 4;
const shardId = getShardId(userId, shardCount);
console.log(`User ${userId} goes to shard ${shardId}`);

В этом примере функция getShardId вычисляет хеш от строкового представления ID пользователя и возвращает номер шарда. Это простой способ равномерно распределить пользователей по шардам.

Вывод

Шардирование применяется в высоконагруженных системах, когда одна база данных не справляется с объемом данных или запросов. Выбор стратегии зависит от паттернов доступа: диапазонное шардирование подходит для запросов по диапазону, хеш-шардирование — для равномерного распределения, а географическое — для снижения задержек. Важно также продумать механизм решардинга на случай изменения нагрузки.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Postgres

    Postgres

  • SQL

Ключевые слова

#sharding

#database partitioning

#horizontal scaling

#shard key

#range sharding

#hash sharding

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию