КЭШИРОВАНИЕ ДАННЫХ В АБС БИСКВИТ

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

Вы наверняка сталкивались с таким негласным правилом - изменил что-то в метасхеме, перезайди в систему. Связано это как раз с использованием кэша. Так, функция получения значения настроечного параметра, первым делом ищет его значение в кэше и только если данного значения нет в нем, то определяет его из таблицы setting. Если вы изменили значение параметра в системе, то в кэше осталось старое (если оно было туда помещено) и, следовательно, данная функция успешно найдя значение в кэше возвращает вам его, а не то что вы установили.

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

Идентификатор кэшируемых данных состоит из следующих 2-х компонентов:

  • Системный идентификатор - определяющий область кэшируемых данных, в качестве которого может выступать например идентификатор процедуры (функции) осуществляющей кэширование данных, или же имя класса метасхемы, или таблицы и т.п. Так для кэширования настроечного параметра, в качестве системного идентификатора применяется "setting";
  • Прикладной идентификатор - определяющий тип кэшируемых данных, например код поля таблицы, или код настроечного параметра и т.п.

В АБС Бисквит организовано два вида кэша: стандартный кэш и быстрый кэш. Данные этих кэшей хранятся в отдельных временных таблицах.

Для работы с кэшем в АБС Бисквит применяется библиотека интерфейсов pp-cache.p.


БЫСТРЫЙ КЭШ


Быстрый кэш применяется для кэширования небольших объектов, таких как например, настроечные параметры. Время жизни быстрого кэша определяется настроечным параметром System:CacheExpireMin (Время жизни кэша в минутах). Если данный настроечный параметр не определен, то время жизни быстрого кэша по умолчанию принимается равным 10 минутам. Максимально возможное время жизни быстрого кэша равно 1439 минутам, что соответствует количеству минут в сутках минус одна минута. Таким образом, быстрый кэш максимально может храниться только сутки. Значение 0 отключает кэширование данных.

Процедура SetFastCache(iMainID, iCacheID, iData) - сохранения данных в быстрый кэш.

  • iMainID - системный идентификатор, тип CHAR;
  • iCacheID - прикладной идентификатор, тип CHAR;
  • iData - кэшируемые данные, тип CHAR.                          

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


Процедура GetFastCache(iMainID, iCacheID, OUTPUT oData) - получения данных из быстрого кэша.

  • iMainID - системный идентификатор, тип CHAR;
  • iCacheID - прикладной идентификатор, тип CHAR;
  • oData - кэшируемые данные, тип CHAR.                          

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


Процедура DisplayFastCache() - просмотра данных быстрого кэша.


СТАНДАРТНЫЙ КЭШ


Стандартный кэш применяется для хранения больших объектов и в отличие от быстрого кэша он ограничивается устанавливаемым с помощью настроечного параметра System:CacheSize допустимого размера кэша, выраженного максимальным числом записей хранимых в таблице кэша. Если значение данного настроечного параметра не указано, то по умолчанию максимальный размер кэша составляет 1000 записей. Минимальный размер кэша составляет 10 записей независимо от того, что в настроечном параметре может быть указано меньшее значение, исключение составляет значение 0 записей, при котором кэширование данных полностью отключается.

Так же, в отличие от быстрого кэша, время жизни стандартного кэша задается в процедуре добавления данных в кэш SetCacheInfo, а не определяется настроечным параметром System:CacheExpireMin.

Процедура SetCacheInfo(iMainID, iCacheID, iData, iExpireDate, iExpireTime, iExpireTerm, iPriority, iReserved1, iReserved2) - сохранения данных в кэше.

  • iMainID - системный идентификатор, тип CHAR;
  • iCacheID - прикладной идентификатор, тип CHAR;
  • iData - кэшируемые данные, тип CHAR;
  • iExpireDate - дата, до которой хранятся данные, тип DATE;
  • iExpireTime - время, до которого хранятся данные, тип INT64;
  • iExpireTerm - время, в течение которого хранятся данные, тип INT64;
  • iPriority - приоритет данных, тип INT64;
  • iReserved1 - зарезервирован, тип CHAR;
  • iReserved2 - зарезервирован, тип CHAR.

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


Процедура GetCacheInfo(iMainID, iCacheID, iReserved1, OUTPUT oData, OUTPUT oOk, OUTPUT pReserved2) - получения данных из кэша.

  • iMainID - системный идентификатор, тип CHAR;
  • iCacheID - прикладной идентификатор, тип CHAR;
  • iReserved1 - зарезервирован, тип CHAR;
  • oData - кэшируемые данные, тип CHAR;
  • oOk - флаг, что искомые данные найдены в кэше, тип LOGICAL;
  • oReserved2 - зарезервирован, тип CHAR.

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


Процедура ResetCache(iMainID, iCacheID) - удаления записей из кэша. В зависимости от комбинации параметров удаляются либо все записи, либо выборочные.

  • iMainID - системный идентификатор, тип CHAR;
  • iCacheID - прикладной идентификатор, тип CHAR.

Процедура DisplayCache() - просмотра данных находящихся в кэше.

Вы здесь: Главная ИБС Бисквит БАЗОВЫЙ КЭШИРОВАНИЕ ДАННЫХ В АБС БИСКВИТ