Партиционирование: зачем делить большую таблицу на части

Что такое партиционирование, как система пропускает ненужные части таблицы и почему разделение данных не гарантирует ускорение каждого отчёта.

Открытый оранжевый ящик с карточками среди закрытых секций шкафа

Большой архив не всегда нужно читать целиком

Представьте условный архив заказов за несколько лет. Большинство вопросов касается текущего месяца: сколько заказов приняли, сколько доставили и сколько вернули. Если сведения организованы по понятным временным частям, системе иногда достаточно прочитать нужный период вместо всей истории.

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

По какому правилу делят данные

Часто используют диапазоны дат: например, одна часть на месяц. Возможны и другие признаки, если они соответствуют устройству данных и поддерживаются выбранной системой. Признак разделения называют ключом партиционирования. Он определяет, в какую часть попадёт запись.

В документации PostgreSQL описаны разные способы разделения таблиц и их ограничения. Месячные части — только понятный пример. Если пользователь чаще выбирает сведения по другому признаку, разделение по времени может оказаться не самым полезным решением для его запросов.

Откуда берётся ускорение

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

В руководстве Google BigQuery по разделённым таблицам также объясняется уменьшение объёма чтения при подходящих условиях отбора. Но если отчёт использует всю историю, само разделение по месяцам не заставит его прочитать только один месяц. Эффект зависит от задачи и возможности системы применить отсечение.

Слишком много частей тоже создаёт нагрузку

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

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

Чем это отличается от индекса и распределения по серверам

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

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

Что проверить перед изменением

Соберите несколько типичных запросов пользователей: текущий день, месяц, вся история, отдельный клиент. Оцените, какие части потребуются каждому. Затем сравните время чтения и затраты обслуживания на представительном наборе. Проверка одного удобного отчёта не покажет, что произошло с остальными.

Продумайте появление новых периодов, поздно пришедшие записи и исправления старых данных. Если заказ за прошлый месяц поступил сегодня, он должен попасть в предусмотренное место, а не потеряться из-за границы периода. Нужны понятные правила и проверки полноты.

Результатом обсуждения должно стать объяснимое решение: какие части создаются, какие задачи от этого выигрывают и кто сопровождает структуру. Партиционирование полезно, когда оно соответствует жизненному циклу данных и чтению. Само по себе увеличение числа частей не делает систему ни быстрее, ни надёжнее.

Читайте также

Обучение в NovaData

Если тема связана с задачами вашей работы, изучите Архитектор данных в NovaData. Сопоставьте программу, требования к подготовке и формат с тем, что хотите научиться делать. Карточка ниже поможет познакомиться с профильным направлением.

Архитектор данных
Курс
Новинка
Архитектор данных

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

С нуля
Теория и практика
Диплом по окончании
12 990
₽/мес
Узнать подробнее

Источники

Читайте также

Обучить команду или нанять специалиста по данным: как выбрать
47

Обучить команду или нанять специалиста по данным: как выбрать

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

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

Когда системе добавляют мощность одного сервера, когда делят работу между несколькими и почему увеличение ресурсов само по себе не решает любую проблему.
Журнал изменений данных: как выяснить, кто и когда изменил набор
42

Журнал изменений данных: как выяснить, кто и когда изменил набор

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

Занятия проходят
в Нова Дата СДО

Вебинары, практика и общение с преподавателем — в одном окне браузера.

Посмотреть интерфейс платформы
Календарь обучения в Нова Дата СДО
Курсы студента в Нова Дата СДО
Редактор кода для практики в Нова Дата СДО
Вебинары и расписание Ваши курсы Код в браузере
Нова Дата СДО — в реестре российского ПОРеестровая запись № 34931
Заявка отправлена
Отправим вам подборку курсов в течение 5 минут. С вами также свяжется наш специалист и даст карьерную консультацию.
Персональный промокод
На курс «Инженер по парсингу данных»
Введите код при оплате, чтобы применить скидку к программе.