Обновить витрину и прикрутить BI
Когда у проекта не однозначное будущее и важны релизы - управление качеством уходит на второй план.
Недавно мне пришлось пересобрать существующую витрину, так как при добавлении новых строк часть данных могла потеряться. Точно было непонятно что именно, но визуально уже видно - где-то пропуски, где-то нули там, где их быть не должно.
Объем был не маленький: 33 тысячи строк, больше 30 полей и пересчет за 7 месяцев. Зато у базвой архитектуры был плюс - источник хранился в сыром виде. Это были данные парсинга - объемные HTML строки более чем на 1GB суммарно.
Закладывать в stage слой все как есть меня научили на курсе по инженерии данных, и тут это очень пригодилось.
Сложности начались быстро.
На сервере кончилось место, потому что я изначально взял минимальную конфигурацию под пет-проект, а тут еще и временные файлы, и новая таблица. Запрос тоже оказался тяжелым, надо было разбирать словарь, в котором были HTML - строки, отбирать только нужное, сравнивать с сущесвтующими данными.
Короче пришлось наконец, по-настоящему воспользоваться EXPLAIN и вспомниить индексы, чтобы понять, что происходит до выполнения.
После нескольких неудачных попыток оптимизации я сменил подход. Вместо полного создания новой витрины рядом (чтобы отследить изменения и смерджить), стал сравнивать строки и обновлять только там, где были 0 или null.
Используя опыты прошлого я сначала сделал dry-run на один день. Результат меня устроил - и я запустил полную обработку. В итоге пересобрал витрину без ошибок, правда скрипт выполнялся около 12 часов, перебирая каждый HTML разбирая его на атрибуты и сверяя с таблицей.
Следующий этап BI, ведь надо же посмотреть что там собрали за все время.
С этим все было проще.
Выбор стоял между Metabase и Grafana. Когда места на сервере мало, Grafana - очень практичное решение.
Я хотел сделать real-time дашборд через mini-app в Telegram-боте, но для этого нужен был домен. Я уже делал так в другом проекте, но в этот раз подумал еще раз и понял, что статистика мне нужна только за неделю. Значит, достаточно отправлять скриншоты дашборда по расписанию.
Пришлось поднять еще один контейнер для рендера, уже тяжелее, но в целом удовлетворительно, и после пары технических маневров скрин наконец заработал. Я добавил бота в канал с обновлениями - и на этом закончил эту увлекательную историю.
Claude в этот раз, конечно же, был моим ассистентом, но не руководителем. Я еще раз убедился в том, что если не дать ему четкую архитектуру и понятную задачу, быстро и качественно одновременно не получится. Плюс ты всегда лучше знаешь что и как следует сделать, чтобы это шло в соответсвии с твоими планами на будущее.
Работа с данными — удивительная вещь.
Больше всего меня в ней драйвит возможность по цифрам в таблице делать объективные выводы и принимать решения.
Решение под NDA, поэтому ссылки на Git в этот раз не будет.