2012-03-19 12 views
12

मैंने इसके बारे में कई प्रश्न पढ़े हैं, लेकिन मुझे डर है कि वे पुराने हो सकते हैं क्योंकि पीडीओ पुस्तकालयों के नए संस्करण जारी किए गए हैं क्योंकि इन सवालों के जवाब दिए गए थे।पीडीओ लाइब्रेरी देशी MySQL फ़ंक्शन से तेज है?

मैंने एक MySQL क्लास लिखा है जो क्वेरी बनाता है और पैरामीटर से बचता है, और उसके बाद क्वेरी के आधार पर परिणाम देता है। वर्तमान में यह कक्षा अंतर्निहित mysql फ़ंक्शंस का उपयोग कर रही है।

मैं पीडीओ लाइब्रेरी का उपयोग करने के फायदों से अच्छी तरह से अवगत हूं, उदा। यह अन्य डेटाबेस के साथ संगत है, संग्रहीत प्रक्रियाओं को निष्पादित करना आसान है आदि ... हालांकि, मैं जो जानना चाहता हूं वह बस है; पीएसओ लाइब्रेरी का उपयोग तेजी से mysql अंतर्निहित कार्यों का उपयोग कर रहा है?

मैंने अभी एमएसएसक्यूएल के लिए समकक्ष वर्ग लिखा है, इसलिए सभी डेटाबेस के साथ काम करने के लिए इसे फिर से लिखना मुझे बिल्कुल लंबा नहीं लगेगा। क्या यह इसके लायक है या पीडीओ लाइब्रेरी धीमी है?

+1

यह दिलचस्प सवाल है ... मैं हमेशा एक चीज़ के कारण पीडीओ का उपयोग कर रहा था ... संग्रहीत प्रक्रियाओं ... मैंने गति के लिए जांच नहीं की है ... लेकिन संग्रहित प्रक्रियाएं मेरे लिए पर्याप्त हैं: पी। संग्रहीत प्रक्रियाएं हमेशा वेब अनुप्रयोगों की सुरक्षा में वृद्धि करती हैं, क्योंकि यदि आप उनका उपयोग करते हैं, तो "मैं भूल गया" mysql_real_escape_string() 'कॉल ":) के लिए कोई जगह नहीं है। – xfix

+2

यदि आप पीडीओ के _many_ अन्य फायदों से अवगत हैं, लेकिन केवल गति के बारे में चिंतित हैं, तो क्यों न केवल इसे बेंचमार्क करें और पता लगाएं कि यह आपकी आवश्यकताओं को पूरा करता है या नहीं? पीडीओ इतने सारे तरीकों से बेहतर है, भले ही यह थोड़ा धीमा हो, फिर भी इसका लाभ है। –

+4

पीडीओ 'mysql' कार्यों की तुलना में मामूली धीमी है। हालांकि, 'mysql' एक्सटेंशन में क्या तैयार कथन नहीं है। इसलिए, यदि आपके पास लंबी प्रविष्टि है, तो पीडीओ का उपयोग तैयार बयानों के माध्यम से बहुत तेज़ होगा क्योंकि आप पहले से ही पार्स किए गए क्वेरी पर पैरामीटर भेज देंगे। हालांकि, गति ** ** ** निर्णायक कारक नहीं होना चाहिए। आपको 'mysql' फ़ंक्शंस के बजाय पीडीओ का उपयोग करना चाहिए। इसके अलावा, पीडीओ के साथ कोड करना बहुत आसान है और यह 1 लाइन में सामान करना बहुत अच्छा है जो आप 5 -10 लाइनों में 'mysql' सामान के साथ करेंगे। –

उत्तर

11

मुझे पीडीओ कई स्थितियों/परियोजनाओं में अधिक देशी मॉड्यूल की तुलना में तेज़ होने के लिए मिला।
मुख्य रूप से क्योंकि "पीडीओ-एप्लिकेशन" में कई पैटर्न/बिल्डिंग ब्लॉक की आवश्यकता कम PHP स्क्रिप्ट संचालित कोड की आवश्यकता होती है और संकलित एक्सटेंशन में अधिक कोड निष्पादित किया जाता है और स्क्रिप्ट में चीजें करते समय एक गति दंड है। डेटा, त्रुटि प्रबंधन के बिना सरल, सिंथेटिक परीक्षण अक्सर इस भाग को कवर नहीं करते हैं, यही कारण है कि (अन्य समस्याओं के साथ जैसे त्रुटियों को मापना) मुझे लगता है कि "10000x SELECT x Foo foo ने 10ms अधिक समय लिया" निष्कर्ष इस बिंदु से अधिक बार गायब हैं।
मैं आपको ठोस मानक प्रदान नहीं कर सकता हूं और नतीजा इस बात पर निर्भर करता है कि आसपास के एप्लिकेशन डेटा को कैसे संभालते हैं लेकिन यहां तक ​​कि सिंथेटिक परीक्षण आमतौर पर अंतर को इतना नगण्य दिखाते हैं कि आप अपने प्रश्नों को अनुकूलित करने के लिए बेहतर समय बिताते हैं, MySQL सर्वर, नेटवर्क , ... पीडीओ के कच्चे प्रदर्शन के बारे में चिंता करने की बजाय। अकेले सुरक्षा और त्रुटि प्रबंधन ...

+0

आपके उत्तर के लिए धन्यवाद, ऐसा लगता है कि मैं वास्तव में क्या देख रहा हूं। मुझे वास्तव में 10ms के अंतर से परेशान नहीं किया जाता है, कोई भी मानव इसे नोटिस नहीं करेगा, जब तक कि यह काफी धीमा न हो, जो ऐसा नहीं लगता है। –

+2

भले ही पीडीओ 'mysql_xxxx' फ़ंक्शंस के विरुद्ध समान या थोड़ा धीमा हो, पीडीओ का उपयोग करने का लाभ "विरासत" विकल्प से अधिक है, आईएमओ –

+1

@ बेनकेरी, यदि आप पीडीओ बेंचमार्क करना चाहते हैं, तो आपको याद रखना होगा कि तैयार वक्तव्यों का उपयोग करते समय, आपको याद रखना होगा वास्तव में सिर्फ प्रश्न नहीं बुला रहे हैं बल्कि इंजेक्शन को भी रोक रहे हैं। –

1

मेरा अवलोकन यह है कि पीडीओ लगातार कई कनेक्शनों से कम सहनशील प्रतीत होता है - यह एक लूप में कनेक्शन बन रहा है। मुझे पता है कि यह बुरा स्थान है यह पहली जगह है। जब मैं mysql_ का उपयोग कर रहा था * मेरे looped प्रश्न उचित रूप से तेज़ लग रहा था। हालांकि जब मैंने पीडीओ में स्विच किया तो मैंने इन प्रकार के प्रश्नों के लिए प्रतिक्रिया समय बहुत अधिक देखा।

टीएल; डीआर; - यदि आप पीडीओ पर स्विच करते हैं और आप PHP लूप में क्वेरी कॉल करते हैं तो आपको लगातार कई प्रश्नों के बजाय एक एकल क्वेरी को कॉल करने के लिए एप्लिकेशन को फिर से लिखना पड़ सकता है।

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