КЭШИРОВАНИЕ ДАННЫХ В АБС БИСКВИТ
В системе АБС Бисквит реализован механизм кэширования данных, таких как например, настроечных параметров. Кэш применяется для временного хранения данных с целью быстрого обращения к ним. Ряд функций и процедур в АБС Бисквит первым делом пытаются определить возвращаемые ими значения именно из кэша.
Вы наверняка сталкивались с таким негласным правилом - изменил что-то в метасхеме, перезайди в систему. Связано это как раз с использованием кэша. Так, функция получения значения настроечного параметра, первым делом ищет его значение в кэше и только если данного значения нет в нем, то определяет его из таблицы 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() - просмотра данных находящихся в кэше.