2012-03-28 6 views
5

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

+4

क्या आप संग्रहीत प्रक्रिया> किसी अन्य विकल्प> –

+0

संग्रहीत प्रक्रिया से पीछे कोड में हार्ड कोडित क्वेरी (SQL) के साथ तुलना के साथ तुलना कर रहे हैं। –

उत्तर

6

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

http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx

ऊपर के लिंक जब के बारे में वास्तव में अच्छा तर्क का एक बहुत सूचीबद्ध करता है, और जब नहीं, संग्रहित प्रक्रियाओं का उपयोग करने के। उनमें से, विशेष रूप से सी # में, आप आधारभूत रूप से सभी चीजों को अनदेखा करते हैं, जो कि पूछताछ के लिए समझदार यूआई निर्णय लेने की शक्ति के मामले में है ... एक रखरखाव दुःस्वप्न।

+1

कुछ हद तक पुरानी पोस्ट डेटाबेस डिज़ाइन और संकलित कोड आदि में परिवर्तन दिए गए हैं – Lloyd

+0

शायद ही कभी। तब से प्रमुख डेटाबेस में संकलित कोड में कोई बदलाव नहीं है, और कोई भी डेटाबेस डेटाबेस डिजाइन नहीं करता है। – TomTom

+0

@TomTom वह 12 साल पहले से SQL सर्वर था, 2000 से 2008 के आर 2 में बड़े बदलाव हुए हैं, आने वाले 2012 संस्करण का उल्लेख नहीं किया गया है। – mattytommo

4

संग्रहित प्रक्रियाओं का उपयोग करना आम तौर पर हमेशा बेहतर होता है। उनका उपयोग करते समय मुख्य लाभ यह है कि यदि आप कई बार क्वेरी चलाते हैं, तो संग्रहीत प्रक्रिया के साथ यह निष्पादन योजना को पुन: उपयोग के लिए रखेगा।

उन्हें उपयोग करने के लाभों के बहुत सारे हैं, संदर्भ के लिए यहाँ देखें: http://blog.sqlauthority.com/2007/04/13/sql-server-stored-procedures-advantages-and-best-advantage/

संपादित करें: जबकि लेख 2007 से है, कुंजी सिद्धांत होते हैं मोटे तौर पर ही

+0

इस उत्तर में मुख्य शब्द "आम तौर पर" है, मैं इस बात से सहमत नहीं हो सकता कि आम तौर पर संग्रहीत प्रक्रियाओं का उपयोग करने के लिए यह हमेशा बेहतर होता है, मैं सहमत हूं कि आम तौर पर उनका उपयोग करने के लिए बेहतर होता है ... ऐसा लगता है कि मैं यहां एक पेडेंट हूं लेकिन मैं नहीं। महान आलेख लिंक के लिए +1। –

3

इस प्रश्न को बहुत कुछ पूछा जाता है और here विषय पर एक अच्छी पोस्ट है।

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

कई कई संग्रहित प्रोसेस के साथ एक सिस्टम से बचें (मैंने 4k से अधिक संग्रहित प्रोसेस वाले सिस्टम को देखा है और मुझ पर भरोसा है कि आप वहां जाना नहीं चाहते हैं)।

संपादित

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

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

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

आप कितनी बार एक स्पोक देखते हैं जो एक बार कोड पथ नीचे जाता है .. इसकी योजना कैश हो जाती है और फिर परिणामस्वरूप उप-स्थानिक होता है क्योंकि हर बाद के समय में यह पथ नीचे नहीं जाता है ... मेरे पास है बहुत कुछ देखा।

+0

वे धीमे हैं। NHibernate asetc। - वहाट यूओओ के आधार पर और आपका लॉबिक क्या है, ब्लूटूलकिट/लिंक 2 डीबी बहुत तेज़ हो सकता है। – TomTom

+0

लिंक 2 एसक्यूएल! = लिंक 2 डीबी –

1

सर्वोत्तम अभ्यास संग्रहित प्रक्रियाओं का उपयोग करना है।

  1. काम का पृथक्करण।
  2. पुन: प्रयोज्य (सीधे एसक्यूएल से परीक्षण कर सकते हैं)
  3. आप कई उद्देश्यों के लिए एक प्रक्रिया का उपयोग कर सकते हैं यदि आपके सॉफ़्टवेयर में कुछ बदलाव होने पर यह आपके समय को कम कर देगा।
  4. विशेष रूप से डीएलएल में प्रोग्राम में किसी भी कोड को प्रतिस्थापित करने की आवश्यकता नहीं है।
+1

स्वर्ग धन्यवाद SANE te4ams उन लोगों को आग लगती है जो सोचते हैं कि उन 4 सर्वोत्तम प्रथाओं में कोई प्रासंगिकता है। – TomTom

+0

क्षमा करें, लेकिन यह सोच पुरानी है। –

संबंधित मुद्दे