Я посетил http://guides.rubyonrails.org/active_record_querying.html после разговора с пэром относительно N + 1 и серьезных последствий для производительности плохих запросов к БД.
ActiveRecord (Rails):
clients = Client.includes(:address).limit(10)
Там, где у клиентов есть адреса, и я намереваюсь получить к ним доступ во время циклического обхода клиентов, Rails предоставляет includes
, чтобы сообщить об этом и добавить их в запрос, что сразу исключает 9 запросов.
Django:
https://github.com/lilspikey/django-batch-select обеспечивает поддержку пакетных запросов.Знаете ли вы о других библиотеках или приемах для достижения того, что Rails предоставляет выше, но в менее многословном поместье (как в примере с rails, где только 19 символов исправляют N + 1 и это очень ясно)?Кроме того, пакетный выбор решает проблему одинаково, или это две разные вещи?
Кстати, я не спрашиваю о select_related
, хотя на первый взгляд это может показаться ответом,Я говорю о ситуации, когда у address
есть внешний ключ к client
.