Hibernate Кэширование вызывает снижение производительности при низком проценте @Cacheable Entities? - PullRequest
2 голосов
/ 03 апреля 2012

У меня есть приложение Java, которое использует библиотеку персистентности Hibernate, с примерно 100 сопоставленными классами.Чтобы попробовать кэширование второго уровня, я добавил @Cacheable к 5 из сопоставленных классов.Это привело к тому, что стандартная вычислительная задача заняла вдвое больше времени, чем раньше, хотя было несколько обращений к кэшированным элементам (как видно на консоли мониторинга кэша Couchbase).Я не могу получить точный средний коэффициент попадания из-за временного характера статистики Couchbase, но я оцениваю его примерно в 10-20%.

Влияет ли включение кэширования для некоторых объектов на время доступа для других объектовне помечены как @Cacheable, что вызывает снижение производительности?Или это вызвано просто дополнительной задержкой кеширования в сочетании с низким коэффициентом попадания в кешированные элементы?

Я использую Hibernate 3.3.Я отключил кеширование запросов.Я получил схожие результаты с Memcached & GemFire ​​в качестве провайдеров кеша.

1 Ответ

1 голос
/ 10 апреля 2012

Ну, я думаю, это зависит от того, что провайдер кеша делает, чтобы увидеть, кэширована ли запись Если это дорогостоящая операция, получение данных из базы данных будет дорогостоящим, если коэффициент попадания в кэш низкий. В общем, поставщики кэша должны стремиться сделать это как можно дешевле. Например, в случае Infinispan это простая проверка в памяти, чтобы увидеть, кэшируется ли сущность или нет, и если нет, то запись извлекается из базы данных через Hibernate, и провайдер кэша Infinispan помещает ее в кеш, используя очень эффективная операция пут, называемая putForExternalRead .

Вы действительно должны попробовать провайдер кэша Infinispan. Больше информации в https://docs.jboss.org/author/x/FgY5. Если вы работаете в JBoss AS7, прочитайте вместо этого https://docs.jboss.org/author/x/LoJ7.

Отказ от ответственности: я разработчик Infinispan.

...