Перейти к содержанию

Кэширование моделей

Примечание

Эта информация относится к моделям и не касается механизма кэширования запросов, который работает иначе. Данные в кэше запросов инвалидируются во время доступа к ним и хранятся в БД метаданных приложения. Данные в кэше моделей обновляются по расписанию или по решению пользователя и не хранятся в БД метаданных приложения.

Glarus BI может сохранять результаты ваших моделей в виде таблиц БД, чтобы модели (и запросы, основанные на этих моделях) загружались быстрее.

Вы можете использовать сохранённые результаты модели (в виде таблицы БД) для создания новых запросов, получая лучшую производительность и удобство за счёт хранения результатов в одной широкой таблице. Расширенный механизм кэширования позволяет копировать данные из различных СУБД в целевую ClickHouse, более приспособленную для больших данных.

Кэширование моделей включается и настраивается администратором системы. Пользователи без прав администратора не могут повлиять на расписание и другие настройки механизма, но могут запускать кэширование выбранной модели вручную и работать с результатом.

На практике:

  • пользователь создаёт запрос;
  • сохраняет запрос в доступную коллекцию;
  • преобразует запрос в модель;
  • возможно, дополнительно настраивает представление полей (метаданные модели);
  • срабатывает механизм кэширования: по расписанию или в результате ручного запуска;
  • в целевой БД (и соответственно, в интерфейсе Glarus BI, если БД подключена) появляется новая таблица с данными модели;
  • пользователь может использовать модель для новых запросов: технически в большинстве случаев запрос будет отправлен в таблицу, куда сохранена модель.

В системе есть два различных механизма кэширования моделей:

  1. Стандартный — сохраняет таблицу модели в тот же экземпляр сервера БД, где находятся данные, на основе которых она создана:

    • работает в рамках одной СУБД. Не позволяет копировать данные между СУБД;
    • доступен для PostgreSQL, GreenPlum, ClickHouse, MySQL и Redshift;
    • целевое хранилище не настраивается — всегда используется то же подключение;
    • таблица сохраняется в новую схему или БД (в зависимости от возможностей СУБД), но не выходит за пределы сервера БД;
    • БД или схема именуется как metabase_cache_хэш_число; Пример БД для сохранённой модели стандартным механизмом
    • таблицы используют фрагмент названия модели в системе (после транслитерации в латиницу); Пример таблицы кэша сохранённой модели стандартным механизмом
    • запрещается строить запросы к таблицам metabase_cache_* напрямую — вместо этого вы можете выбрать модель в запросе.
  2. Расширенный (рекомендуется) — сохранение в выбранную администратором БД под управлением ClickHouse:

    • источник данных — СУБД, поддерживающая драйвер JDBC (PostgreSQL, ClickHouse, MySQL, MariaDB, SQL Server, Oracle и т.д.);
    • целевое хранилище — только СУБД ClickHouse, одно целевое подключение используется для одного или нескольких источников;
    • сохраняет модели в виде таблиц рядом с другими данными витрины;
    • вы можете узнать такие таблицы по ID модели в круглых скобках в конце названия таблицы. В названии также содержится фрагмент названия модели (после транслитерации в латиницу). ID модели вы можете найти в URL страницы, просматривая модель;
    • допускается построение запросов напрямую к соответствующим таблицам моделей;
    • поддерживается репликация в ClickHouse;
    • не поддерживается СУБД MS SQL. Пример сохранённой модели расширенным механизмом

Подсказка

Мы рекомендуем использовать расширенный механизм кэширования моделей, когда это возможно. Он даёт больше преимуществ.

Оба механизма могут запускаться и работать параллельно (в нескольких подключениях к БД), но в настройках одного подключения к БД может быть выбран только один.

Независимо от выбранного механизма, вам или другому администратору системы потребуется включить кэширование для:

  1. Экземпляра системы.
  2. Определённых баз данных.

Включение кэширования моделей для всего экземпляра Glarus BI

Чтобы включить кэширование моделей в вашем экземпляре Glarus BI, перейдите в Управление > Производительность > Кэширование моделей.

Вы можете настроить периодичность обновления моделей: каждый час, 2 часа и т.д. или выбрать опцию Произвольный…, чтобы использовать синтаксис cron (англ.) для указания собственного расписания.

При настройке расписания учтите, что процесс кэширования (в зависимости от аппаратного обеспечения, СУБД, настроек и объёма) может занимать продолжительное время и потреблять ресурсы, поэтому вам следует опытным путём найти оптимальную частоту обновления без ущерба для актуальности данных. Для этого рекомендуем измерить по журналу продолжительность кэширования и сопоставить с вероятной частотой обновления данных в исходной БД.

Вы можете приблизить цикл кэширования для быстрого получения результата, затем снизить частоту запуска. Пример cron-выражения для кэширования моделей каждые 15 минут: 0/15 * * * ?.

Планировщик cron использует часовой пояс отчёта, если он выбран. В противном случае планировщик будет использовать системный часовой пояс сервера приложений.

Мы рекомендуем при выборе расписания кэширования учитывать, как часто обновляются ваши исходные таблицы.

Если пользователь изменяет определение запроса модели, то изменения попадают в кэш не сразу, так как кэширование работает по расписанию или запускается вручную. Поэтому в отрезок времени до следующего кэширования:

  • если в запросе указана модель — запросы будут адресованы к исходным таблицам, то есть выполняться медленнее, но изменения применятся сразу;
  • если в запросе указана таблица модели напрямую — данные в таблице не будут обновлены, скорость получения данных не снизится, изменения определения запроса модели не будут видны.

В следующем цикле кэширования таблица модели обновится, и различие исчезнет.

Подсказка

Если вы случайно забудете включить кэширование для экземпляра Glarus BI, система не позволит настроить кэширование моделей в настройках БД.

Включение кэширования моделей в настройках подключений к БД

После того как вы включили кэширование моделей для экземпляра Glarus BI, вам нужно настроить его для используемых вашими пользователями подключений — в разделе "Базы данных". Далее действия зависят от выбранного вами механизма кэширования моделей.

Включение расширенного кэширования моделей

Для включения вам нужно выяснить, какое подключение будет источником, а какое — целевым хранилищем. Настройку начинайте с целевого хранилища (куда сохранять модели):

  1. Перейдите в Управление > Базы данных > [целевая база данных].
  2. Нажмите Включить расширенное кэширование моделей в эту БД. Сохранять настройки подключения не нужно, изменения применятся сразу.

Включение целевого хранилища для расширенного кэширования моделей

Сохранять настройки подключения не нужно, изменения применятся сразу.

Теперь, когда системе известно, куда сохранять модели, выполните настройку для каждого источника данных, откуда модели должны сохраняться:

  1. Перейдите в Управление > Базы данных > [источник данных].
  2. Нажмите Включить расширенное кэширование из этой БД.

Включение источника данных для расширенного кэширования моделей

Если кнопка отсутствует — убедитесь, что стандартное кэширование моделей для этого подключения отключено. Когда стандартное кэширование активно, на форме появляется кнопка "Отключить стандартное кэширование моделей". Используйте её для отключения, затем обновите форму, чтобы получить нужную кнопку.

Включение стандартного кэширования моделей

Предупреждение

Включение стандартного кэширования без крайней необходимости не рекомендуется.

Для включения стандартного кэширования:

  1. Найдите подключение к БД, где хранятся модели пользователей: Управление > Базы данных > [ваша база данных].
  2. Нажмите "Включить стандартное кэширование моделей".

Включить стандартное кэширование моделей

Если учётные данные, которые вы предоставили Glarus BI для подключения к вашей базе данных, имеют соответствующие разрешения, Glarus BI попытается создать учётные данные подключения. Если они не имеют необходимых разрешений для создания схемы в вашей базе данных, вам нужно будет создать схему в базе данных самостоятельно:

  • получите название схемы: щёлкните на значок информации, изучите подсказку. Название содержится в подсказке;
  • вручную создайте схему в вашей базе данных. Например, если вы используете PostgreSQL в качестве хранилища данных, вы можете создать схему, запустив CREATE SCHEMA IF NOT EXISTS schema_name, где schema_name — это название схемы, которое Glarus BI показал вам в значке информации;
  • убедитесь, что учётные данные, которые Glarus BI использует для подключения к вашему хранилищу данных, могут управлять этой схемой и записывать в неё.

Если кнопка отсутствует:

  • убедитесь, что не забыли включить кэширование для экземпляра Glarus BI и настроить расписание;
  • посмотрите, не используется ли это же подключение как источник для расширенного механизма кэширования моделей. В этом случае на форме присутствует кнопка "Отключить расширенное кэширование моделей из этой БД". Одно и то же подключение не может одновременно сохранять модели двумя способами, вам придётся выбрать только один механизм.

Проверка результата

Настройка завершена. Теперь пользователи могут создать модель, вы — проследить за её сохранением по расписанию. Если модели были созданы до ваших настроек, просто дождитесь запуска и завершения первого цикла механизма кэширования.

Подсказка

Временное изменение расписания на ближайшее время позволит вам приблизить начало цикла. Но не забудьте после этого вернуть настройки расписания. После первой попытки сохранения модели вам будет доступна кнопка ручного пересоздания модели в разделе "Инструменты".

Просмотрите журнал сохранения модели. Нажав на значок шестерёнка в правом верхнем углу, выберите Управление > Инструменты и найдите результат кэширования по названию модели.

Журнал обновления должен быть доступен в Решение проблем > Журналы. См. Инструменты администратора или в журналах сервера приложений (контейнера). Ищите по тексту «metabase.task.persist-refresh».

В разделе «Базы данных» вы можете найти БД и новую таблицу кэша модели.

В подробной информации о модели пользователь видит последний цикл кэширования и может запустить процесс кэширования вручную.

Запуск кэширования моделей вручную

Кэширование моделей может запустить как администратор, так и обычный пользователь, имеющий доступ к коллекции, где хранится модель, и данным, на основе которых она создана.

Для запуска кэширования выбранной модели администратору следует:

  1. Открыть Управление > Инструменты.
  2. Найти в списке искомую модель.
  3. Справа нажать кнопку обновления кэша модели.

Запуск кэширования моделей вручную администратором

Если подраздела Инструменты нет в интерфейсе, используйте комбинацию CTRL + Shift + R для обновления страницы с её перезагрузкой в кэше браузера. Если подраздела нет и после перезагрузки страницы, проверьте настройки модели, расписание и настройки подключения к БД: когда кэширование недонастроено, подраздел Инструменты скрыт. Нужно исправить настройки кэширования.

Также администратору доступен второй способ запуска кэширования — как пользователю, через список моделей.

Для запуска кэширования выбранной модели пользователю требуется:

  1. Открыть Обзор > Модели.
  2. Найти в списке искомую модель.
  3. Нажать кнопку i для открытия информационного блока модели.
  4. Справа в информационном блоке найти и нажать кнопку запуска кэширования.

Запуск кэширования модели вручную

Настройка приоритета кэширования моделей

Если у вас большое число моделей, и сложилась их иерархия (одна модель строится на другой модели или её таблице в БД), то порядок кэширования будет играть решающую роль. Как правило, кэш моделей обновляется в порядке их создания. Но если вы меняете определение запроса модели, выбирая другую модель в качестве основы для построения текущей, может сложиться ситуация, когда родительская модель будет обновляться позже дочерней, что может вызвать ошибки.

Для исправления ситуации вы можете воспользоваться возможностью изменения приоритета кэширования. По умолчанию он равен нулю. Чем выше значение — тем раньше модель будет кэшироваться при выполнении задания. То есть вы можете увеличить приоритет кэширования родительских моделей, чтобы избежать проблем с актуальностью данных в дочерних.

Для изменения приоритета кэширования моделей:

  1. Откройте Обзор > Модели.
  2. Найдите в списке искомую модель.
  3. Нажмите кнопку i для открытия информационного блока модели.
  4. Справа в информационном блоке найдите поле ввода приоритета (Обзор > Описание > Приоритет обновления), измените значение. — Произойдёт автоматическое сохранение.

Поле ввода приоритета кэширования

Далее администратор системы, используя журнал работы системы, может убедиться в том, что порядок кэширования моделей изменился фактически.

Отключение кэширования моделей

Отключение кэширования моделей производится в обратном включению порядке.

Если вы используете расширенное кэширование моделей:

  • отключите кэширование в источниках данных — в настройках подключений нажмите Отключить расширенное кэширование из этой БД;
  • отключите хранилище кэша в настройках целевой БД;

Если вы используете стандартный механизм кэширования — нажмите Отключить стандартное кэширование моделей.

Затем отключите кэширование для экземпляра в Управление > Производительность > Кэширование моделей.

Если вам нужно отключить кэширование моделей только для одного источника данных, просто нажмите кнопку отключения в настройках соответствующего подключения к БД.

Для общесистемной приостановки кэширования вы можете использовать Управление > Производительность > Кэширование моделей > Отключить, не меняя настройки подключений.

Особенности кэширования данных из Greenplum в ClickHouse

Предупреждение

Осторожнее с кэшированием из Greenplum!

СУБД Greenplum не гарантирует порядок следования записей при многократном выполнении запроса без явной сортировки. Во первых, это особенность данной СУБД, она хранит данные на множестве сегментов, каждый из которых обрабатывает свою часть запроса. Во-вторых, механизм кэширования Glarus BI с целью оптимизации разбивает массив данных на страницы и запрашивает каждую страницу отдельно. Поэтому при записи модели в таблицу ClickHouse могут наблюдаться дублирования строк, проблемы сортировки, отсутствие записей, расхождения итогов.

Чтобы обойти эту особенность и избежать проблем, всегда явно указывайте сортировку в запросе (ORDER BY) по уникальному ключу. В более сложных запросах с подзапросами на большом объёме данных используйте ORDER BY по уникальному ключу на каждом уровне иерархии запроса.