Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: partitioning, sharding

В чём различия партиционирования и шардирования баз данных и когда какое решение использовать?

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

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

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

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

Чтобы масштабировать большие объёмы данных и повышать производительность, используют два разных подхода: партиционирование и шардирование. Часто их путают, хотя это архитектурно разные концепции.


Партиционирование (Partitioning)

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

Типы партиционирования:

  1. По диапазону (range)
    Разделение по дате, числовому диапазону:

    • данные за 2023 → партиция 2023

    • данные за 2024 → партиция 2024

  2. По списку (list)
    Разделение по категории:

    • Россия → partition_ru

    • Европа → partition_eu

  3. По хэш-функции (hash)
    Равномерное распределение ключей по партициям.


Зачем нужно партиционирование?

1. Ускорение запросов

Запросы читают только нужные партиции (partition pruning).

2. Упрощение управления большими таблицами

  • легче удалять старые данные (detach partition → drop)

  • легче бэкапить частями

3. Повышение производительности индексов

Каждая партиция имеет свой индекс → индексы меньше → быстрее.


Пример партиционирования в PostgreSQL

sql

CREATE TABLE events (
    id INT,
    created_at DATE
) PARTITION BY RANGE (created_at);

CREATE TABLE events_2024 PARTITION OF events
FOR VALUES FROM ('2024-01-01') TO ('2025-01-01');

Шардирование (Sharding)

Определение:
Шардирование — это разбиение данных между разными физическими серверами, каждый из которых содержит только часть данных.

Что такое шард?

Шард = отдельная база данных + отдельный сервер или кластер.

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

  1. Hash-based sharding
    shard_id = hash(user_id) % N

  2. Range-based sharding
    Например:

    • user_id 1–1M → shard 1

    • user_id 1M–2M → shard 2

  3. Geo-sharding
    Данные разных регионов хранятся на разных физических кластерах.


Зачем нужно шардирование?

1. Горизонтальное масштабирование

При росте нагрузки можно добавлять новые сервера.

2. Увеличение суммарной вычислительной мощности

Каждый сервер обслуживает часть запросов.

3. Уменьшение размера одной БД

Меньше данных → быстрее индексы → быстрее запросы.


Когда использовать партиционирование

  • таблица превышает миллионы/миллиарды строк

  • операции удаления старых данных должны выполняться быстро

  • запросы читают данные только частично (например, по дате)


Когда использовать шардирование

  • одна база данных физически не справляется с нагрузкой

  • требуется горизонтальное масштабирование

  • высокая частота записи

  • нагрузка распределена по ключам (user_id, tenant_id)


Итог

Партиционирование улучшает производительность одной БД, разбивая таблицу на части.
Шардирование масштабирует систему, распределяя данные между несколькими БД на разных серверах.
Выбор зависит от того, что упирается в предел — одна таблица или весь сервер.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Postgres

    Postgres

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

#partitioning

#sharding

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

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.