Ehcache, Hibernate, обновляет кеш очень большой таблицы при добавлении новой записи? - PullRequest
0 голосов
/ 03 марта 2011

Я новичок в Ehcache и ищу, как это сделать, но теперь совершенно уверен, что это нормальный вариант использования. Я работаю над приложением, которое не является традиционным веб-приложением, оно используется только несколькими людьми одновременно и предназначено для извлечения данных из очень большого набора данных, а не для вызова БД каждый раз, когда я хочу использовать кеширование для кеширования этой большой таблицы. Однако есть вероятность, что в эту таблицу можно добавить новую запись, и мне нужно, чтобы это было отражено в кеше, но я не хочу перезагружать весь кэш каждый раз, так как он довольно большой. Любые советы о том, как подойти к этому / дальнейшим ресурсам, приветствуются.

1 Ответ

1 голос
/ 03 марта 2011

Вы должны узнать о Hibernate кеш запросов .Проще говоря: он работает поверх кэша второго уровня (L2) и хранит результаты запросов. Но хранит только идентификаторы записей, которые должны быть возвращены запросом, а не весь список.Это означает, что вам нужно, чтобы L2 работал и был точно настроен.

В вашем сценарии предположим, что у вас есть 1M записей в таблице T и запрос, который возвращает 1K в среднем.При первом запуске этого запроса он пропустит кэш запроса и:

  1. запустит SQL
  2. извлечет записи из 1 КБ
  3. поместит их все в L2
  4. поместите 1K идентификаторы в кэш запросов

При следующем выполнении запроса он попадет в кэш запросов и выполнит поиск всех результатов из L2.Интересная часть возникает, когда вы модифицируете таблицу T.Hibernate выяснит, что результаты в кеше запросов могут быть устаревшими, и это сделает недействительным весь кеш, но не L2.Он будет в основном повторять пункты 1-4, но обновлять только кеш запросов (большинство объектов из таблицы T уже находятся в L2).

В некоторых сценариях он работает отлично, в других он вызывает проблемы N + 1 внепредсказуемые моменты.Это всего лишь верхушка айсберга, вы должны быть очень осторожны, так как этот механизм очень хрупок и требует глубокого понимания.

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