Компонент доступа к БД/ Кэширование записей

Кэширование записей.

     Компонент ORM «Dolphin» дает возможность использовать кэширование записей при выполнении операций нахождения записей по значению ключа. Особенностью использования кэширования в ORM «Dolphin» является механизм верификации кэша. Этим исключается получение недостоверных данных. Одновременно, возможно получение данных из кэша без верификации. Следует учитывать, что кэш записей привязан к экземпляру объекта шлюза, поэтому для его эффективного использования лучше создавать единственный объект шлюза для данной сущности. Включение кэширования происходит установкой значения поля «UseCashForRecords» объекта шлюза в значение «true». Механизм кэширования работает следущим образом. Найденный объект добавляется в кэш объекта шлюза. При поиске объекта, сначала происходит определение версии объекта в базе данных, затем поиск в кэше объекта с данной версией. В случае нахождения берется объект из кэша, в противном случае извлекается объект из базы данных и обновляется кэш. Данный механизм существенно повышает скорость повторного нахождения записи. Извлечение данных из кэша без верификации производится при установки значения поля «CheckCachVersion» в «false». В этом случае, сначала происходит поиск объекта в кэше по зачению ключа. Если он находится, то извлекается из кэша и записывается в поле «Result». В противном случае объект ищется в базе данных. В базе данных MSSQL для использования механизма верификации кэша в таблице объекта должно быть поле с типом «timestamp», которое должно быть указано в определении класса сущности этого объекта через значение поля «VersionTableColumn». При отсутствии зачения у поля «VersionTableColumn» верификация кэша производится не будет. По этой причине, в базе данных ACCESS при использовании кэша не происходит его верификация.

     Рассмотрим использование кэширования на примере.

     Создаем экземпляр сущности.

Employee employee = new Employee();

     Создаем объект шлюза.

DataBaseGate dbg = new DataBaseGate(employee, cn);

     Включаем кэширование.

dbg.UseCashForRecords = true;

     Создаем ключ объекта сущности.

EmployeePK PK = new EmployeePK();
PK.EmployeeID = 9;

     Выполняем поиск.

bool res = dbg.FindByPrimaryKeys(PK);

     Запись выбирается из базы, и записывается в кэш. Получаем искомый объект.

employee = (Employee)dbg.Result;

     Выполним повторный поиск.

bool res = dbg.FindByPrimaryKeys(PK);

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

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

dbg.CheckCachVersion = false;
bool res = dbg.FindByPrimaryKeys(PK);