Производительность по методам поиска для получения данных базы данных - PullRequest
2 голосов
/ 17 июня 2011

Я использую Ruby on Rails 3.0.7, и я хотел бы знать, каковы преимущества и недостатки (связанные с производительностью) использования метода User.all, а затем выполнять методы поиска для результата для каждого необходимого запроса вместо использования User.find(<id>) для извлечения каждой записи по отдельности.

Я спрашиваю это, потому что в моем представлении файла у меня есть что-то вроде этого:

accounts.each { |account|
  puts account.user.name
}

UPDATE

Например, как веб-сайт Stackoverflow будет обрабатывать теги, относящиеся к методам поиска?

1 Ответ

2 голосов
/ 17 июня 2011

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

Вы должны использовать find или whereметоды при поиске подмножеств в большинстве случаев, если вы не можете быть абсолютно уверены, что количество задействованных записей тривиально.

Я бы даже рекомендовал использовать select_values или select_rows, когда все, что вам нужно, это чуть-чутьданных без издержек на модель, что хорошо работает для больших табличных списков.

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

Почти всегда ошибочно иметь в контроллере следующее:

@users = Users.all

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...