2010-06-02 7 views
14

मैं पिछले 10 वर्षों से SQL सर्वर बैक सिरों के साथ एएसपीनेट ऐप्स लिख रहा हूं। उस समय, मैंने कुछ PHP ऐप्स भी लिखे हैं, लेकिन बहुत से नहीं।क्या PHP डेवलपर MySQL की संग्रहीत प्रक्रियाओं का उपयोग करना चाहिए?

मैं अपने कुछ एएसपीनेट ऐप्स को PHP पर पोर्ट करने जा रहा हूं और कुछ समस्याएं चला रहा हूं। एएसपीनेट दुनिया में, यह आम तौर पर समझा जाता है कि किसी भी डेटाबेस तक पहुंचने पर, दृश्यों या संग्रहीत प्रक्रियाओं का उपयोग करना ऐसा करने का पसंदीदा तरीका है।

मैं कुछ PHP/MySQL किताबें पढ़ रहा हूं और मुझे लगता है कि MySQL में संग्रहीत प्रक्रियाओं का उपयोग करने की इंप्रेशन सलाह नहीं दी जा रही है। मैं उस शब्द का उपयोग करने में संकोच करता हूं, सलाह देता हूं, लेकिन यह सिर्फ मुझे लगता है।

तो, जो सलाह मैं खोज रहा हूं वह मूल रूप से है, क्या मैं सही हूं या गलत हूं? क्या PHP डेवलपर्स संग्रहीत प्रक्रियाओं का उपयोग करते हैं? या, क्या यह कुछ है जो छोड़ा गया है?

उत्तर

9

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

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

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

लाभ 3: क्लाइंट-साइड से संग्रहित प्रक्रियाएं सार या अलग सर्वर-साइड फ़ंक्शंस। जीयूआई कोड के माध्यम से एक प्रश्न बनाने के बजाय प्रक्रिया को कॉल करने के लिए जीयूआई एप्लिकेशन को कोड करना बहुत आसान है।

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

इस बात को ध्यान में रखते हुए कई नुकसान हैं।

नुकसान 1: व्यापक व्यापार तर्क और प्रसंस्करण शामिल करने वाले अनुप्रयोग सर्वर पर अत्यधिक भार डाल सकते हैं यदि तर्क पूरी तरह से संग्रहीत प्रक्रियाओं में लागू किया गया था। इस प्रकार के प्रसंस्करण के उदाहरणों में डेटा स्थानान्तरण, डेटा ट्रैवर्सल, डेटा ट्रांसफॉर्मेशन और गहन कम्प्यूटेशनल ऑपरेशंस शामिल हैं। आपको इस प्रकार की प्रसंस्करण को व्यावसायिक प्रक्रिया या डेटा एक्सेस लॉजिक घटकों में ले जाना चाहिए, जो आपके डेटाबेस सर्वर से अधिक स्केलेबल संसाधन हैं।

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

नुकसान 3: संग्रहित प्रक्रियाओं को लिखना और बनाए रखना अक्सर एक विशेष कौशल सेट होता है जो सभी डेवलपर्स के पास नहीं होता है। यह स्थिति परियोजना विकास कार्यक्रम में बाधाओं को पेश कर सकती है।

मुझे शायद कुछ फायदे और नुकसान याद आए हैं, टिप्पणी करने के लिए स्वतंत्र महसूस करें।

+0

धन्यवाद रोमैन और आप सभी। तुम्हारी मदद के लिए शुक्रिया। ऐसा लगता है कि मेरे पास कुछ करने की योजना है। –

4

इसलिए भी कि MySQL के संस्करण 5. जब तक संग्रहित प्रक्रियाओं नहीं मिला आप तैयार बयान का उपयोग करते हैं आप ठीक होना चाहिए हो सकता है ... बस इनलाइन एसक्यूएल का उपयोग नहीं करते

0

संग्रहित प्रक्रियाओं कर रहे हैं - अक्सर - प्रयास का एक पूरा अपशिष्ट।

संदेह में, वास्तव में प्रदर्शन को मापते हैं। आप अक्सर पाएंगे कि संग्रहित प्रक्रियाएं पहचानने योग्य लाभ के लिए जटिलता को जोड़ती हैं। आपके एसपी से आपके पास कोई प्रदर्शन वृद्धि नहीं हो सकती है।

कुछ लोगों को लगता है कि वे बहुत "महत्वपूर्ण" हैं। वास्तव में क्विबल या बहस के बजाय प्रदर्शन को मापना आवश्यक है।

3

कुछ साल पहले मैंने एक PHP/MySQL प्रोजेक्ट के लिए संग्रहीत प्रक्रिया कोड की एक उचित राशि (~ 3 के लाइन) लिखना समाप्त कर दिया था। मेरे अनुभव में:

  • MySQL संग्रहीत प्रक्रियाएं शायद आपको प्रदर्शन-वार की मदद करने वाली नहीं हैं।
  • MySQLi के साथ तैयार बयानों के माध्यम से एसपी निष्पादित करना सिरदर्द का कारण बन सकता है।
  • सामान्य पैटर्नों को सारण करना मुश्किल हो सकता है-मैंने खुद को पसंद से ज्यादा खुद को दोहराया।
  • MySQL संस्करण और कॉन्फ़िगरेशन के आधार पर, आपको SPS बनाने के लिए SUPER विशेषाधिकारों की आवश्यकता हो सकती है।

यदि आप संग्रहित प्रक्रियाओं का उपयोग करने वाले कोड को पोर्ट कर रहे हैं, तो उन्हें रखना सबसे आसान हो सकता है। PHP और MySQL के साथ उनका उपयोग करना निश्चित रूप से संभव है, और मैं इसे व्यक्तिगत रूप से अनदेखा पर कॉल नहीं करूँगा। अगर मैं स्क्रैच से एक नया PHP प्रोजेक्ट शुरू कर रहा हूं तो मैं शायद उन्हें फिर से उपयोग नहीं करना चाहूंगा।

0

कई (अधिकांश?) वेबएप इंजेक्शन भेद्यता/आदि की देखभाल करने के लिए डेटाबेस एब्स्ट्रक्शन लेयर का उपयोग करते हैं।

यदि आप अपने ऐप के लिए एक चाहते हैं, तो पीडीओ पर एक नज़र डालें। इसका इस्तेमाल करने के बारे में एक बड़ा ट्यूटोरियल है: http://www.devshed.com/c/a/PHP/Using-PDO-Objects-in-PHP-5/

+0

पीडीओ के साथ पूरी तरह से सच संग्रहित प्रक्रियाएं बहुत अच्छी हैं। –

0

सामान्य तौर पर, मैं बहुत ज्यादा नापसंद संग्रहित प्रक्रियाओं है क्योंकि:

  1. यह व्यापार तर्क है कि वहाँ नहीं होना चाहिए में पर्ची करने के लिए बहुत आसान है।
  2. आपके संग्रहीत प्रक्रियाओं के अपडेट की आवश्यकता वाले एप्लिकेशन को अपडेट सिंक्रनाइज़ करने का दर्द है, खासकर यदि आपको पिछले निर्माण पर वापस जाना है।

किसी भी डेटाबेस मैनिपुलेशन के लिए, मैं एक PHP ओआरएम ढांचे के साथ http://www.doctrine-project.org या एक ढांचे के साथ जाने की सलाह देता हूं जिसमें केकेपीएचपी जैसे ओआरएम शामिल हैं। आपके पास SQL ​​सर्वर और MySQL के बीच अधिक आसानी से स्विच करने में सक्षम होने का एक अतिरिक्त बोनस होगा।

1

एसक्यूएल इंजेक्शन के बारे में क्या? प्रक्रियाएं, आप कहां खंड पर पैरामीटर मंगलाचरण ऐसा करने की अनुमति इंजेक्शन को कम करने के खतरों

0

यहाँ है MySQL में संग्रहित प्रक्रियाओं पर एक संतुलित और सूचित लेख: http://www.linuxjournal.com/article/9652?page=0,0

समय की एक "अपशिष्ट के रूप में हाथ से उन्हें खारिज करने के लिए "या" किसी भी डेटाबेस में "कोई वास्तविक लाभ प्रदान नहीं करना" या "महत्वपूर्ण लाभ प्रदान करना" महत्वपूर्ण आकार के आवेदन बहुत मूर्ख नहीं होंगे।

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