Найти тему
Жаркое лето ZZ-го

Разработка в 1С. Ч.15. Кэш.

Кэш объектов в состоит из двух частей - "Обычный кэш" и "Транзакционный кэш".

Обычный кэш.

Уникальным идентификатором для кэша является ссылка на объект базы данных. Поэтому в кэше хранится или объект целиком со всеми своими данными, или представление объекта.

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

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

Обычный кэш удаляет у себя данные ещё в следующих случаях:

1. Поступают новые данные, а их негде хранить - закончилось свободное место. Тогда самые старые данные удаляются.

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

3. Прошло более 20 минут после того, как данные были помещены в кэш.

Транзакционный кэш.

Транзакция - это неделимая последовательность операций с данными, переводящая базу данных из одного целостного состояния в другое. То есть, если какая-либо операция не просто обращается к базе данных, а производит в ней изменения, то она упаковывается вместе со всеми сопутствующими операциями в транзакцию. И если хоть одну операцию из транзакции нельзя выполнить, то все операции из этой транзакции отменяются и база данных возвращается в состояние, в котором она была до начала транзакции (это называется откат транзакции - Rollback).

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

Транзакционный кэш удаляет у себя данные в следующих случаях:

1. Поступают новые данные, а их негде хранить - закончилось свободное место. Тогда самые старые данные удаляются.

2. Транзакция завершилась неуспешно.

3. Транзакция завершилась успешно. Тогда данные переносятся в обычный кэш.