आपको सामान्यीकरण के साथ कितनी दूर जाना चाहिए?


30

मेरे पास एक डेटाबेस में एक अच्छी मात्रा में डेटा है। मैंने अपने डेटा में कुछ अतिरेक के साथ उनके बीच तालिकाओं और अच्छे संबंधों का गठन किया है। लेकिन मुझे सामान्यीकरण के साथ कितनी दूर जाना चाहिए? क्या प्रदर्शन में बहुत अधिक सामान्यीकरण की कमियां हैं?

जवाबों:


37

आपको जहां तक ​​जाना चाहिए, और आगे नहीं जाना चाहिए। बेशक। ~ समस्या यह हो सकती है कि यह एक कला है, और यही कारण है कि यह शुद्ध विज्ञान नहीं है।

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

लेकिन हम केवल यह जानते थे कि क्योंकि हमने 1) एक "सामान्यीकृत" डिज़ाइन बनाया, 2) ने इसका उपयोग करना शुरू कर दिया, 3) दर्जनों तालिकाओं में सैकड़ों लाखों पंक्तियों के बाद वास्तविक प्रदर्शन को प्रोफाइल किया।

अंतिम कहानी यह है कि जब तक हम प्रोफाइल नहीं बनाते तब तक हम यह नहीं जान सकते कि हमारे लिए क्या काम होने वाला है। हमें सामान्य करने का विचार पसंद आया ताकि हम अधिक आसानी से अपडेट कर सकें, लेकिन अंत में वास्तविक प्रदर्शन निर्णायक कारक था। आपके लिए मेरी सलाह है: प्रोफ़ाइल, प्रोफ़ाइल, प्रोफ़ाइल।


4
कला और विज्ञान नहीं मुझे यह विश्वास करने के लिए उधार देता है कि यह वूडू है। कोई संदर्भ?
हाबिल

3
@ सामान्य में मेरे किस्से के बारे में अविश्वास कैसे? एक प्रोफाइलर वियोजन के लिए नियम सुझाने में सक्षम हो सकता है, लेकिन वे नियम प्रोग्रामर के अनुभव से आते हैं। सभी प्रोग्रामिंग एक कला है। मैं किसी ऐसे व्यक्ति को अधिक प्रसिद्ध पाऊंगा जिसने बाद में एक पूर्ण कीबोर्ड प्राप्त करने के लिए एक ही बात कही।
jcolebrand

1
@Abel ओह अच्छी तरह से तो सब है in ('forgiven','pardoned');): p
jcolebrand

2
@ फर्ग्यूस खुशी से आपको पसंद आया। मैं हमेशा एक उपाख्यानों काम सबसे अच्छा पाया है।
jcolebrand

2
@ साब - 'एक कला एक विज्ञान है जिसमें 7 डिग्री से अधिक स्वतंत्रता है'। एक समस्या के लिए जटिलता के कुछ हद तक संपूर्ण दृष्टिकोण से परे होना संभव है। उस समय अनुभव के आधार पर अनुमानी दृष्टिकोण सबसे प्रभावी होते हैं। अफसोस की बात है कि कंप्यूटिंग के क्षेत्र में जटिलता का स्तर कुछ भी लेकिन तुच्छ सॉफ्टवेयर प्रणालियों पर हासिल करना काफी आसान है।
ConcernedOfTunbridgeWells

10

सामान्यीकरण केवल एक लक्ष्य है जब यह आपके डेटा मॉडल को अच्छी तरह से समर्थन करता है ताकि इसे वारंट किया जा सके। इसका मतलब विकास, प्रबंधन और रखरखाव की अनुमति देने के लिए एक मार्गदर्शक होना है। याद रखें कि सामान्यीकरण पर पुस्तक, और न ही इसके लेखक आपके डेटाबेस या इसके अनुप्रयोग का निर्माण या रखरखाव करने जा रहे हैं।

"बहुत सामान्यीकरण" के विषय पर एक अच्छा पढ़ा यहाँ है।

और, हाँ बहुत सामान्यीकरण के लिए प्रदर्शन प्रभाव हो सकते हैं। स्टेटस इंडिकेटर टेबल्स जैसी चीजों को लेने के लिए यह गहरे टेबल ट्रैवर्सल में होगा, जब उन्हें एक अलग टेबल पर निकाला जाएगा। कुछ का कहना है कि यह आमतौर पर अद्यतन गति ("गुड" से "गुड" या इस तरह के कुछ) में या बदलने की स्थिति में स्थिति पाठ को बदल दिया जाता है।


2
यहाँ इस विषय पर और भी बहुत कुछ मनोरंजक एक अतिरिक्त अच्छा पढ़ा है qntm.org/gay
jcolebrand

5

मैं क्रिस डेट के कुछ और हालिया किताबों में पाए गए निम्नलिखित परिशिष्ट पढ़ने की सलाह देता हूं :

सामान्यीकरण के लिए दो चीयर्स

सामान्यीकरण रामबाण होने से बहुत दूर है, क्योंकि हम आसानी से विचार करके देख सकते हैं कि इसके लक्ष्य क्या हैं और यह उनके खिलाफ कितना कारगर है ...

मुझे यह स्पष्ट करना चाहिए कि मैं नहीं चाहता कि इस खंड में मेरी टिप्पणी को किसी भी प्रकार के हमले के रूप में देखा जाए। मेरा मानना ​​है कि पूरी तरह से सामान्यीकृत डिजाइन से कम कुछ भी दृढ़ता से contraindicated है ...


2

मुझे लगता है कि स्पष्ट रूप से जोड़े गए योगों को देखना भी उतना ही महत्वपूर्ण है, या तो समग्र मानों को जोड़ा गया है या एक मास्टर टेबल से कॉपी किए गए कुछ फ़ील्डों को एक विस्तृत प्रतिलिपि में जोड़ा गया है।

तर्क कुछ प्रदर्शन तर्क है।

यदि आप इतना लागू करते हैं, कि उन क्षेत्रों को ट्रिगर्स द्वारा अद्यतन किया जाता है और उन्हें सुसंगत रखने के लिए डेटाबेस पर निर्भर है।


2

मैं पूरी तरह से @jcolebrand से सहमत हूं। जब आप अपने एप्लिकेशन के लिए मॉडल डिज़ाइन कर रहे हों, तो आपको वह सब कुछ सामान्य करना चाहिए जो आप कर सकते हैं। लेकिन फिर आपको अपने मॉडल पर निर्मित प्रश्नों को प्रोफाइल करना चाहिए, विशेष रूप से अक्सर निष्पादित किए जाने वाले।

मेरा अपना अनुभव: जिन विशेषताओं को पहुंचने में दो जोड़ लगे (अर्थात तीन तालिकाओं का जुड़ना) ज्यादातर प्रदर्शन हॉग होगा। और चीजों को सबसे खराब बनाने के लिए, इसका उपयोग ऑन लाइन लेनदेन में किया जाता है। मैं विशेषता को निरूपित करता हूं, इसलिए इसे केवल एक जुड़ने की आवश्यकता है और प्रोग्रामर को क्वेरी के लिए अपने ऐप को समायोजित करने और विशेषता को अपडेट करने के लिए कहा। अब यह बेहतर काम करता है ...

दूसरे शब्दों में, आपको प्रदर्शन के साथ सामान्यीकरण को संतुलित करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.