2011-04-05 19 views
6

मैं एक ऐप बना रहा हूं जो 5 अद्वितीय मॉडल (पोस्ट, फोटो, इवेंट्स इत्यादि) पर टिप्पणियों की अनुमति देता है, जिस तरह से 2 या 3 और अधिक होते हैं। जैसा कि यह खड़ा है, प्रत्येक मॉडल में एक संबंधित टिप्पणी मॉडल (पोस्टकॉममेंट्स, फोटोकॉममेंट्स, इवेंट कॉमेंट्स इत्यादि) है, हालांकि टिप्पणियां आम तौर पर सभी मॉडलों में समान होती हैं।कई अलग-अलग मॉडल के लिए टिप्पणियां: पॉलिमॉर्फिक या नहीं? (रेल पर रूबी)

मैंने हाल ही में पॉलीमोर्फिक संघों की शक्ति की खोज की है, जो Railscast #154 में पूरी तरह से समझाया गया है, जो अनिवार्य रूप से एक मॉडल में कई मॉडलों और एक टेबल में कई तालिकाओं को जोड़ देगा।

जबकि पॉलिमॉर्फिक संघ कोड और अनावश्यकता को साफ करेंगे, वे प्रदर्शन को कैसे प्रभावित करते हैं? मुझे डेटाबेस अनुकूलन के बारे में बहुत कुछ पता नहीं है, लेकिन ऐसा लगता है कि एक विशिष्ट टिप्पणी तालिका में 200,000 पंक्तियों की तुलना में एक सामान्य टिप्पणी तालिका में 1,000,000 पंक्तियों से टिप्पणी करने में अधिक समय लगेगा। क्या यह पॉलिमॉर्फिक एसोसिएशन में स्विच करने लायक है (जबकि ऐप अभी भी विकास में अपेक्षाकृत शुरुआती है) या क्या मुझे प्रत्येक प्रकार की टिप्पणी के लिए मॉडल/टेबल बनाना जारी रखना चाहिए?

+2

टिप्पणियां कार्यक्षमता वास्तव में पॉलिमॉर्फिक एसोसिएशन के लिए सबसे अच्छा उदाहरण है। 1000000 पंक्तियां उचित इंडेक्स और प्रश्नों के साथ एक सभ्य MySQL सर्वर के लिए कुछ भी नहीं है। गैर-मौजूदा समस्याओं को हल करने का प्रयास न करें :) – keymone

उत्तर

3

यह वास्तव में निर्भर करता है कि साइट कितनी बड़ी होगी। सबसे पहले आपको 2 कॉलम पर एक इंडेक्स जोड़ना होगा।

add_index :comments, [:commentable_type, commentable_id] 

इससे गति बहुत बढ़ जाएगी।

यदि आपके पास भविष्य में बड़ी गति समस्या है क्योंकि आपके पास 1.000.000 टिप्पणियां हैं तो आप हमेशा कैशिंग का उपयोग कर सकते हैं या कई तालिकाओं में माइग्रेट कर सकते हैं। लेकिन वास्तव में आपको गति की समस्याओं के लिए बहुत सारी टिप्पणियों की आवश्यकता होगी। जब तक आप अपनी मेज को इंडेक्स करते हैं! 1.000.000 रिकॉर्ड में एक खोज क्वेरी करने के लिए वैसे भी बहुत कुछ नहीं है।

मैं कहता हूं, 1 टेबल बनाएं!

+0

धन्यवाद, मैं ठीक से अनुक्रमणित करने की योजना बना रहा था लेकिन मूल प्रश्न में उल्लेख करना भूल गया था। – aguynamedloren

0

एक छोटी सी के साथ सुधार माइकल के जवाब:

add_index :comments, [:commentable_id, :commentable_type] 

मुझे लगता है कि इस सवाल का जवाब बेहतर होगा क्योंकि: commentable_id विशेषता क्वेरी अधिक, जिसका अर्थ है कि सूचकांक में संपूर्ण क्वेरी गति एक बहुत हो जाएगा को कम होगा और तेज। मुझे इस पर फीडबैक दें :)