Нужно ли хранить всю историю данных или удалять старые
Что проверяют
Видите ли вы за вопросом не техническую задачу, а политику хранения: у данных разного класса разная ценность, стоимость и юридический срок жизни. Смотрят, придёте ли вы к ответу «зависит» с внятными критериями, или скажете «храним всё, диски дешёвые».
Как отвечать
Ответ не про «да» и «нет», а про разделение по классам:
- сырые события: основа для пересчёта признаков и разбора инцидентов, их обычно держат, но в холодном слое: объектное хранилище, колоночный формат, партиции по дате;
- витрины и агрегаты: живут в тёплом контуре, пересобираются из сырых, срок жизни у них короче;
- персональные данные: срок ограничен законом и согласием пользователя, тут удаление или обезличивание обязательны, а не удобны.
Для машинного обучения у истории есть отдельная ценность: модель учится на прошлом, а признаки нужно уметь собрать на момент времени, иначе в обучение протечёт будущее. Поэтому события чаще сворачивают в агрегаты, чем удаляют совсем.
Техническая часть решается партиционированием по времени: старую партицию отцепляют или переносят в холодный слой, вместо того чтобы вычищать строки. К этому добавляется каталог с владельцем и сроком хранения для каждого набора, иначе политика существует только на словах.
Где спотыкаются
Говорят, что хранение дёшево. Дорого не хранение, а сканирование при каждом запросе, поддержка схем и ответственность: за персональные данные, пережившие свой срок, отвечает не диск.
Оставляют одни агрегаты, а сырые события выбрасывают. Новый признак посчитать не из чего, старый инцидент не разобрать, а пересобранные задним числом агрегаты тихо ломают обучающую выборку.
Чистят историю запросом DELETE по большой таблице. Место не возвращается само, таблица распухает, долгая транзакция мешает записи. Отцепление партиции делает то же самое за секунды.