मेरे पास बेसबॉल टूल है जो उपयोगकर्ताओं को प्लेयर के ऐतिहासिक बल्लेबाजी आंकड़ों का विश्लेषण करने की अनुमति देता है। उदाहरण के लिए, रात-समय की स्थितियों के दौरान पिछले 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 दिनों के साथ शुरू करते हैं।
- पिछले 7 दिनों में सभी at_bat रिकॉर्ड्स पुनर्प्राप्त करें। रिकॉर्ड at_bat प्रत्येक पर
- दोहराएं ...
- एक at_bat रिकॉर्ड को देखते हुए,, जुड़े बल्लेबाज और संबद्ध WEATHER_CONDITION हड़पने सही batting_stat रिकॉर्ड (BattingStat.find_or_create_by_batter_and_recordable (बल्लेबाज, WEATHER_CONDITION) मिल जाए, तो batting_stat रिकॉर्ड को अपडेट करें।
- दोहराएँ । बल्लेबाज और घड़े के लिए चरण 3 (recordables)
कदम 1-4 के साथ-साथ अन्य समय अवधि के लिए दोहराया जाता है - 15 दिन, 30 दिन, आदि
अब मुझे लगता है कि यह कैसे श्रमसाध्य होगा सेवा मेरे इन अद्यतनों को बनाने के लिए हर दिन एक स्क्रिप्ट चलाएं यदि मैं समय सारिणी को 7/15/30 से 7/15/30/45/60/90/180/365 तक विस्तारित करना था।
तो मेरा सवाल यह है कि आप इसे प्रदर्शन के उच्चतम स्तर पर चलाने के लिए कैसे पहुंचेंगे?
मैं एक गोल्फ अनुप्रयोग के लिए इसी तरह की प्रणाली का निर्माण किया है। मैं साझा करने के लिए तैयार हूं लेकिन इसके लिए एक बहुत व्यापक व्याख्या की आवश्यकता है। क्या आप अपने आर्किटेक्चर को बदलने के इच्छुक हैं या आप वर्तमान में आपके पास मौजूद आर्किटेक्चर को अनुकूलित करने के लिए एक तरीका ढूंढ रहे हैं? – mnelson
मुझे यह सुनने की बहुत सराहना की जाएगी कि आपने यह कैसे किया। आर्क को अपडेट करने के लिए तैयार, लेकिन सड़क की जांच। – keruilin
आप कितने रिकॉर्ड से निपट रहे हैं? बेसबॉल के लिए कई डेटा अंक नहीं हो सकते हैं, निश्चित रूप से (सैकड़ों हजारों?)। तुम सिर्फ एक नक्शे में स्मृति में बहुत कुछ है, संभवतः खिलाड़ी के आधार पर विभाजित कर सकते हैं नहीं यदि आवश्यकता हुई, और मक्खी पर यह सब की गणना? –