Как кэширование запросов улучшает производительность в nHibernate? - PullRequest
1 голос
/ 02 марта 2010

Как работает кэширование запросов и как оно повышает производительность в nHibernate?

Ответы [ 3 ]

5 голосов
/ 02 марта 2010

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

Очень важно, что он не кэширует сами сущности - только их идентификаторы. Это означает, что вы почти наверняка захотите убедиться, что эти объекты также будут кэшироваться в вашем кэше второго уровня. В противном случае NHiberate получит идентификаторы сущностей из кэша запросов, но затем будет вынужден перейти в базу данных, чтобы получить действительные сущности. Это может быть дороже, чем просто идти в базу данных!

Также важно: запросы кэшируются на основе их точных значений SQL и параметров. Любые различия в любом из них будут означать, что база данных будет поражена. Таким образом, вы, вероятно, хотите кэшировать только те запросы, которые имеют небольшие отклонения во входных данных.

2 голосов
/ 02 марта 2010

Когда вы включаете кэширование, nHibernate будет хранить результаты запроса где-то внутри, когда вы выполняете запрос. Когда вы снова попытаетесь выполнить запрос с теми же параметрами, он получит результаты из кэша, а не из базы данных, и, конечно, это будет намного быстрее! но будьте осторожны, что другие приложения могут изменять базу данных в фоновом режиме! Но nHibernate может обновлять кэши.

0 голосов
/ 02 марта 2010

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

...