Автор оригинала: Vlad Mihalcea.
Каждая новая глава моей книги выходит сразу после ее завершения, поэтому читателю не нужно ждать, пока вся часть будет закончена, чтобы получить доступ к новому материалу.
В этой главе объясняется, как выборка работает в режиме гибернации.
15. Fetching 15.1 DTO projection 15.1.1 DTO projection pagination 15.1.2 Native query DTO projection 15.2 Query fetch size 15.3 Fetching entities 15.3.1 Direct fetching 15.3.1.1 Fetching a Proxy reference 15.3.1.2 Natural identifier fetching 15.3.2 Query fetching 15.3.3 Fetching associations 15.3.3.1 FetchType.EAGER 15.3.3.2 FetchType.LAZY 15.3.3.2.1 The N+1 query problem 15.3.3.2.2 How to catch N+1 query problems during testing 15.3.3.2.3 LazyInitializationException 15.3.3.2.4 The Open Session in View Anti-Pattern 15.3.3.2.5 Temporary Session Lazy Loading Anti-Pattern 15.3.3.3 Associations and pagination 15.4 Query plan cache
Извлечение данных оказывает большое влияние на производительность уровня доступа к данным, а извлечение слишком большого объема данных является одной из наиболее распространенных проблем, связанных с производительностью. В этой главе я объясню, когда следует использовать выборку сущностей и когда переключаться на проекции.
Существует также очень интересный пример, демонстрирующий, почему иногда обработка данных в базе данных (рекурсивный CTE, оконные функции) может превосходить обработку данных на уровне приложений.
Тип выборки . НЕТЕРПЕЛИВЫЙ часто является хорошим намеком на то, что у приложения могут возникнуть проблемы с производительностью. Но Тип выборки. ЛЕНИВЫЙ
тоже не без проблем, потому что это может привести к N+1 проблемам с запросами The FetchType.EAGER is often a good hint that an application might experience performance issues. But FetchType.LAZY
К сожалению, существуют также некоторые широко распространенные анти-шаблоны, такие как Открытая сессия в поле зрения или Временная ленивая загрузка сеанса , которые устраняют симптомы и не устраняют основную причину исключения LazyInitializationException
.
Менее известной конфигурацией является кэш плана запросов, и вы также узнаете, как его можно настроить и для каких запросов имеет смысл сохранить этап предварительной компиляции.
Наслаждайтесь чтением Высокопроизводительной Сохраняемости Java !
P.S. Существует также группа Google , посвященная этой книге, поэтому, если вы хотите присоединиться и обсудить содержание книги, не стесняйтесь присоединиться.