Ленивая Загрузка действительно плохо?

Я слышу много о проблемах производительности о ленивой загрузке, неважно, если в NHibernate, Linq....

Проблемой является N+1, выбирает. Пример, я хочу все сообщения и его пользователей в foreach I ленивых Пользователей Загрузки, их мне нужен один выбор для сообщений плюс выбор N для каждого пользователя.

Ленивая загрузка:

1 - select ....from post
N - select ....from user

"Хороший" подход, делают соединение:

1 - select .....from post inner join user on post.UserId = user.Id

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

В производительности, какой подход является лучшим?

12
задан RavatSinh Sisodiya 22 March 2017 в 07:56
поделиться

4 ответа

Ленивая нагрузка не является ни хорошей, ни плохого. См. Для более длительного объяснения:

Когда следует избегать использования функции ленивой загрузки Nibernate?

В общем, ленивая погрузка - это хорошее поведение по умолчанию для ORM, но как пользователь ORM, который вы должны осознавать Когда чтобы переопределить по умолчанию и загружать данные с нетерпением. Профилирование производительности вашего приложения - лучший способ принимать решения об использовании ленивой загрузки или не используя его. Будьте осторожны слишком много усилий на преждевременной оптимизации.

13
ответ дан 2 December 2019 в 06:26
поделиться

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

5
ответ дан 2 December 2019 в 06:26
поделиться

Возможно, больше, чем может обработать ОЗУ.

-121--3770456-

На мой взгляд - вам нужна причина нет для хранения данных в базе данных. | Но я думаю, что вы также должны рассмотреть не отношения баз данных, таких как google datastore http://code.google.com/appengine/docs/python/datastore/ или другие подобные вещи.

-121--4321192-

Большинство моих приложений связаны с границей службы (веб-служба, WCF и т.д.), и в этот пункт ленивая загрузка в OR/M бессмысленна, и реализация ленивой загрузки в ваших сущностях, которые сидят поверх вашей службы, является плохой идеей (сущности теперь должны знать о службе).

4
ответ дан 2 December 2019 в 06:26
поделиться

Там нет плохого и хорошего для ленивой нагрузки. Вы должны решить, предпочитаете ли вы загружать ресурсы во время выполнения или времени загрузки приложения. Например - в реальном времени обычно используются буфер, чтобы избежать выделения ресурсов во время выполнения. Это противоположность ленивой погрузке и выгодно для программного обеспечения в реальном времени.

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

1
ответ дан 2 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: