powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / ORM (1+N)
19 сообщений из 19, страница 1 из 1
ORM (1+N)
    #39081789
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте форумчане.
объясните пожалуйста в двух словах о проблеме N+1 и как решается такая задача?
З.Ы. если я не ошибаюсь то решаются такие проблемы с использованием JOIN FETCH и т.д. но не совсем понимаю...
...
Рейтинг: 0 / 0
ORM (1+N)
    #39081988
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никто не работает с ORM'ами? или никто не сталкивался с проблемой N+1?
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082015
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарникто не работает с ORM'ами? или никто не сталкивался с проблемой N+1?

А в чем проблема?!
Сделать связь один ко многим?
Так в любом букваре по ORM все подробно расписано, с примерами.
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082024
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарникто не работает с ORM'ами? или никто не сталкивался с проблемой N+1?
Все спали ещё, до офисов не добрались. А что за срочность?
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082028
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффаробъясните пожалуйста в двух словах о проблеме N+1 и как решается такая задача?
Что такое ассоциации один ко многим и многие ко многим знаем?
Что такое ленивая (отложенная) загрузка знаем?

Проблема возникает когда ORM загружает коллекцию объектов. Но объекты внутри этой коллекции ленивые, некоторые данные не догружены. Но коду эти данные нужны и он перебирает коллекцию и читает объекты в цикле. В результате ORM догружает недостающие данные тоже в цикле, выполняя по одному запросу на каждый объект. Вот и получает 1 запрос чтобы вычитать коллекцию. + N запросов на каждый объект в коллекции.


МузаффарЗ.Ы. если я не ошибаюсь то решаются такие проблемы с использованием JOIN FETCH и т.д. но не совсем понимаю...
Не всегда именно JOIN, но да, решается указанием ORM что нужно догрузить недостающие данные сразу же (не лениться). А там уже в зависимости от обстановки либо один запрос с JOIN, либо несколько запросов, либо подзапросы. Не суть важно. Но число это ограничено количество ассоциаций, в то время как N - число объектов в коллекции, зачастую, на много больше.
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082079
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul, Blazkowicz,
дело в том что грузиться а когда добавил в persistence.xml профайлер (
Код: xml
1.
<property name="eclipselink.profiler" value="QueryMonitor">

) то получаю вот такую картину
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082093
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарmad_nazgul, Blazkowicz,
дело в том что грузиться а когда добавил в persistence.xml профайлер (
Код: xml
1.
<property name="eclipselink.profiler" value="QueryMonitor">

) то получаю вот такую картину
Ладно. Держи нас в курсе.
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082104
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

в смысле?
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082200
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЛадно. Держи нас в курсе.

ситуация с загруженности чуть улучшилась после применения fetch=FetchType.LAZY
но цифры до сих пор большие...
или ещё что то надо применить?
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082203
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарситуация с загруженности чуть улучшилась после применения fetch=FetchType.LAZY
но цифры до сих пор большие...
или ещё что то надо применить?
Проблема не решается конфигурацией маппинга. Для разных сценариев нужна выборка разных данных. Поэтому fetch нужно указывать в каждом конкретном запросе тем или иным образом.
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082228
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПроблема не решается конфигурацией маппинга. Для разных сценариев нужна выборка разных данных. Поэтому fetch нужно указывать в каждом конкретном запросе тем или иным образом.

правильно ли я написал запрос?:
Код: plsql
1.
select o from Users o join fetch o.roles where o.login=:l and o.password=:p



и вроде для простого вывода достаточно будет вот такой запрос?:
Код: plsql
1.
select o from Users o join fetch o.roles 



или если самый последний чайлд, то?:
Код: plsql
1.
select o from Books o 



так будет правильно?
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082242
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарправильно ли я написал запрос?:

Запусти и посмотри.

Музаффари вроде для простого вывода достаточно будет вот такой запрос?:

Не знаю чем простой вывод отличается от сложного.

Музаффарили если самый последний чайлд, то?:

Поскрёбышь что ли?

Профайлер же четко показал что Users и Roles загружается по PK очень часто.
В связи с чем, надо найти все запросы, которые возвращают списки пользователей и ролей. Затем проверить что в них Users и Roles замаплены лениво. Затем добавить fetch в запросы, чтобы оптимизировать выборку этих сущностей внутри основного запроса.

Как именно добавлять fetch в запросы нужно смотреть в мануале ORM.
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082315
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПрофайлер же четко показал что Users и Roles загружается по PK очень часто.
В связи с чем, надо найти все запросы, которые возвращают списки пользователей и ролей. Затем проверить что в них Users и Roles замаплены лениво. Затем добавить fetch в запросы, чтобы оптимизировать выборку этих сущностей внутри основного запроса.

Прошу прошения но можете поподробнее? что, где, как?
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082327
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МузаффарBlazkowiczПрофайлер же четко показал что Users и Roles загружается по PK очень часто.
В связи с чем, надо найти все запросы, которые возвращают списки пользователей и ролей. Затем проверить что в них Users и Roles замаплены лениво. Затем добавить fetch в запросы, чтобы оптимизировать выборку этих сущностей внутри основного запроса.

Прошу прошения но можете поподробнее? что, где, как?
Что "что", что "где" и что "как"? Если научится формулировать свои вопросы, то шансы получить на них внятный вопрос вырастут в разы.
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082332
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЧто "что", что "где" и что "как"? Если научится формулировать свои вопросы, то шансы получить на них внятный вопрос вырастут в разы.
да с вами согласен.

можете более подробнее объяснить про
авторВ связи с чем, надо найти все запросы, которые возвращают списки пользователей и ролей. Затем проверить что в них Users и Roles замаплены лениво. Затем добавить fetch в запросы, чтобы оптимизировать выборку этих сущностей внутри основного запроса.
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082337
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,

Запускайте отдельные бизнес-транзакции по одной и смотрите что показывает профайлер. Заметили N+1, смотрите лог запросов, анализируйте свой код, чтобы понять почему это происходит.
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082341
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczМузаффар,

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

заметил один странность... пока убрал в коммент все неиспользуемые запросы, смотрел в профайлер как бы снизился до 100, думаю что это хорошо но для проверки просто так обновил страничку (т.е. F5) смотрю в профайлер там уже не 100 а к примеру 120 при этом я ничего не поменял ни в базе ни в кода просто обновил страницу...
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082351
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарзаметил один странность... пока убрал в коммент все неиспользуемые запросы, смотрел в профайлер как бы снизился до 100, думаю что это хорошо но для проверки просто так обновил страничку (т.е. F5) смотрю в профайлер там уже не 100 а к примеру 120 при этом я ничего не поменял ни в базе ни в кода просто обновил страницу...
"запрос" это не обязательно JPQL запрос. Это может быть и загрузка объекта по PK, внутри которого коллекция ленивых сущностей. Это может быть и Criteria API запрос.
...
Рейтинг: 0 / 0
ORM (1+N)
    #39082371
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

странно цифры увеличивается даже тогда когда компьютер просто так стоит ничего не делая :) :(
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / ORM (1+N)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]