DataLens кеширует результаты запросов к источникам данных, чтобы ускорить отображение чартов и дашбордов. По умолчанию кеш обновляется только после истечения TTL (времени жизни кеша в секундах). Если данные обновляются регулярно, но нечасто, и нужно видеть свежие данные, то проблема в том, что обновление зависит от TTL.
Инвалидация кешей помогает решить эту проблему. Система периодически отправляет «инвалидационный запрос» к источнику данных и проверяет, изменились ли данные. Если результат запроса изменился, кеш обновляется сразу, не дожидаясь истечения TTL.
Инвалидационный запрос должен быть построен так, чтобы выполняться достаточно быстро для текущей базы данных.
Система выполняет инвалидационный запрос с заданной периодичностью (троттлинг), а основной запрос — только когда данные действительно изменились или истекло время жизни кеша:
Пользователь настраивает инвалидационный запрос в датасете (SQL или формулу с фильтрами). Такой запрос один на весь датасет. Его можно настроить только для датасета, который был сохранен хотя бы раз.
При каждом запросе данных система сначала проверяет инвалидационный кеш.
Если кеш инвалидации устарел (истек интервал троттлинга) — выполняется инвалидационный запрос к БД.
Результат запроса — короткая строка, например "2024-01-15T10:30:00".
Этот результат добавляется к ключу основного кеша данных.
Когда результат меняется или истекает время жизни кеша, меняется ключ кеша, и данные загружаются заново.
Троттлинг — величина, которая обеспечивает выполнение инвалидационного запроса не чаще чем раз в N секунд. Например, при значении 60 — не чаще раза в минуту, даже если за это время приходит 1 000 запросов данных. Пока интервал не истек, повторные запросы используют закешированный результат инвалидационного запроса.
Режим По формуле — пользователь задает формулу DataLens (аналогично вычисляемому полю) и опциональные фильтры. Формула компилируется и выполняется через стандартный пайплайн запросов DataLens.
В настройках подключения, на основе которого построен датасет, в разделе Настройки кеширования включите опцию Разрешить проверку кеша в датасетах и задайте период обновления кеша — не чаще, чем раз вNс. Возможные значения: от 30 до 86 400 секунд.
Примечание
Для режима инвалидации SQL включите опцию Уровень доступа SQL-запросов.
Откройте датасет, для которого необходимо настроить проверку кеша.
Перейдите на вкладку Проверка кэша.
Выберите режим инвалидации и настройте параметры проверки:
Нет
По формуле
SQL
Инвалидация не выполняется. Кеш обновляется только по истечении TTL. Это поведение по умолчанию.
Напротив поля Формула нажмите Добавить и задайте формулу DataLens, учитывая требования:
Тестирование инвалидационного запроса происходит без влияния на основной кеш и без учета троттлинга. Оно предназначено для отладки — позволяет убедиться, что инвалидационный запрос работает корректно и возвращает ожидаемый результат.
Доступно только для пользователей с правом редактирования на воркбук (для защиты от утечки данных через RLS).
Чтобы выполнить тест инвалидации:
Откройте датасет, для которого необходимо выполнить тест.
Перейдите на вкладку Проверка кэша.
Нажмите кнопку Проверить результат и убедитесь, что результат проверки соответствует требованиям.
При просмотре последнего результата проверки не выполняется запросов к БД. Можно увидеть, что вернул последний инвалидационный запрос и когда он был выполнен.
Доступно только для пользователей с правом редактирования на воркбук.
Результатом может быть полученная строка или ошибка исполнения. Ошибка также может сигнализировать об отсутствии результата, если интервал троттлинга истек и запрос еще не выполнялся.
Чтобы посмотреть последний результат проверки:
Откройте датасет, для которого необходимо выполнить тест.
Перейдите на вкладку Проверка кэша. Напротив поля Последний результат отображается дата и время проведения последней проверки. Если последняя проверка завершилась с ошибкой, напротив поля Последний результат отображается Завершился с ошибкой.
Нажмите кнопку Открыть, чтобы посмотреть результат проверки или кнопку Показать ошибку, чтобы посмотреть возникшую при проверке ошибку.
Система инвалидации спроектирована по принципу graceful degradation — ошибки инвалидации никогда не блокируют основной запрос данных.
Если инвалидация настроена неправильно, чарты и дашборды продолжат работать — кеш будет обновляться по TTL, как если бы инвалидация была отключена. Об ошибке будет сигнализировать уведомление на чартах и датасете, а посмотреть саму ошибку можно в поле Последний результат в датасете.