Имеет ли кеширование объекта с помощью Fetch в JPA какое-либо преимущество в производительности в долгосрочной перспективе? - PullRequest
0 голосов
/ 22 февраля 2011

Имеет ли использование выборки с запросами jpa какое-либо повышение производительности в долгосрочной перспективе?

Допустим, я хочу прочитать 100 объектов из БД, каждый из этих объектов имеет отношение один ко многим, содержащее двадополнительные объекты.Эти дополнительные объекты будут читаться довольно часто.Запрос на получение этих объектов может быть выполнен двумя способами:

1) SELECT o FROM Object o 

2) SELECT o FROM Object o FETCH o.relationObjects

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

Возникает вопрос: допустим, программа работала уже один день, а менеджер сущностей кэшировал все объекты с их отношениями (всего 300).Я хочу снова перечислить объекты с их объектами отношений.Будет ли запрос 2 давать мне какое-либо преимущество в производительности?Это служит какой-либо цели после первого кэша?

РЕДАКТИРОВАТЬ: я использую EclipseLink

1 Ответ

1 голос
/ 22 февраля 2011

Говоря о кешировании в целом, а не о специфике JPA, я бы подумал, что сценарий, в котором мы выигрываем, это когда мы не получаем попадания в кеш.Я ожидаю, что обычно кэш-память намного меньше размера базы данных, и в таких случаях очень важно уменьшить количество запросов.

Стандарт JPA предусматривает один уровень кэша:Кэш Entity Manager, это кэш относительно короткой продолжительности, при обычном использовании он длится всю жизнь одной транзакции.Следовательно, сценарий, о котором вы спрашиваете, на самом деле не применим, мы не получаем постепенно заполняющегося кэша - он слишком короток для этого, и поэтому преимущества активной загрузки могут быть весьма значительными.

Обратите также внимание, что JPAВ этом случае разработчики имеют возможность добавить кэш второго уровня, который иногда называют L2 или «общим» кешем.Эта статья описывает это.Существуют правила истечения срока действия кэша, и разработчики могут также предлагать API-интерфейсы для управления обновлением этого кэша, например В этой статье описывается один такой API.

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