Кеширование данных
Описание настройки
С версии 3.10 ВП "Дашборды" реализован новый механизм кеширования данных на уровне объектов. Этот механизм позволяет ускорить загрузку дашбордов, снизить нагрузку на сервер, при этом корректно учитывать примененные фильтры.
- Столбчатая диаграмма
- Столбчатая диаграмма с накоплением
- Гистограмма
- Гистограмма с накоплением
- Круговая диаграмма
- Кольцевая диаграмма
- Линейная диаграмма
- Комбинированная диаграмма (Комбо)
- Таблица (только первая страница)
- Сводка
- Спидометр
- Сводная таблица (без пагинации)
- Метрика
- Диаграмма сгорания
Механизм кеширования виджетов
Кеширование данных реализовано на основе алгоритма LRU (Least Recently Used) — "наименее недавно использованный". При переполнении кеша система удаляет записи, которые дольше всего не использовались, освобождая место для новых.
Основные принципы работы:
- Хранение результатов — при построении виджета с конкретным набором параметров (включая фильтры) результат сохраняется для повторного использования.
- Проверка наличия данных — при запросе система ищет кешированное значение и возвращает его без повторного построения.
- Ограничение объема кеша — максимальное число записей задается в настройках параметром "Количество объектов в кеше" (maxCacheItems).
- Удаление устаревших записей — при переполнении применяется принцип LRU: сохраняются самые новые записи, старые удаляются.
- Ограничение по времени построения (timeLimitForCa) — задает максимальное время, за которое должен быть построен виджет, чтобы его результат был сохранен в кэше. Чем ниже пороговое значение, тем больше виджетов потенциально попадает в кеш, что способствует ускорению загрузки дашбордов. Ресурсоемкие виджеты, время построения которых превышает лимит, исключаются из кеширования, чтобы не перегружать систему.
Особенности работы:
- Кеш не редактируется вручную.
- Число объектов кеша может временно превышать "Количество объектов в кеше" (maxCacheItems) и составлять не более maxCacheItems + количество одновременно строившихся виджетов.
-
Поиск кешированного значения выполняется на основе значений атрибутов:
- "Код виджета" (widgetKey).
- "Язык" (sLocale). Если текущий пользователь не суперпользователь.
- "Смещение между серверным и пользовательским ЧП" (iOffset). Если текущий пользователь не суперпользователь.
- "Фильтры" (filtersIds)
- "subjectUUID" (subjectUUID). При наличии относительного критерия в любом фильтре (дашборда, виджета, пользовательского).
- "Название" (title).
- "Название" (title) состоит из значений "Код виджета" (widgetKey), "UUID субъекта" (subjectUUID), "Язык" (sLocale), "Смещение между серверным и пользовательским ЧП" (iOffset), объединенных через символ "_".
Если результат построения виджета должен попасть в кеш, то перед записью нового результата выполняется проверка и очистка по принципу LRU:
- Если механизм уже выполняется другим потоком, то выполнение механизма LRU будет пропущено
- Будет выполнен поиск объектов "Кеш" (cache) с сортировкой по дате создания (от нового к старому)
- В кеше остаются только самые новые записи в количестве указанном в "Количество объектов в кеше" (maxCacheItems), остальные удаляются.
Настройки механизма кеширования в интерфейсе администратора
-
Создайте класс с кодом DBDashboards для хранения параметров отображения и кеширования данных для виджетов.
Добавьте в него следующие атрибуты:
Атрибут Код Тип Описание Значение tValue Текст Значение, представляющее данные виджета Смещение между серверным и пользовательским часовым поясом iOffset Целое число Разница во времени между сервером и клиентом, используется для корректного отображения даты/времени Код виджета widgetKey Текст Уникальный ключ, идентифицирующий виджет Язык sLocale Строка Языковой контекст, в котором отображается виджет Количество объектов в кеше maxCacheItems Целое число Ограничение на количество кешируемых значений. По умолчанию – 100 Время построения виджета для попадания в кеш (сек.) timeLimitForCa Целое число Максимальное время (в секундах) на построение данных, при превышении кеш не используется.
Рекомендуемое (базовое) значение - 10с на виджет.
По умолчанию – 0
Кеш включен cacheEnabled Логический Признак включения механизма кеширования Дата последнего чтения dateRead Дата/время Время последнего чтения или обновления кеша UUID субъекта subjectUUID Строка Идентификатор текущего субъекта Время жизни кеша cacheLifeTime Временной интервал Максимальное время хранения данных в кеше Фильтры filtersIds Текст Представление фильтров, примененных к виджету. По умолчанию – 24 часа -
В классе создайте типы объектов:
- cache — представляет собой структуру хранения закешированных данных;
- settings — представляет собой настройки дашбордов.
- cache — представляет собой структуру хранения закешированных данных;
-
Перейдите в раздел "Настройка системы" → "Консоль" и создайте объект:
Copyutils.create('DBDashboards$settings', [title: 'Настройки дашбордов']).UUID -
Перейдите в раздел "Настройка системы" → "Администрирование" → вкладка "Управление логом событий" и создайте правило: не хранить логи по кешам дашбордов (для объектов данного типа логи не создаются).
Подробнее о настройке правил описано в статье Настройка правила хранения лога событий.
Включение механизма кеширования в интерфейсе оператора
- В интерфейсе оператора перейдите на вкладку с параметрами дашбордов.
- Нажмите Редактировать, на форме редактирования установите флажок "Включить кеш" и нажмите кнопку Сохранить.
После включения механизма кеширования:
- данные виджетов сохраняются и повторно используются при обращении;
- дашборды загружаются быстрее;
- нагрузка на сервер снижается.
В интерфейсе оператора на панели виджета дашборда доступна кнопка Обновить данные. Она позволяет принудительно очистить кеш и загрузить актуальные значения.
Очистка кеша дашбордов
Очистка кеша дашбордов необходима для:
- Обновления данных, чтобы дашборды отображали актуальные значения из базы.
- Обновления конфигурации, чтобы изменения в настройках или структуре дашборда вступали в силу сразу, без ожидания окончания времени жизни кеша (cacheLifeTime).
- Устранения ошибок, если дашборд отображает данные из кеша или отображает некорректные данные.
- Поддержания стабильной работы интерфейса, исключения конфликтов и удаления устаревших данных.
Чтобы очистить кеш дашбордов:
- В интерфейсе администратора перейдите в раздел "Настройка системы" → "Консоль".
-
Выполните следующий скрипт:
Copyapi.db.query("""
DELETE
FROM DBDashboards__Evt
""").executeUpdate()
api.db.query("""
DELETE
FROM DBDashboards\$cache
""").executeUpdate()