2010-08-27 3 views
2

Извините, если этот вопрос немного глупый, но есть ли какие-либо отрицательные последствия, если приложение имеет модель или модели с многочисленными ассоциациями? Для сложного приложения, требующего модели пользователя, например (например, сайт социальной сети), вполне вероятно, что модель может иметь более 15 ассоциаций (has_many :posts, has_many :messages, has_many :photos, has_many :friends и т. Д.). Если одна модель сильно связана с другими, оказывает ли это какое-либо негативное влияние на производительность приложения? И если да, то каков наилучший способ свести к минимуму проблемы?У моделей Can Rails слишком много ассоциаций?

ответ

5

Связи между моделями в Rails действительно просто манипулирует значение идентификаторов за кадром. Это довольно высокопроизводительные операции, особенно если вы потратили время на настройку отношений внешнего ключа, если ваша БД поддерживает его. ActiveRecord также не загружает ничего, если вы не попросите его, поэтому обычно они будут переведены как JOIN для SQL-сервера, только если вы действуете на эти отношения.

Как создаются сообщения, сообщения, фотографии или друзья в вашем примере, ActiveRecord автоматически установит столбец user_id. Это все, что связано с ассоциацией has_many.

Преждевременная оптимизация - вот корень всего зла. Не беспокойтесь об этом, пока вы не установили узкое место с профилированием.

3

Ну, первый совет, который я мог бы предложить, - это прототип чего-то быстро и посмотреть, как он работает.

Что касается ограничения на ассоциации, ActiveRecord по умолчанию использует ленивые отношения. Таким образом, загрузка пользователя не будет автоматически загружать сообщения, сообщения, фотографии, друзей и т. Д., Пока вы не попросите их. Это обычно очень хорошо для вас, так как вам, вероятно, не нужны все их фотографии на странице сообщений.

Вот ссылка с некоторыми советами по оптимизации ActiveRecord для некоторых более глубокой информации: http://www.ibm.com/developerworks/web/library/wa-rails3/

Смежные вопросы