Срок действия кеша NHibernate - PullRequest
7 голосов
/ 13 июня 2009

В настоящее время я использую специально разработанную ORM и планирую перейти на nhibernate.

В настоящее время я использую как L1 - кэширование на уровне сеанса, так и L2 - кэширование на уровне приложения.

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

Могу ли я сделать это с NHibernate. Короче говоря, кеширование мне не мешает, так как оно всегда получает самые последние данные и спасает меня от создания объектов и времени загрузки.

Ответы [ 2 ]

14 голосов
/ 15 июня 2009

ИМХО бессмысленно иметь кэш L2, если ему все равно нужно попасть в БД. В этом и заключается весь смысл кеширования, избегайте как можно большего попадания в БД.

AFAIK. Не реализована стратегия кэширования, подобная той, которую вы описываете, но кэш-память NHibernate L2 полностью подключаема, поэтому вы можете ее реализовать. Однако я бы не стал, по причинам, которые я упомянул выше.

Получение устаревших данных является проблемой только в том случае, если другие приложения или другие DAL-файлы попадают в одну и ту же БД, кроме NHibernate. В этом случае вы можете использовать реализацию SysCache2 , которая внутренне использует SqlCacheDependencies для аннулирования областей кэша при изменении данных в базовой таблице.

Если в ферме запущено одно приложение, используйте поставщика Velocity .

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

Смотри также:

0 голосов
/ 02 августа 2012

Встроенный кэш Level1 в NHibernate не очень сложен, поскольку он сам по себе и внутрипроцессный. Поэтому для повышения производительности приложения NHibernate вам обязательно нужно иметь кэш второго уровня. Это сокращает время поездок в базу данных. Доступно множество сторонних интеграций, которые подключаются к кешу вторичного уровня NHibernate. NCache - один из прекрасных примеров, когда не требуется изменение кода. Узнайте больше здесь,

http://www.alachisoft.com/ncache/nhibernate-l2cache-index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...