Я разработал приложение, которое дает зарегистрированным пользователям обзор статистики в месяц.Как оптимизировать ruby on rails статистика в месяц запрос
Это мой текущий подход:
Statistics.html.haml:
#(@parsed months is an array of monthnames.)
- @parsed_months.each do |month|
= render :partial => "statistic", :locals => {:month => month}
_statistic.html.haml:
%tr{:class => cycle("odd", "even")}
%td= l(month, :format => "%B").capitalize
%td= current_user.total_views_count(month)
%td= current_user.total_leads_count(month)
%td= current_user.total_clicks_count(month)
Метод, который возвращает общее число просмотров (в пользователя .rb):
def total_views_count(month = nil)
if month == nil
v = 0
self.companies.each {|c| v += c.counts.size}
return v
else
v = 0
self.companies.each {|c| v += c.counts.where(:created_at => Date.today.beginning_of_year..Date.today.end_of_year).where(:created_at => month.beginning_of_month..month.end_of_month).size}
return v
end
end
Company.rb:
belongs_to :user
has_many :counts, :as => :countable, :dependent => :destroy
Count.rb:
belongs_to :countable, :polymorphic => true
User.rb:
has_many :companies
Это работает хорошо, но через несколько месяцев модель графа выросла миллион + записей, вызывая тайм-ауты запроса на героку.
Что я могу сделать для оптимизации этих запросов или есть ли более эффективные подходы к этому?
Заранее благодарен!
Можете ли вы разместить соответствующий контент у компании и считать модели? а также рассказать нам больше о том, как подсчеты связаны с компаниями в реальной проблеме? – rubish
Я сделал некоторые изменения, но они довольно просты. Счета - это количество просмотров (сделанных посетителями) профиля компании, компания принадлежит одному пользователю, и пользователь может иметь больше компаний. – Laurens
Хорошо, я получил отношения между ними. Можете ли вы также рассказать, как вы храните счет? Можете ли вы опубликовать все поля в модели подсчета. Также как вы храните счет? они отображаются на посетителя за посещение, или каждый вид посетителя преобразуется в строку в модели подсчета? – rubish