Вопрос проверяет понимание стратегий загрузки данных в ORM и их влияние на производительность приложений.
Lazy loading (отложенная загрузка) и eager loading (жадная загрузка) — это две стратегии загрузки связанных данных в объектно-реляционном отображении (ORM). Они определяют, когда и как загружаются связанные сущности из базы данных.
При lazy loading связанные данные загружаются только в момент первого обращения к ним. Например, если у вас есть объект User с коллекцией Orders, то при получении пользователя заказы не загружаются. Они будут загружены отдельным запросом, когда вы вызовете user.orders. Это экономит ресурсы, если связанные данные не нужны, но может привести к проблеме N+1 запросов, когда для каждого родительского объекта выполняется дополнительный запрос.
// Пример на TypeORM (Node.js)
const user = await userRepository.findOne({ where: { id: 1 } });
// Заказы не загружены
console.log(user.orders); // Здесь выполняется дополнительный запросПри eager loading связанные данные загружаются сразу вместе с родительским объектом, обычно через JOIN или отдельные запросы. Это увеличивает объем данных в одном запросе, но уменьшает общее количество запросов. Подходит, когда вы точно знаете, что связанные данные понадобятся.
// Пример на TypeORM
const user = await userRepository.findOne({
where: { id: 1 },
relations: ['orders']
});
// Заказы уже загружены
console.log(user.orders); // Нет дополнительного запросаВывод: Выбор между lazy и eager loading зависит от паттернов доступа к данным. Для API с предсказуемыми запросами чаще используют eager loading, чтобы избежать N+1 проблемы. Для сложных графов объектов с редкими обращениями к связям lazy loading может быть эффективнее.
Уровень
Рейтинг:
4
Сложность:
4
Навыки
JavaScript
SQL
Ключевые слова
Подпишись на Python Developer в телеграм