2008-10-13 14 views
16

यदि आप php5 और mysql5 का उपयोग कर रहे हैं, तो क्या तैयार बयानों पर संग्रहीत प्रोसेस का उपयोग करने के लिए पर्याप्त लाभ है? (मैंने कहीं पढ़ा है कि आपको mysql5 संग्रहित प्रो से पर्याप्त प्रदर्शन लाभ नहीं मिल सकता है)तैयार वक्तव्य बनाम संग्रहीत प्रक्रिया

उत्तर

26

वे वास्तव में एक ही चीज़ नहीं हैं - संग्रहित प्रक्रियाओं के साथ, आपका डेटाबेस तर्क डेटाबेस के अंदर रहता है। तैयार बयान मूल रूप से फिर से पार्सिंग प्रश्नों से बचते हैं यदि उन्हें कई बार कहा जाता है - प्रदर्शन लाभ काफी भिन्न हो सकता है।

एक या दूसरे का उपयोग करने का विकल्प वास्तव में आपकी विशिष्ट स्थिति पर निर्भर है। मैं वास्तव में संग्रहीत प्रोसेस का उपयोग नहीं करता क्योंकि मुझे एक ही स्थान पर अपना पूरा तर्क पसंद है।

+2

बिल्कुल। मैंने यह सवाल देखा और मेरे सिर को खरोंच कर दिया। वास्तव में, आपको दोनों की आवश्यकता हो सकती है: संग्रहित प्रक्रियाओं के लिए तैयार कॉल। निजी तौर पर, तैयार करने का उपयोग नहीं करना एक आवेदन मौत की इच्छा है। आपको किसी भी तरह से डेटा को स्वच्छ करने की आवश्यकता है। – willasaywhat

+7

संग्रहित प्रक्रियाएं तैयार कथन का उपयोग कर सकती हैं। चाहे आप संग्रहित प्रक्रियाओं का उपयोग करते हों या नहीं, आपको तैयार बयान का उपयोग करना चाहिए। – OIS

0

PHP से परिचित नहीं है, लेकिन सामान्य संग्रहित प्रक्रियाओं में पहले से ही "संकलित" हैं, इसलिए एक एसक्यूएल कथन पर मामूली तेजी से प्रदर्शन कर सकते हैं।

हालांकि मेरी वरीयता आमतौर पर कोड प्रबंधन/तैनाती और इकाई परीक्षण परिप्रेक्ष्य से एसक्यूएल के साथ रहना है।

2

संग्रहित प्रक्रियाओं का पर्याप्त लाभ यह है कि आपका डेटा उस परत पर लागू होने से पहले एक परत को पार नहीं करता है (इस मामले में यह PHP/MySQL परत होगा)। कुछ प्रश्नों के लिए कई चुनिंदा वक्तव्यों की आवश्यकता हो सकती है, जो कि MySQL के भीतर PHP के माध्यम से धीमा हो जाता है।

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

4

मामले या सार्थक नहीं हो यहाँ उल्लेख करना हो, लेकिन संग्रहित प्रक्रियाओं भी "पोर्टेबल" मामला है कि वे भाषा-नास्तिक हो रहे हैं। आप अपने डेटाबेस पर उसी संग्रहित प्रक्रियाओं को कॉल कर सकते हैं, कहें, जैसे जावा आप PHP के साथ करेंगे। क्योंकि प्रक्रियाओं डेटाबेस में रहते हैं, डेटाबेस के लिए उपयोग के साथ कुछ भी उन्हें ठीक उसी प्रकार क्वेरी कर सकते हैं।

9

संग्रहित प्रक्रियाओं के कुछ लाभ:

  • भाषाओं के बीच पोर्टेबल
  • यकीनन सरलीकृत इंटरफ़ेस और जटिल प्रश्न और विशेष रूप से बहु क्वेरी लेनदेन (परीक्षण!)
  • के लिए कभी कभी निष्पादन लाभ एक उजागर करके तालिकाओं के बजाय इंटरफ़ेस का उपयोग सुरक्षा और अखंडता
को बेहतर बनाने के लिए किया जा सकता है 10

संग्रहित प्रक्रियाओं में से कुछ नुकसान:

  • डेटाबेस में व्यापार तर्क रखता है - डिजाइन, अतिरिक्त जगह पेचीदा के लिए संस्करण नियंत्रण और कुछ स्थितियों में
  • प्रदर्शन घाटे की समस्या निवारण को ट्रैक करने के
  • (परीक्षण!)
  • डेटाबेस के बीच कम पोर्टेबल

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

2

मैं यह कहकर शुरू करूंगा कि मुझे संग्रहित प्रक्रियाओं के विचार पसंद नहीं हैं, बल्कि मैं तैयार कथन मार्ग पर जाना चाहता हूं। इस विशेष मामले में मुझे लगता है कि आप संतरे के साथ सेब की तुलना कर रहे हैं ... वे दोनों अलग-अलग कार्यों को भरने के लिए ...

मैं केवल संग्रहीत प्रक्रिया पर विचार करूंगा यदि एप्लिकेशन केवल 95% डेटाबेस संचालित है तो यह करता है डीबी में कुछ तर्क रखने के लिए समझ में आता है।

22

संग्रहित प्रक्रियाओं व्यावसायिक ग्रेड के लिए समझ में (आईई एंटरप्राइज़-ग्रेड) आवेदन करना जहां:

  1. अपने डेटाबेस इंजीनियर सरल करने के लिए प्रश्नों की सार जटिलता के प्रदर्शन के लिए प्रश्नों
  2. चाहते हैं अनुकूलन करने के लिए अनुमति देने के लिए करना चाहते हैं एपीआई का
  3. आपके तर्क को वितरित करना चाहते हैं, क्योंकि डेटाबेस में जो कुछ होता है वह बौद्धिक संपदा हो सकता है कि आप अन्य पार्टियों को बेनकाब नहीं करना चाहते हैं
  4. अपने तर्क को वितरित करना चाहते हैं, क्योंकि यह वितरण की प्रकृति है एड, एन स्तरीय कंप्यूटिंग
  5. आप आवेदन कोड को संशोधित करने के बिना स्कीमा संशोधित करने के लिए डेटाबेस इंजीनियर या DBA चाहते हो सकता है (संग्रहीत procs, एपीआई प्रदान करने के आधार पर, अमूर्त की एक परत प्रदान करते हैं)

वहाँ अन्य कारण हैं ।

तैयार सत्र एक सत्र के भीतर किए गए कार्यों के लिए बेहतर होते हैं। लेकिन यदि आप एक तैयार कथन बनाने के लिए समय ले रहे हैं, तो आपने संग्रहित प्रक्रिया बनाने के लिए आवश्यक रूप से आवश्यक सब कुछ किया है। अंतर यह है कि संग्रहीत प्रक्रिया कई सत्रों में उपलब्ध है (डेटाबेस में अनुदान के अधीन)।

मुझे क्या पता नहीं लगा सकता है कि यदि आपके पास संग्रहित बनाम तैयार कथन के लिए विकल्प है, तो आप तैयार वक्तव्यों से परेशान क्यों होंगे। अधिकांश एसपी बनाम पीएस चर्चाएं इस बात पर ध्यान केंद्रित करती हैं कि उनके बीच मतभेद क्या हैं, न कि एक बनाम दूसरे का उपयोग क्यों करें। वह हमेशा उबालता प्रतीत होता है "आप जो करने की कोशिश कर रहे हैं उस पर निर्भर करता है।" लेकिन मैंने एक अच्छी तरह से संगठित विवरण नहीं देखा है: यदि आपको आवश्यकता है तो वीएस को एक कथन का उपयोग करने की आवश्यकता है तो एक proc का उपयोग करें ....

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