Отключить обратную передачу базы данных после пропуска кэша запросов ehcache?
Я использую hibernate + ehcache с правильно настроенными атрибутами кэширования. При запуске приложения мы заполняем кеш и запускаем все возможные запросы через ORM к БД. Это работает очень хорошо, если появляется "правильная комбинация параметров" - в противном случае это приводит к пропаданию кэша и, таким образом, к обращению к БД. Данные являются чисто статическими.
70% всех случаев - это пропуски, поэтому мы могли бы получить большую выгоду, если бы ошибки в кеше можно было обрабатывать по-разному на уровне запроса / объекта.
Есть ли способ остановить переход hibernate + ehcache в БД, если после прогрева происходит сбой кэша? Может быть, есть хук API в спящем режиме?
В идеальном случае доступ к БД вообще не выполняется после разогрева кеша.
ТИА
Фрэнк
1 ответ
Принимая во внимание вашу конфигурацию, у вас есть несколько вариантов:
- завершить на уровне Ehcache
- завершить на уровне Hibernate
- завершить на уровне JDBC
Отказ от ответственности: ни один из упомянутых ниже не является полным решением - на самом деле, они не могут быть реализованы. Но я бы начал копать оттуда.
Я не думаю, что многое можно сделать на уровне Ehcache, потому что, если элемент отсутствует, уровень кеша просто возвращается null
и Hibernate забирает управление и отправляется на выборку из базы данных. Вы можете вернуть какое-то заранее определенное значение (которое, как вы знаете, недопустимо и означает отсутствие), но это немного запах кода.
На уровне гибернации вы можете определить перехватчик, который будет реагировать на LoadEvent
, Не уверен, что это можно применить к запросам.
Подобно Hibernate, вы могли бы сделать с перехватчиком JDBC. Это может быть не идеально, так как у вас все еще будут накладные расходы Hibernate, но это все же намного лучше, чем ожидание обхода базы данных (~50 мс, я полагаю на запрос?).