software SQL सर्वर दृश्य, आशीर्वाद या अभिशाप?




sql software (10)

मैंने एक बार एक वास्तुकार के साथ काम किया था जिसने SQL विचारों के उपयोग पर प्रतिबंध लगा दिया था। उनका मुख्य कारण यह था कि विचारों ने बिना किसी विचारहीन सांकेतिक शब्दों में बदलने के लिए आसानी से इसे शामिल किया गया तालिकाओं में शामिल किया, जो कि सांकेतिक शब्दों में बदलनेवाला कठिन प्रयास करता है, पूरी तरह से बचा जा सकता है। स्पष्ट रूप से वह विचारों में encapsulation के बजाय प्रति-पेस्ट के माध्यम से कोड पुन: उपयोग को प्रोत्साहित कर रहा था।

डेटाबेस में करीब 600 टेबल थे और इसे सामान्यीकृत किया गया था, इसलिए अधिकांश उपयोगी एसक्यूएल आवश्यक रूप से वर्बोज़ थे।

कई सालों बाद मैं प्रतिबंध से कम से कम एक बुरा परिणाम देख सकता हूं - हमारे पास कई सैकड़ों घने, लंबी संग्रहित प्रक्रियाएं हैं, जो बिना किसी निष्कर्ष पर है।

पिछली बार में मैं कहूंगा कि यह एक गलत निर्णय था, लेकिन एसक्यूएल विचारों के साथ आपके अनुभव क्या हैं? क्या आपने प्रदर्शन के लिए उन्हें खराब पाया है? पर कोई अन्य विचार जब वे या उपयुक्त नहीं हैं?


इस प्रकार अब तक उल्लेख नहीं किया गया है, जो एक बात विज्ञापन हॉक रिपोर्टिंग या समान के लिए उपयोगकर्ताओं को समाप्त करने के लिए डेटा की एक तार्किक तस्वीर प्रदान करने के लिए विचारों का उपयोग है।

इसमें दो गुण हैं:

  1. उपयोगकर्ता को एकल "तालिकाओं" को उन डेटा से युक्त करने की अनुमति देने के लिए जो अपेक्षा करते हैं कि अपेक्षाकृत गैर तकनीकी उपयोगकर्ताओं को संभावित रूप से जटिल जुड़ने की आवश्यकता होती है (क्योंकि डेटाबेस सामान्य है)
  2. यह डेटा या ढांचा को अंतिम उपयोगकर्ताओं के सामने न पहुंचने के कुछ हद तक एएचएचक एक्सेस की अनुमति देने के लिए एक साधन प्रदान करता है।

यहां तक ​​कि गैर-अस्थायी रिपोर्टिंग के साथ-साथ रिपोर्टिंग सिस्टम को देखने के लिए कभी-कभी सार्थक रूप से आसान रिपोर्टिंग होती है जिसमें रिहेनैंट डेटा शामिल होता है, जो आंकड़ों के उत्पादन को समान रूप से उसी की प्रस्तुति से अलग करता है


हम अपने सभी सरल डेटा निर्यातों के लिए सीएसवी फाइलों के विचारों का उपयोग करते हैं। यह एक पैकेज लिखने की प्रक्रिया को सरल करता है और पैकेज के भीतर एसक्यूएल को एम्बेड करने के लिए बोझिल हो जाता है और मुश्किल से डीबग करता है।

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


कुछ समय पहले मैंने उस कोड को बनाए रखने की कोशिश की जो विचारों से निर्मित दृश्यों से निर्मित दृश्यों का उपयोग करती थी ... यह एक ** में दर्द था, इसलिए मुझे दृश्यों के लिए थोड़ा एलर्जी हो गया है :)

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

हालांकि, वह पर्याप्त रूप से विचारों को विनियमित नहीं करता है, यदि पर्याप्त रूप से उपयोग किया जाता है उदाहरण के लिए यदि आप "यूज़र्स" तालिका के साथ एक दृश्य का उपयोग "status_status" टेबल के साथ जुड़ सकते हैं तो प्रत्येक स्थिति के लिए टेक्स्ट स्पष्टीकरण प्राप्त कर सकते हैं - अगर आपको इसकी ज़रूरत है हालांकि यदि आपको स्पष्टीकरण की आवश्यकता नहीं है: "उपयोगकर्ता" तालिका का उपयोग करें, दृश्य नहीं। हमेशा की तरह: अपने दिमाग का प्रयोग करें!


दृश्य जटिल प्रश्नों के आकार को भी कम कर सकते हैं (उसी तरह संग्रहीत procs कर सकते हैं)।

यह बहुत व्यस्त डाटाबेस के लिए नेटवर्क बैंडविड्स्त को कम कर सकता है।


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


देखते हैं कि मैं एक लंगड़ा सादृश्य के साथ आ सकता हूं ...

"मुझे फ़िलिप्स पेचकश की आवश्यकता नहीं है। मैं एक सपाट सिर और एक चक्की लेता हूं!"

हाथ से बाहर के विचारों को खारिज करना दर्द का दीर्घकालिक कारण होगा। एक के लिए, संशोधित कोड को शिप करने के बजाय एक एकल दृश्य परिभाषा को डिबग करना और संशोधित करना आसान है।


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

लेकिन वे उत्पादन कोड के लिए खराब हो सकते हैं। कारण का एक हिस्सा यह है कि यह एक तरह से अप्रत्याशित है कि आपको कौन से अनुक्रमित दृश्यों की आवश्यकता होगी, चूंकि खंड अलग हो सकता है, और इसलिए ट्यून करने के लिए कठिन है। इसके अलावा, आप आम तौर पर अलग-अलग प्रश्नों के लिए अनिवार्य है, जो दृश्य का उपयोग कर रहे हैं। इनमें से प्रत्येक प्रश्न को अलग-अलग किया जा सकता है और व्यक्तिगत रूप से ट्यून किया जा सकता है।

डेटा विभाजन के मामलों में विचारों के विशिष्ट उपयोग हैं जो अत्यंत उपयोगी हो सकते हैं, इसलिए मैं यह नहीं कह रहा हूं कि उन्हें पूरी तरह से बचा जाना चाहिए। मैं सिर्फ यह कह रहा हूं कि यदि कुछ दृश्य संग्रहीत कार्यविधियों द्वारा एक दृश्य को बदला जा सकता है, तो आप दृश्य के बिना बेहतर होंगे।


विचारों के लिए कुछ बहुत अच्छा उपयोग हैं; मैंने ट्यूनिंग के लिए और जानकारी के कम सामान्यीकृत सेट को उजागर करने के लिए या एक ही परिणाम सेट में एकाधिक चयनों से यूनियन-इन परिणामों के लिए बहुत कुछ उपयोग किया है।

जाहिर है किसी भी प्रोग्रामिंग टूल का उपयोग ग़लत तरीके से किया जा सकता है, लेकिन मैं अपने अनुभव में किसी भी समय के बारे में नहीं सोच सकता जहां एक खराब ढंग से देखा गया दृश्य ने किसी प्रदर्शन के दृष्टिकोण से किसी भी तरह की कमियां पैदा कर दी हैं, और वे स्पष्ट रूप से समायोजित चयन और बचाते हुए प्रदान कर सकते हैं जटिल एसक्यूएल कोड के दोहराव महत्वपूर्ण हो सकता है

संयोग से, मैं वास्तुशिल्प "नियमों" का एक प्रशंसक कभी नहीं रहा हूं जो डेवलपर्स को स्वयं को चोट पहुंचाने के लिए तैयार करते हैं। ये नियम अक्सर अनपेक्षित साइड इफेक्ट होते हैं - मैंने जिस अंतिम स्थान पर काम किया था वह डेटाबेस में नल का उपयोग करने की अनुमति नहीं देता, क्योंकि डेवलपर्स नल की जांच करने के लिए भूल सकते हैं। यह हमें "1/1/1900" तारीखों के आसपास काम करने और डेटाबेस के खिलाफ बनाए गए सभी सॉफ़्टवेयर में "0" को चूकने के लिए मजबूर कर दिया, और उन जगहों के आसपास काम करने वाले देवों की वजह से बग्स की एक लीटनी शुरू कर रहा था जहां नल उचित मूल्य था ।


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

यह सुरक्षा अवशेष लाभ तब भी लागू होता है जब विचारों को अंतिम-उपयोगकर्ता एड-हॉक क्वेरी के लिए उपयोग किया जाता है; यह एक लाभ से कम होगा यदि हमारे पास एक उचित, चपटा, डाटा वेयरहाउस का प्रतिनिधित्व हमारे डेटा का होगा।


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

मैं वास्तव में केवल विभाजन करने के डेटा के विचारों की आवश्यकता देखता हूं और बेहद जटिल के लिए मिलती है जो वास्तव में आवेदन के लिए महत्वपूर्ण हैं (यहां वित्तीय रिपोर्टों की सोच जहां सभी के लिए समान डेटासेट से शुरू करना महत्वपूर्ण हो सकता है)। मुझे पता है कि कुछ रिपोर्टिंग उपकरण संग्रहीत procs पर विचार पसंद करते हैं।

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

मैं यह भी देखता हूं कि जो लोग विचारों पर भरोसा रखते हैं (वे देखने वाले डेवलपर नहीं हैं - जो लोग केवल उनका इस्तेमाल करते हैं) अक्सर डेटाबेस को बहुत अच्छी तरह से समझ नहीं पाते हैं (इसलिए वे दृश्य का उपयोग न करने पर गलत हो जाता है) और मेरे लिए डेटाबेस के खिलाफ अच्छा कोड लिखने के लिए महत्वपूर्ण है। मैं चाहता हूं कि लोग यह समझ सकें कि वे क्या करने के लिए डीबी को पूछ रहे हैं, एक दृश्य के कुछ जादू ब्लैक बॉक्स पर भरोसा नहीं करते। यह बिल्कुल व्यक्तिगत राय है, आपका लाभ अलग-अलग हो सकता है

ब्लैम की तरह मैं खुद को संग्रहीत procs से बनाए रखने के लिए आसान नहीं मिला है

अक्टूबर 2010 में संपादित करने के लिए संपादित करें: चूंकि मैंने यह लिखा था या नहीं, मुझे ऐसे लोगों द्वारा डिज़ाइन किए गए कुछ डेटाबेस के साथ काम करने का अवसर मिला है जो विचारों का उपयोग करने के आदी रहे हैं। इससे भी बदतर वे उन विचारों का इस्तेमाल करते थे जो विचारों को कहते थे, जिन्हें विचारों को कहा जाता था (अंततः हम उन तालिकाओं की संख्या की सीमा को दबाते हैं जिन्हें कहा जा सकता है)। यह एक प्रदर्शन दुःस्वप्न था एक दृश्य में एक साधारण गिनती (*) प्राप्त करने के लिए और डेटा प्राप्त करने में अधिक समय तक 8 मिनट लगे। यदि आप विचारों का उपयोग करते हैं, तो विचारों का उपयोग करने से बहुत सावधान रहें, जो अन्य दृश्यों को कॉल करते हैं। आप एक ऐसी प्रणाली का निर्माण कर रहे होंगे जो शायद उत्पादन पर सामान्य प्रदर्शन भार के तहत काम नहीं करेगा। एसक्यूएल सर्वर में आप केवल इंडेक्स देख सकते हैं जो दूसरे विचारों को कॉल नहीं करते हैं, तो जब आप एक श्रृंखला में विचारों का उपयोग करते हैं तो क्या हो रहा है, यह है कि पूरे दृश्य सेट को प्रत्येक दृश्य के लिए बनाया जाना चाहिए और जब तक आप इसे प्राप्त नहीं करते पिछले एक है कि जहां खंड मापदंड लागू कर रहे हैं। तीनों को देखने के लिए आपको लाखों रिकॉर्ड उत्पन्न करना पड़ सकता है आप एक बार इसी तालिका में शामिल हो सकते हैं जब आपको वाकई केवल एक बार इसमें शामिल होने की आवश्यकता होती है, तो आप अंतिम परिणामों के सेट की आवश्यकता से अधिक कई कॉलम वापस कर सकते हैं।





sql