Кэширование для часто меняющихся запросов - PullRequest
2 голосов
/ 09 ноября 2010

У нас есть веб-приложение, которое прослушивает вызовы веб-службы, создает запросы, извлекает данные из базы данных и отправляет результаты обратно клиенту.Поскольку у нас возникают некоторые проблемы с производительностью, мы хотим кэшировать данные на стороне сервера.Запросы сложны и включают несколько соединений.База данных обновляется через другое приложение, которое находится за пределами веб-приложения.Я не думаю, что мы можем использовать EHCache, поскольку база данных не обновляется через одно и то же приложение, а параметры запроса часто меняются.Какие стратегии кэширования мы можем адаптировать здесь для повышения производительности?Примечание. Запросы оптимизированы для повышения производительности.

1 Ответ

1 голос
/ 10 ноября 2010

Я не думаю, что мы можем использовать EHCache, поскольку база данных не обновляется через одно и то же приложение.

Если вы не пройдете через API Hibernate, Hibernate не сможет делает недействительными соответствующие области кэша второго уровня, когда это необходимо.Но вы можете сделать это самостоятельно (см. Различные evictXxx методы в SessionFactory).В зависимости от частоты обновлений, вы все равно можете получить преимущества.

Также обратите внимание, что EHCache - это всего лишь одна реализация второго уровня кеша среди других (независимо от того, используете ли вы EHCache или нет, она использует 2-й уровенькеш, который имеет отношение к вопросу).

(...) и параметры запроса часто меняются.

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

В этом случае, возможно, я бы попытался использовать Query#iterate() вместоQuery#list().В то время как последний возвращает результаты запроса как List, с первым:

Объекты, возвращаемые как результаты, инициализируются по требованию. Первый запрос SQL возвращает только идентификаторы .

Это может повысить производительность IF объекты, соответствующие идентификаторам, находятся в кэше 2-го уровня.Если это не так, он не будет работать лучше.

Какие стратегии кэширования мы можем адаптировать для повышения производительности?

У меня нет лучшего предложения, чем приведенное выше.Кэширование работает, когда попадание в кеш является вероятным событием.

Примечание. Запросы оптимизированы для повышения производительности.

Хмм ... что вы имеете в виду?:)

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