Data engineering
Materialized views: тест с выбором ответа
Шесть вопросов через весь юнит. Каждый — это решение, которое вы принимаете, когда кто-то предлагает «давай просто заматериализуем» — не определение для пересказа, а компромисс, который нужно взвесить против реальной нагрузки.
Убедитесь, что вы связываете стоимость чтения, стратегию refresh, бюджет staleness, частоту записи и операционную ответственность — синтез, к которому вёл урок.
Обычное представление (view) никогда не устаревает, но команды всё равно берут materialized view. Что именно даёт materialized view и какой ценой?
Дашборд аналитиков постоянно читает materialized view. Ops по ночам запускает обычный REFRESH MATERIALIZED VIEW (без CONCURRENTLY) на агрегате длиной 90 секунд. Пользователи жалуются, что дашборд каждую ночь зависает. Почему и как это чинить?
Команда перешла на REFRESH MATERIALIZED VIEW CONCURRENTLY, чтобы убрать блокировку чтений. Теперь refresh иногда не завершается, и накапливается отставание. Какова наиболее вероятная причина?
Fact-таблица принимает ~5000 inserts/сек; аналитики весь день читают агрегатный MV и терпят ~5 минут staleness. Кто-то предлагает incremental maintenance через pg_ivm, чтобы view был всегда свежим. Почему это неверное решение?
Materialized view всё утро показывал вчерашние цифры. Ночной refresh-крон упал на lock timeout шесть дней назад, и ничего не алертило. В чём настоящий урок?
Incremental materialized view в ClickHouse (MV-on-insert) показывает неверные суммы: строк, существовавших до создания MV, нет, а некоторые группы разбиты по разным строкам. Что объясняет оба симптома?
Сквозная линия юнита — одна последовательность решений: убедиться, что чтение действительно дорогое и повторяемое, ограничить staleness, который терпит потребитель, затем подобрать refresh под частоту записи — плановый REFRESH CONCURRENTLY для staleness в минуты, incremental (pg_ivm) только для read-heavy таблиц с малой записью, streaming MV, чтобы вовсе убрать refresh-задачу. У каждой стратегии своя скрытая цена: CONCURRENTLY требует уникальный индекс и ждёт старые транзакции, incremental облагает каждую запись, MV в ClickHouse видят только вставляемый блок. А режим отказа везде один — неотслеживаемый refresh отдаёт устаревшие данные, пока система выглядит зелёной, поэтому владейте им и алертите на него.