А нас идея - есть основная таблица, куда поступают данные, есть MaterializedView с SummingMergeTree движком. Перед основным запросом, делаем запрос на MaterializedView, чтобы убедиться, что есть новые данные (запоминаем у себя значение суммы счетчиков). И если есть новые данные, то выполняем уже основной запрос, если нет, отдаем юзеру данные из кеша. Минус в том, что приходится делать вместо одного - два запроса. Но если на основной запрос сервер отвечает за десятки миллисекунд, а на запрос к MaterializedView за единицы миллисекунд, то вроде как такой подход нормальный. Что думаете?
У нас ETL пишет сразу в несколько потоков, есть отдельная быстрая таблица Summing которая менятеся, есть большая таблица Summing и просто mergeTree. Т/е мы дублируем часть данных раскладываем их на несколько таблиц - поток / сжатые / очень сжатые. Также ETL отдельно фиксирует - что он отправил пачку данных
Обсуждают сегодня