LINUX.ORG.RU

[rails] Ищу тесты производительности.


0

1

С профайлером пока посидеть не могу, потому вопрос. 10 000 посещений в сутки. Нужно выводить список родителей и детей для каждого.

Можно написать в контроллер что-то вроде:

@parents = Parent.all
@childrens = Children.all

и во вьюху это:

<% @parents.each do |p| %>
  <%= p.name  %>

  <% @childrens.each do |s| %>
    <%= s.name if s.parent_id == p.id %>
  <% end %>
<% end %>

Либо из вьюхи дёргать метод childrens.each для каждого из @parents. Но этот вариант создаст нагрузку на БД. Хотя и сортировка будет работать быстрее.

И вообще, при какой посещаемости нужно заботиться о таких вещах?

не, Parent.all(:include => :childs) и тогда нагрузки на бд не будет, но будет нагрузка на память. Бороться можно путем использования :select -> дабы выбрать определенные ячейки из бд:

Parent.all(:select => «parents.id, parents.name»), тогда в память не будут загружены лишнии поля, а только id и name модели Parent.

ciss
()

> И вообще, при какой посещаемости нужно заботиться о таких вещах?
Смотря какое у вас серверное железо.
10 000 посещений в сутки мало о чем говорит, будет сильно зависеть от темы\специфики сайта - если сайт для офисного планктона, то скорее всего он будет востребован в 8-часовой рабочий день, дальше нафиг не нужен (если еще и для определенного региона). Скорее тут будет играть роль сколько одновременно уникальных юзеров может выдержать сайт, сколько конкурентных запросов в секунду.
Советы по оптимизации банальны: мемкэш (кластер из мемкэшей), для СУБД - партицирование, как быстро растут данные? Зависит от СУБД: с мускулем партицирование попроще, с postgresql посложнее. Рельсы отлично работают с мемкэшем, потом смотреть сколько у вас запросов (в процентах) на select данных и insert\update, далее можно сделать репликацию (например в мускуле) master-slave - на мастер только insert\update, со слэйвов - select. Да, рельсы могут работать с более чем одной СУБД сразу.

Nightforge
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.