Кеширование содержимого записи и SID


НАЧАЛО >> Руководство пользователя >> Кеширование содержимого записи и SID📄 Скачать в DOCX


Раздел описывает служебный кеш, который ускоряет повторное чтение записей Record и заменяет старый путь прямого файлового кеширования через General->GetSidFile/SetSidFile.

1. Что кешируется

Для записи используются два типа ключей системного кеша Cache:

Ключ Назначение
Record_Content_<db>_<mfn> Содержимое записи из базы <db> с положительным MFN.
Record_Content_<db>_SID_<sid> Содержимое записи, у которой еще нет положительного MFN или оно недоступно.
Record_SidMap_<sid> Карта SID к базе, MFN и ключу содержимого записи.

Значение Record_Content_* хранит массив записи в том же виде, который возвращает Record->GetAsArray(). Карта Record_SidMap_* позволяет восстановить, в какой базе и под каким MFN находится запись с заданным SID, не выполняя полный обход записей.

2. Чтение записи

Database->RecRead($mfn, false) сначала проверяет Record_Content_<db>_<mfn>. Если запись найдена в кеше, объект Record восстанавливается из массива без обращения к провайдеру данных.

Если чтение выполняется с блокировкой (RecRead($mfn, true)), кеш не используется: запись должна быть получена из провайдера данных, чтобы блокировка и актуальное состояние были согласованы.

3. Поиск по SID

Record->GetBySid($sid, $dbname) сначала читает Record_SidMap_<sid>, затем получает связанный Record_Content_*. Если карта или содержимое отсутствуют, выполняется прежний путь восстановления:

4. Сохранение и сброс

Record->SidSave() сохраняет содержимое записи в Record_Content_* и обновляет Record_SidMap_* с временем жизни 3600 секунд.

При удалении записи Database->DeleteRec() очищает:

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

5. Уровни хранения

Ключи Record_* используют общий класс Cache. В зависимости от окружения он хранит данные:

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

6. Что осталось в SID-хранилище

SID-файлы не исчезли полностью. Они по-прежнему используются для внешних файлов, SQLite-таблиц записи, блокировок и других данных, которые физически должны храниться рядом с SID. Изменение касается горячего пути повторного чтения самой записи и карты SID к записи.