У меня есть инструмент для бейсбола, который позволяет пользователям анализировать статистику ударов игрока за прошлые периоды. Например, сколько ударов у A-Rod за последние 7 дней в ночное время? Я хочу расширить временные рамки, чтобы пользователь мог анализировать статистику ударов игрока до 365 дней. Однако для этого требуется серьезная оптимизация производительности. Вот мой текущий набор моделей:
class AtBat < ActiveRecord::Base
belongs_to :batter
belongs_to :pitcher
belongs_to :weather_condition
### DATA MODEL ###
# id
# batter_id
# pitcher_id
# weather_condition_id
# hit (boolean)
##################
end
class BattingStat < ActiveRecord::Base
belongs_to :batter
belongs_to :recordable, :polymorphic => true # e.g., Batter, Pitcher, WeatherCondition
### DATA MODEL ###
# id
# batter_id
# recordable_id
# recordable_type
# hits7
# outs7
# at_bats7
# batting_avg7
# ...
# hits365
# outs365
# at_bats365
# batting_avg365
##################
end
class Batter < ActiveRecord::Base
has_many :batting_stats, :as => :recordable, :dependent => :destroy
has_many :at_bats, :dependent => :destroy
end
class Pitcher < ActiveRecord::Base
has_many :batting_stats, :as => :recordable, :dependent => :destroy
has_many :at_bats, :dependent => :destroy
end
class WeatherCondition < ActiveRecord::Base
has_many :batting_stats, :as => :recordable, :dependent => :destroy
has_many :at_bats, :dependent => :destroy
end
Чтобы сохранить разумную длину моего вопроса, позвольте мне рассказать, что я делаю для обновления таблицы batting_stats вместо копирования кучи кода. Начнем с 7 дней.
Шаги 1-4 повторяются и для других периодов времени - 15 дней, 30 дней и т. Д.
Теперь я представляю, насколько трудоемким было бы запускать сценарий каждый день для внесения этих обновлений, если бы я расширить периоды времени с 7/15/30 до 7/15/30/45/60/90/180/365.
Итак, мой вопрос: как вы подойдете к тому, чтобы это работало с максимальной производительностью?