[имя] спросил: кейс: в ClickHouse ежедневно грузится ~4 млн отзывов (ID отзыва, ID карточки, дата создания, дата изменения) и ~100-600 тыс. записей карточек (ID карточки, ID общей карточки, ID продавца), всего ~600 млн карточек, из них 70 млн с отзывами.

Разделите исходную историю, актуальные версии карточек и отзывов, затем отчётный слой. Не стройте каждый отчёт полным join всех 600 млн карточек.

Короткий ответ

Что ответить на собеседовании

Разделите исходную историю, актуальные версии карточек и отзывов, затем отчётный слой. Не стройте каждый отчёт полным join всех 600 млн карточек.

Подробный разбор

Ответ с пояснениями

Условие

[имя] спросил: кейс: в ClickHouse ежедневно грузится ~4 млн отзывов (ID отзыва, ID карточки, дата создания, дата изменения) и ~100-600 тыс. записей карточек (ID карточки, ID общей карточки, ID продавца), всего ~600 млн карточек, из них 70 млн с отзывами. Нужно организовать быструю загрузку данных и построение отчётности с join этих двух таблиц в разрезе общей карточки и продавца. Какую архитектуру, движки таблиц, первичные ключи и подход к join'у вы бы предложили?

Ответ

Разделите исходную историю, актуальные версии карточек и отзывов, затем отчётный слой. Не стройте каждый отчёт полным join всех 600 млн карточек.

Исходные изменения сохраняйте append-only с идентификатором и версией, загружая крупными пакетами. Для текущего состояния возможен ReplacingMergeTree(version): ORDER BY должен идентифицировать сущность стабильными полями; меняющиеся seller_id и common_card_id нельзя бездумно включать в ключ дедупликации. До merge актуальность обеспечивается явно.

Фильтруйте отзывы по отчётному диапазону, заранее сокращайте набор нужных card_id и выбирайте join по измерениям памяти и профилю запросов. Словарь допустим только для набора подходящего размера, не автоматически для всех 600 млн строк. Для частых отчётов полезна обогащённая витрина и пересчёт затронутых агрегатов. Изменение карточки не исправляет ранее записанные результаты обычной insert-trigger MV само по себе; заранее определите, нужны атрибуты на момент отзыва или текущие.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее