Что такое партиционирование в базах данных и по каким признакам разбивают данные
Что проверяют
Понимаете ли вы, что партиционирование это способ уменьшить объём читаемых данных, а не универсальное ускорение. От аналитика ждут умения выбрать признак разбиения по реальным фильтрам отчётов и объяснить, почему неудачный ключ не даёт ничего или делает хуже.
Как отвечать
Партиционирование это разбиение одной логической таблицы на физические части по значению выражения от колонок. При запросе оптимизатор отбрасывает части, которые заведомо не подходят под условие (отсев партиций), и читает только нужные.
Признаки разбиения:
по диапазону: дата события, период отчётности; основной вариант для хранилищ, потому что почти любой аналитический запрос ограничен интервалом;
по списку: страна, регион, тип события, когда значений немного и они стабильны;
по хэшу: равномерная нарезка, когда естественного диапазона нет, а нужны параллельная обработка и ровные по размеру части;
составной вариант: сначала по месяцу, внутри по хэшу клиента.
Дальше назовите выгоды, ради которых это делают на самом деле: быстрое удаление истории (отсоединить партицию вместо удаления миллионов строк), обслуживание и сбор статистики по частям, параллельное чтение, хранение холодных периодов на медленном диске.
Хороший признак виден из запросов: колонка, которая почти всегда стоит в условии и после записи у строки не меняется.
Где спотыкаются
Называют партиционирование и шардирование синонимами. Партиции живут в одной базе и одном экземпляре, шарды разнесены по узлам; первое про объём и обслуживание, второе про масштабирование нагрузки.
Берут ключом то, чего нет в фильтрах. Если отчёты режут по дате, а разбили по идентификатору клиента, отсев не сработает: запрос прочитает все партиции плюс добавит накладные расходы на планирование.
Дробят слишком мелко. Партиции по дням за несколько лет дают тысячи объектов, планирование запроса и обслуживание дорожают, а выигрыш от отсева был исчерпан уже на уровне месяца.