Кнопка очистки данных: почему её так сложно сделать

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

Сократить разрыв можно, если поднять копию прода. Идея понятная. Но встаёт вопрос: что делать с данными?

Реальные данные в тестовом контуре, это разговор с ИБ, который ты проиграешь. Значит, вариантов два: обфускация или зачистка.

Обфускация. История понятная, но если в системе сотни таблиц с миллионами записей, то это не слишком экономно. Ни по времени, ни по ресурсам.

Зачистка. Тоже понятно. Но, как показывает опыт, гладко проходит не со всеми системами. И вот почему.

Прямое удаление из БД работает не всегда. Помимо физического удаления записи, могут требоваться дополнительные «приседания», порой в самых неочевидных местах.

Не все данные нужно удалять. Данные делятся на рабочие, справочные и технические. Справочные из охвата чаще всего исключаются, например, потому что элементы справочника могут быть задействованы в бизнес-логике как значения по умолчанию. Удалишь – сломаешь логику.

Порядок удаления важен. Технические данные могут ссылаться на рабочие. Удаляешь рабочие, ловишь ошибки целостности. Значит, нужен порядок, и он не всегда очевиден.

Возможность отключать бизнес-логику должна быть by-design. Представь: удаляешь данные одного типа, а они не удаляются, потому что срабатывает валидация на данных, напрямую с текущими не связанных. И ты сидишь и думаешь, при чём тут вообще они.

Неоднозначные ошибки не помогают найти корень. Удаляешь объект, а в ответ: «Не удалось удалить объект». Занавес. Что не так, неясно. И начинается археология.

Вывод

«Кнопка очистки данных» звучит как одна фича. На деле это целый пласт работы: правила обхода таблиц, зависимости, отключаемая бизнес-логика, внятные ошибки и договорённости с ИБ. И делать это нужно до того, как копия прода понадобится, а не в момент, когда она уже горит.

Можно относиться к очистке данных как к DELETE FROM без WHERE. А можно, как к задаче, где важен порядок удаления, зависимости и то, что будет, если ошибиться. Первый взгляд дешевле ровно до момента, когда что-то ломается.

Убежден, что список сложностей не полон. Кто уже проходил это, расскажите, как решали: обфускацией, зачисткой или гибридом? Где споткнулись?

#разработка #данные #ит #продуктовый_подход #самозванец

Кнопка очистки данных: почему её так сложно сделать | Сетка — социальная сеть от hh.ru