Несколько рекомендаций по оптимизации хранения исторических данных в базах данных:
Временное партиционирование. abykov.dev Основная таблица разбивается на диапазоны по дате создания. abykov.dev Каждая партиция покрывает небольшой интервал (обычно сутки при высоком трафике). abykov.dev Это позволяет планировщику быстро отсекать лишние партиции при запросах и не сканировать десятки миллионов строк. abykov.dev
Архивация партиций. abykov.dev Устаревшие партиции (например, старше 12 месяцев) не удаляются построчно, а целиком отсоединяются (DETACH) или удаляются (DROP). abykov.dev Такой подход позволяет мгновенно освободить сотни гигабайт данных без долгих транзакций и блокировок. abykov.dev
Разделение метаданных и полезной нагрузки. abykov.dev В базе данных целесообразно хранить только «шапку документа»: идентификаторы, даты, статусы и ключевые поля для поиска. abykov.dev Тяжёлый payload (большие XML/JSON, бинарные вложения, файлы) лучше вынести в объектное хранилище (S3, MinIO). abykov.dev В базе данных остаётся лишь ссылка и контрольная сумма. abykov.dev
Установка политики хранения данных. abykov.dev appmaster.io Это правила, сколько времени и в каком виде данные хранятся в основной базе данных. abykov.dev Например, хранить документы 90 дней в «горячих» партициях, до 12 месяцев в «тёплых» партициях, всё старше года переносить в архив или удалять. abykov.dev
Мониторинг и оптимизация процесса архивирования. appmaster.io Постоянно контролировать процесс архивирования данных, чтобы обеспечить его оптимальную работу, и активно устранять любые проблемы или неэффективности, которые могут возникнуть. appmaster.io
Примеры полезных ответов Поиска с Алисой на вопросы из разных сфер. Вопросы сгенерированы нейросетью YandexGPT для актуальных тем, которые определяются на базе обобщённых запросов к Поиску с Алисой.