Отключить обратную передачу базы данных после пропуска кэша запросов ehcache?

Я использую hibernate + ehcache с правильно настроенными атрибутами кэширования. При запуске приложения мы заполняем кеш и запускаем все возможные запросы через ORM к БД. Это работает очень хорошо, если появляется "правильная комбинация параметров" - в противном случае это приводит к пропаданию кэша и, таким образом, к обращению к БД. Данные являются чисто статическими.

70% всех случаев - это пропуски, поэтому мы могли бы получить большую выгоду, если бы ошибки в кеше можно было обрабатывать по-разному на уровне запроса / объекта.

Есть ли способ остановить переход hibernate + ehcache в БД, если после прогрева происходит сбой кэша? Может быть, есть хук API в спящем режиме?

В идеальном случае доступ к БД вообще не выполняется после разогрева кеша.

ТИА

Фрэнк

1 ответ

Принимая во внимание вашу конфигурацию, у вас есть несколько вариантов:

  • завершить на уровне Ehcache
  • завершить на уровне Hibernate
  • завершить на уровне JDBC

Отказ от ответственности: ни один из упомянутых ниже не является полным решением - на самом деле, они не могут быть реализованы. Но я бы начал копать оттуда.

Я не думаю, что многое можно сделать на уровне Ehcache, потому что, если элемент отсутствует, уровень кеша просто возвращается null и Hibernate забирает управление и отправляется на выборку из базы данных. Вы можете вернуть какое-то заранее определенное значение (которое, как вы знаете, недопустимо и означает отсутствие), но это немного запах кода.

На уровне гибернации вы можете определить перехватчик, который будет реагировать на LoadEvent, Не уверен, что это можно применить к запросам.

Подобно Hibernate, вы могли бы сделать с перехватчиком JDBC. Это может быть не идеально, так как у вас все еще будут накладные расходы Hibernate, но это все же намного лучше, чем ожидание обхода базы данных (~50 мс, я полагаю на запрос?).

Другие вопросы по тегам