कुछ अवलोकन
संग्रहीत प्रक्रियाएं आपको कोड का पुन: उपयोग, और एनकैप्सुलेशन (सॉफ्टवेयर विकास के दो स्तंभ) देती हैं,
केवल यदि आप उनका उपयोग उस संदर्भ में सही ढंग से करते हैं जिसमें उनका उपयोग किया जाना है। फ़ंक्शंस (स्ट्रक्चर्ड प्रोग्रामिंग में) या तरीकों (ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग) के बारे में भी यही दावा किया जा सकता है, और फिर भी, हम 1K फ़ंक्शन और मेगा-गधा ऑब्जेक्ट देखते हैं।
कलाकृतियों आपको उन लाभों को नहीं देती हैं। उन कलाकृतियों का उचित उपयोग है जो उन लाभों को देते हैं।
सुरक्षा (आप किसी व्यक्तिगत संग्रहित खरीद पर अनुमति दे सकते हैं / रद्द कर सकते हैं),
हाँ। यह एक अच्छा बिंदु है और मुख्य कारणों में से एक मुझे संग्रहीत प्रक्रियाएं पसंद हैं। वे आम तौर पर केवल विचारों और उपयोगकर्ता खातों के साथ हासिल की जा सकने वाली बारीक-बारीक पहुंच नियंत्रण प्रदान करते हैं।
आपको SQL इंजेक्शन के हमलों से बचाएं,
यह SPs के लिए विशिष्ट नहीं है क्योंकि आप पैरामीटर किए गए SQL स्टेटमेंट और इनपुट स्क्रबिंग के साथ समान स्तर की सुरक्षा प्राप्त कर सकते हैं। मैं एसपी का उपयोग उन लोगों के अलावा करूंगा, हालांकि, "गहराई में सुरक्षा" के रूप में ।
और गति के साथ भी मदद करें (हालांकि कि डीबीए ने कहा कि SQL सर्वर 2008 से शुरू होता है कि नियमित एसक्यूएल प्रश्नों को भी संकलित किया जाता है यदि वे पर्याप्त बार चलाए जाते हैं)।
यह अत्यधिक डेटाबेस विक्रेता विशिष्ट है, लेकिन सामान्य तौर पर आपका डीबीए सही है। SQL स्टेटमेंट (या तो स्टैटिक या पैराट्राइज्ड) संकलित होते हैं। एसपी मदद करते हैं यदि आप चाहते हैं / डेटा एकत्र करने और गणना करने की आवश्यकता है जो आप सरल एसक्यूएल बयानों के साथ नहीं कर सकते हैं, लेकिन कसकर एसक्यूएल के साथ एकीकृत हैं और ऐप सर्वर पर राउंड-ट्रिप को वारंट नहीं करते हैं।
एक अच्छा उदाहरण एक अस्थायी कर्सर (या कर्सर) में डेटा को क्वेरी कर रहा है जिसमें से एक और एसक्यूएल चलाने के लिए। आप इसे एप्लिकेशन सर्वर में प्रोग्रामेटिक रूप से कर सकते हैं, या आप db में इसे करके कई राउंड-ट्रिप बचा सकते हैं।
हालांकि, यह आदर्श नहीं होना चाहिए। यदि आपके पास उन मामलों में से कई हैं, तो यह खराब डेटाबेस डिज़ाइन का संकेत है (या आप विभागों में नहीं तो-संगत डेटाबेस स्कीमा से डेटा खींच रहे हैं।)
हम चुस्त सॉफ्टवेयर विकास पद्धति का उपयोग कर एक जटिल ऐप विकसित कर रहे हैं।
चपलता सॉफ्टवेयर इंजीनियरिंग प्रक्रियाओं और आवश्यकता प्रबंधन, और प्रौद्योगिकियों के साथ नहीं है।
क्या कोई अच्छे कारणों के बारे में सोच सकता है कि वे संग्रहीत प्रोक्स का उपयोग क्यों नहीं करना चाहेंगे?
गलत प्रश्न
प्रश्न गलत है और यह पूछने के बराबर है कि "क्या कोई अच्छा कारण है जो गोटो का उपयोग नहीं करते हैं"? मैं निकल्ज़ विर्थ के साथ इस विषय पर दीक्जस्त्र की तुलना में अधिक हूं। मैं समझ सकता हूं कि दिज्क्स्ट्रा की भावना कहां से आई है, लेकिन मेरा मानना है कि यह सभी मामलों में 100% लागू है। स्टोर procs और किसी भी तकनीक के साथ भी।
एक उपकरण तब अच्छा होता है जब उसका उपयोग अपने इच्छित उद्देश्य के लिए किया जाता है, और जब वह किसी विशेष कार्य के लिए सबसे अच्छा उपकरण होता है। अन्यथा इसका उपयोग करना इस बात का संकेत नहीं है कि उपकरण गलत है, लेकिन यह है कि क्षेत्ररक्षक को पता नहीं है कि वह क्या कर रहा है।
उचित सवाल यह है कि "किस प्रकार के संग्रहित प्रक्रिया उपयोग पैटर्न से बचा जाना चाहिए।" या, "मुझे किन परिस्थितियों में संग्रहीत प्रक्रियाओं का उपयोग करना चाहिए (या नहीं करना चाहिए") । एक प्रौद्योगिकी का उपयोग नहीं करने के कारणों की तलाश बस उपकरण पर दोष डाल रही है क्योंकि इंजीनियरिंग की जिम्मेदारी को स्क्वायर में रखने का विरोध किया जाता है जहां यह इंजीनियर में है।
दूसरे शब्दों में, यह एक पुलिस-आउट या अज्ञानता का बयान है।
मेरा अनुमान था कि डीबीए उन संग्रहीत प्रोक्स को बनाए नहीं रखना चाहता था, लेकिन इस तरह के डिजाइन निर्णय को सही ठहराने के लिए बहुत अधिक नकारात्मक तरीके हैं।
इसके बाद वे जो कर रहे हैं, वे उनके खराब इंजीनियरिंग निर्णयों के परिणामों को उन उपकरणों पर पेश कर रहे हैं, जिनका वे खराब उपयोग करते थे।
आपके मामले में क्या करना है?
मेरा अनुभव है, जब रोम में, जैसा कि रोमन करते हैं ।
यह लड़ाई मत करो। यदि आपकी कंपनी के लोग खराब स्थिति के रूप में स्टोर प्रॉक्स को लेबल करना चाहते हैं, तो उन्हें जाने दें। हालांकि, सलाह दी जाती है कि यह उनकी इंजीनियरिंग प्रथाओं में एक लाल झंडा हो सकता है।
खराब अभ्यास के रूप में चीजों की विशिष्ट लेबलिंग आमतौर पर अक्षम प्रोग्रामर के टन के साथ संगठनों में की जाती है। कुछ चीजों को ब्लैक-लिस्ट करके, संगठन अपने स्वयं के अक्षमता द्वारा आंतरिक रूप से प्रभावित क्षति को सीमित करने की कोशिश करता है। मैं तुम्हें नहीं गंदगी।
सामान्यीकरण सभी पेंच अप की जननी हैं। यह कहना कि संग्रहीत प्रोक्स (या किसी भी प्रकार की तकनीक) एक बुरा अभ्यास है, यह एक सामान्यीकरण है। अक्षमताओं के लिए सामान्यीकरण कॉप-आउट हैं। अभियंता मूढ़ सामान्यीकरण के साथ काम नहीं करते हैं। वे केस-बाय-केस आधार पर विश्लेषण करते हैं, ट्रेड-ऑफ़ करते हैं और इंजीनियरिंग के फैसलों और समाधानों को हाथ में लिए तथ्यों के अनुसार निष्पादित करते हैं, जिस संदर्भ में वे किसी समस्या को हल करने वाले होते हैं।
अच्छे इंजीनियर ऐसे सामान्य तरीकों से बुरे व्यवहार के रूप में चीजों को लेबल नहीं करते हैं। वे समस्या को देखते हैं, उपयुक्त उपकरण का चयन करते हैं, व्यापार-नापसंद करते हैं। दूसरे शब्दों में, वे इंजीनियरिंग करते हैं।
उनका उपयोग न करने के बारे में मेरी राय
उनमें डेटा एकत्रीकरण (और शायद कुछ परिवर्तनों) से परे जटिल तर्क न रखें। उनमें कुछ डेटा मसाज लॉजिक डालना या उनके साथ कई प्रश्नों के परिणाम को एकत्र करना ठीक है। इसके बारे में बस इतना ही। इससे आगे कुछ भी व्यापार तर्क के रूप में योग्य होगा जो कहीं और निवास करना चाहिए।
SQL इंजेक्शन के खिलाफ रक्षा के अपने एकमात्र तंत्र के रूप में उनका उपयोग न करें। आप उन्हें वहां छोड़ देते हैं अगर कोई चीज उनके साथ खराब हो जाती है , लेकिन उनके सामने रक्षात्मक तर्क की एक निंदा होनी चाहिए - क्लाइंट-साइड वेलिडेशन / स्क्रबिंग, सर्वर-साइड वैलिडेशन / स्क्रबिंग, संभवतः उन प्रकारों में परिवर्तन जो आपके अर्थ में परिवर्तन करते हैं डोमेन मॉडल, और अंत में पैराट्राइज्ड स्टेटमेंट (जो पैराड्राइज्ड एसक्यूएल स्टेटमेंट या पैराट्राइज्ड स्टोर किए गए प्रोक्स हो सकते हैं) के लिए पास हो रहा है।
डेटाबेस को केवल अपने स्टोर प्रोक्स से युक्त जगह न बनाएं। आपके स्टोर के प्रोक्स को उसी तरह से माना जाना चाहिए जैसे आप अपने C # या जावा सोर्स कोड को मानते हैं। यही है, स्रोत आपके स्टोर के टेक्स्ट की परिभाषा को नियंत्रित करता है। प्रैंक को स्टोर करने वाले लोग नियंत्रित स्रोत - बुलक्रैप नहीं हो सकते हैं, वे सिर्फ यह नहीं जानते हैं कि वे किस खूनी नरक के बारे में बात कर रहे हैं।
कैसे / कहाँ उनका उपयोग करने में मेरी राय
आपके एप्लिकेशन को ऐसे डेटा की आवश्यकता होती है, जिन्हें कई प्रश्नों या विचारों से ट्रांसप्लांट या एकत्र किया जाना चाहिए। आप अनुप्रयोग से db में उसे लोड कर सकते हैं। यहाँ आपको एक प्रदर्शन विश्लेषण करना है क्योंकि a) डेटाबेस इंजन अधिक कुशल होते हैं जो ऐप सर्वर को इन कामों को करने में करते हैं, लेकिन b) ऐप सर्वर क्षैतिज रूप से बड़े पैमाने पर (कभी-कभी) आसान होते हैं।
ठीक अनाज पहुंच नियंत्रण। आप नहीं चाहते हैं कि कुछ बेवकूफ आपके कार्ट में चल रहे कार्टेशियन में शामिल हों, लेकिन आप लोगों को मनमाने ढंग से SQL कथनों को निष्पादित करने से मना नहीं कर सकते। एक विशिष्ट समाधान विकास और यूएटी वातावरण में मनमाने ढंग से एसक्यूएल बयान की अनुमति देना है, जबकि उन्हें सिस्ट और उत्पादन वातावरण में मना किया जाता है। कोई भी वक्तव्य जो इसे सिस्ट या प्रोडक्शन के लिए बनाना चाहिए, एक स्टोर प्रक्रिया में जाता है, दोनों डेवलपर्स और dbas द्वारा कोड-समीक्षा की जाती है।
किसी भी एसक्यूएल स्टेटमेंट को चलाने के लिए किसी वैध स्टोर की जरूरत नहीं है , एक अलग यूजरनेम / अकाउंट और कनेक्शन पूल (अत्यधिक निगरानी और हतोत्साहित उपयोग के साथ) के माध्यम से जाता है।
- ओरेकल जैसी प्रणालियों में, आप एलडीएपी तक पहुंच प्राप्त कर सकते हैं, या बाहरी डेटाबेस में सहानुभूति पैदा कर सकते हैं (जैसे कि वीपीएन के माध्यम से किसी व्यवसाय भागीदार के डीबी पर खरीदे गए स्टोर को कॉल करना।) स्पेगेटी कोड करने का आसान तरीका है, लेकिन यह सभी प्रोग्रामिंग प्रतिमानों के लिए सच है, और कभी-कभी। आपके पास विशिष्ट व्यवसाय / पर्यावरण आवश्यकताएं हैं जिनके लिए यह एकमात्र समाधान है। स्टोर प्रॉक्स मदद करता है कि अकेले में एक जगह, डेटा के करीब और ऐप सर्वर पर ट्रैवर्स किए बिना उस घबराहट को एनकैप्सुलेट करें।
चाहे आप इसे db पर स्टोर प्रोक के रूप में चलाएं या आपके ऐप सर्वर पर ट्रेड-ऑफ विश्लेषण पर निर्भर करता है कि आपको एक इंजीनियर के रूप में क्या करना है। दोनों विकल्पों का विश्लेषण किया जाना चाहिए और कुछ प्रकार के विश्लेषण के साथ उचित होना चाहिए। बस एक विकल्प के रूप में दूसरे विकल्प पर "बुरे अभ्यास" के रूप में आरोप लगाते हुए, यह सिर्फ एक लंगड़ा इंजीनियरिंग कॉप-आउट है।
- उन स्थितियों में जहां आप बस अपने ऐप सर्वर को स्केल नहीं कर सकते हैं (.ie नए हार्डवेयर या क्लाउड इंस्टेंस के लिए कोई बजट नहीं है) लेकिन डीबी बैक-एंड पर क्षमता के साथ बहुत अधिक है (यह अधिक विशिष्ट है कि बहुत से लोग मानते हैं) प्रोक्स स्टोर करने के लिए व्यावसायिक तर्क को स्थानांतरित करने के लिए। सुंदर नहीं है और एनीमिक डोमेन मॉडल का नेतृत्व कर सकता है ... लेकिन फिर से ... व्यापार-बंद विश्लेषण, सबसे सॉफ्टवेयर हैक पर चूसना।
क्या यह एक स्थायी समाधान बन जाता है या नहीं, यह उस विशेष क्षण में देखे जाने वाले अवरोधों के लिए विशिष्ट है।
आशा है ये मदद करेगा।