В чем разница между шардированием и партиционированием БД

«В чем разница между шардированием и партиционированием БД» — вопрос из категории Базы данных, который задают на 27% собеседований Системный Аналитик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Партиционирование (вертикальное или горизонтальное) разделяет данные внутри одной БД. Например:

  • Горизонтальное: таблица orders разбивается по диапазону дат (orders_2023, orders_2024).
  • Вертикальное: разделение столбцов таблицы (users_profile, users_auth).

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

CREATE TABLE orders (
    id SERIAL,
    user_id INT,
    order_date DATE
) PARTITION BY RANGE (order_date);

CREATE TABLE orders_2023 PARTITION OF orders
    FOR VALUES FROM ('2023-01-01') TO ('2024-01-01');

Ключевое отличие: шардирование распределяет данные физически между серверами, партиционирование — логически внутри одного сервера.