0Pricing
SQL Academy · Урок

Стратегии шардинга: диапазон, хеш и каталог

Сравните шардинг по диапазону, хешу и на основе каталога и выберите ключ шарда, который равномерно распределяет нагрузку и остаётся стабильным

«Стратегии шардинга: диапазон, хеш и каталог» — бесплатный урок SQL Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

Что такое шардирование

Разделение одной логической базы данных между несколькими физическими серверами («шардами»), каждый из которых хранит часть данных. Это делают, когда один сервер больше не справляется с рабочей нагрузкой.

Шардирование ≠ репликация

  • Репликация — одинаковые данные на нескольких серверах (для HA и масштабирования чтения)
  • Шардирование — разные данные на разных серверах (для масштабирования записи и увеличения емкости)

Часто применяют оба подхода: каждый шард реплицируется для HA.

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

  • Диапазонная — шардирование по диапазонам значений (идентификаторы 1–1M на шарде A, 1M–2M на шарде B)
  • Хеширование — хеширование ключа шарда и вычисление по модулю N
  • Каталог — отдельная таблица сопоставляет ключ и шард

Диапазонное шардирование

Простой подход, который хорошо работает для временных рядов и упорядоченных идентификаторов. Риск: перегруженные шарды, если весь трафик приходится на недавно добавленные данные.

-- Conceptually:
-- Shard A: user_id 1 - 1,000,000
-- Shard B: user_id 1,000,001 - 2,000,000
-- Shard C: user_id 2,000,001 - 3,000,000

Шардирование хешированием

По умолчанию обеспечивает равномерное распределение. Добавлять шарды сложно: перераспределение шардов перемещает все ключи:

-- shard_id = hash(user_id) % N
-- N=4: any user_id evenly distributed across 4 shards

Шардирование через каталог

Таблица поиска сопоставляет каждый ключ с его шардом:

CREATE TABLE shard_routing (
  user_id BIGINT PRIMARY KEY,
  shard_id INT NOT NULL
);

-- Looking up a user costs a directory query first; cache it.

Согласованное хеширование

Хеширование по модулю плохо переносит добавление шардов. Согласованное хеширование сводит к минимуму количество ключей, которые нужно переместить:

-- Each shard owns a ring segment.
-- Adding a new shard moves only ~1/N of the keys.

Выбор ключа шарда

Ключ шарда определяет все. Хорошие ключи шарда:

  • Распределяют данные равномерно
  • Присутствуют в большинстве запросов (избегают веерной отправки запросов на разные шарды)
  • Неизменяемы или изменяются редко
<p>Common picks: user_id, tenant_id, customer_id. Avoid: timestamps for write-heavy workloads (creates hot shards).</p>

По одному арендатору на шард

Мультитенантный SaaS: каждый арендатор находится на выделенном шарде. Структуру легко понимать, а шумных арендаторов — изолировать.

Схема, поддерживающая перераспределение шардов

Проектируйте систему с учетом будущего перераспределения шардов:

  • Используйте виртуальные шарды (например, 1024 логических, сопоставленных с физическими)
  • Упростите перенос логического шарда на другой физический сервер
  • Избегайте кода приложения, в котором жестко задано количество шардов

Запросы между шардами

Самая сложная проблема. JOIN и отчеты между шардами требуют веерной отправки запросов и логики агрегации в приложении. Это будет рассмотрено в следующем уроке.

Транзакции между шардами

Для атомарных транзакций между шардами нужны двухфазная фиксация (2PC) или саги. Типичный совет: проектируйте систему так, чтобы транзакции оставались в пределах одного шарда.

Итоги

Есть три стратегии; выбирайте подходящую по характеру трафика.

  • Диапазонная — простая, но есть риск перегрузки шарда
  • Хеширование — равномерное, но негибкое
  • Каталог — гибкий, но добавляет задержку
  • Согласованное хеширование обеспечивает плавное перераспределение шардов

Быстрая проверка

Вы разделили таблицу пользователей по хешу user_id. Затем количество шардов увеличилось с 4 до 5. Сколько ключей придется переместить?

Часто задаваемые вопросы

Урок «Стратегии шардинга: диапазон, хеш и каталог» бесплатный?

Да — полный текст урока «Стратегии шардинга: диапазон, хеш и каталог» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «Стратегии шардинга: диапазон, хеш и каталог»?

Сравните шардинг по диапазону, хешу и на основе каталога и выберите ключ шарда, который равномерно распределяет нагрузку и остаётся стабильным Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Стратегии шардинга: диапазон, хеш и каталог»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Стратегии шардинга: диапазон, хеш и каталог
  2. Запросы между шардами: сложная задача
  3. Citus и распределённый Postgres
  4. Когда НЕ стоит использовать шардинг
← Назад к SQL Academy