PHP

2008-09-02 17 views
60

में कनेक्शन पूलिंग क्या पीएचपी का उपयोग करते समय डेटाबेस कनेक्शन को कैश करना संभव है जैसे आप जे 2 ईई कंटेनर में करेंगे? यदि हां, तो कैसे?PHP

+0

इस बारे में कैसे? https://github.com/junamai2000/mod_namy_pool – nam

+0

क्या आपने [mysql_pconnect()] (http://www.php.net/mysql_pconnect) का उपयोग करके लगातार कनेक्ट देखा है? –

उत्तर

0

आप मैन्युअल रूप से कनेक्शन पूल को चालू नहीं कर सकते हैं।

लेकिन आप mysql_pconnect फ़ंक्शन के साथ "अंतर्निहित" कनेक्शन पूलिंग का उपयोग कर सकते हैं।

8

मुझे लगता है कि आप mod_php का उपयोग कर रहे हैं, है ना?

जब एक PHP फ़ाइल निष्पादित करने के समाप्त हो जाती है तो उसकी स्थिति खत्म हो जाती है इसलिए कनेक्शन पूलिंग करने के लिए कोई रास्ता नहीं है (PHP कोड में)। इसके बजाय आपको एक्सटेंशन पर भरोसा करना होगा।

आप mysql_pconnect कर सकते हैं ताकि पृष्ठ समाप्त होने के बाद आपके कनेक्शन बंद नहीं हो जाएंगे, इस तरह वे अगले अनुरोध में पुन: उपयोग किए जाएंगे।

यह सब कुछ हो सकता है जो आपको चाहिए लेकिन यह कनेक्शन पूलिंग जैसा नहीं है क्योंकि खोले बनाए रखने के लिए कनेक्शन की संख्या निर्दिष्ट करने का कोई तरीका नहीं है।

चीयर्स।

+3

क्या कनेक्शन अलग-अलग उपयोगकर्ताओं द्वारा पुन: उपयोग किया जा सकता है? यदि हां, तो मैनुअल कहता है कि हमें बहुत से कनेक्शन से बचने के लिए MySQL को कॉन्फ़िगर करना चाहिए? – omg

43

कोई कनेक्शन पूलिंग PHP में नहीं है।
mysql_pconnect और कनेक्शन पूलिंग दो अलग-अलग चीजें हैं। mysql_pconnect से जुड़ी कई समस्याएं हैं और सबसे पहले आपको मैन्युअल पढ़ना चाहिए और सावधानीपूर्वक इसका उपयोग करना चाहिए, लेकिन यह कनेक्शन पूलिंग नहीं है।

कनेक्शन पूलिंग एक ऐसी तकनीक है जहां एप्लिकेशन सर्वर कनेक्शन प्रबंधित करता है। जब एप्लिकेशन को कनेक्शन की आवश्यकता होती है तो यह इसके लिए एप्लिकेशन सर्वर से पूछता है और यदि कोई मुफ्त है तो एप्लिकेशन सर्वर पूल किए गए कनेक्शन में से एक लौटाता है।

हम चाहते हैं कि कृपया नीचे दिए लिंक के माध्यम से जाने के लिए php में कनेक्शन स्केलिंग कर सकते हैं: http://www.oracle.com/technetwork/articles/dsl/white-php-part1-355135.html

तो php में कोई संबंध नहीं पूलिंग।

जैसा कि जूलियो ने कहा कि अपाचे वर्तमान संसाधनों के लिए अनुरोध समाप्त होने पर सभी संसाधनों को जारी करता है। आप mysql_pconnect का उपयोग कर सकते हैं लेकिन आप उस फ़ंक्शन से सीमित हैं और आपको बहुत सावधान रहना चाहिए। अन्य विकल्प सिंगलटन पैटर्न का उपयोग करना है, लेकिन इनमें से कोई भी पूलिंग नहीं कर रहा है। http://blogs.oracle.com/opal/2007/01/highly_scalable_connection_poo.html

भी पढ़ यह एक http://www.apache2.es/2.2.2/mod/mod_dbd.html

+7

कोई कनेक्शन पूलिंग नहीं है? वाह। – Justin

+0

"स्क्रिप्ट निष्पादन समाप्त होने पर SQL सर्वर से कनेक्शन बंद नहीं होगा।" - http://www.php.net/manual/en/function.mysql-pconnect.php – RandomSeed

+2

ऑरैकल ब्लॉग के लिए वर्किंग लिंक: https://blogs.oracle.com/opal/entry/highly_scalable_connection_poo –

10

लगातार कनेक्शन कनेक्शन पूलिंग की तरह कुछ भी कर रहे हैं:

यह एक अच्छा लेख है। PHP में एक लगातार कनेक्शन का पुन: उपयोग किया जाएगा यदि आप एक ही अनुरोध/स्क्रिप्ट निष्पादन संदर्भ में एकाधिक डीबी कनेक्ट करते हैं। अधिकांश सामान्य वेब देव परिदृश्यों में यदि आप mysql_pconnect का उपयोग करते हैं तो आप अपने कनेक्शन को तेज़ी से अधिकतम कर देंगे क्योंकि आपकी स्क्रिप्ट के आपके अगले अनुरोध पर किसी भी खुले कनेक्शन का संदर्भ प्राप्त करने का कोई तरीका नहीं होगा। PHP में डीबी कनेक्शन का उपयोग करने का सबसे अच्छा तरीका एक डीबी ऑब्जेक्ट का सिंगलटन उदाहरण बनाना है ताकि कनेक्शन को आपकी स्क्रिप्ट निष्पादन के संदर्भ में पुन: उपयोग किया जा सके। यह अभी भी प्रति अनुरोध कम से कम 1 डीबी कनेक्ट करता है, लेकिन यह प्रति reqeust एकाधिक डीबी कनेक्ट करने से बेहतर है।

php की प्रकृति के कारण php में कोई वास्तविक डीबी कनेक्शन पूलिंग नहीं है।पीएचपी एक एप्लीकेशन सर्वर नहीं है जो अनुरोधों के बीच में बैठ सकता है और खुले कनेक्शन के पूल में संदर्भ प्रबंधित कर सकता है, कम से कम किसी भी प्रकार के प्रमुख हैक के बिना। मुझे लगता है कि सिद्धांत में आप php में एक ऐप सर्वर लिख सकते हैं और उसे कमांडलाइन स्क्रिप्ट के रूप में चला सकते हैं जो पृष्ठभूमि में बस बैठेगा और डीबी कनेक्शन का एक गुच्छा खुला रखेगा और उन्हें आपकी अन्य स्क्रिप्ट पर संदर्भ भेजेगा, लेकिन मैं नहीं करता पता है कि अभ्यास में यह संभव होगा, आप अपनी कमांडलाइन स्क्रिप्ट से अन्य स्क्रिप्ट्स के संदर्भों को कैसे पारित करेंगे, और मुझे संदेह है कि यह अच्छा प्रदर्शन करेगा, भले ही आप इसे खींच सकें। वैसे भी ज्यादातर अटकलें हैं। मैंने केवल किसी अन्य लिंक को नोट किया है जो किसी अन्य को अपाचे मॉड्यूल पर पोस्ट किया गया है ताकि प्रीफ़ोर सर्वर जैसे PHP के लिए कनेक्शन पूलिंग की अनुमति मिल सके। दिलचस्प लग रहा है: https://github.com/junamai2000/mod_namy_pool#readme

+3

"कनेक्शन जब स्क्रिप्ट का निष्पादन समाप्त होता है तो SQL सर्वर बंद नहीं होगा। " - http://www.php.net/manual/en/function.mysql-pconnect.php – RandomSeed

+2

यह PHP-FPM और अपाचे/mod_php पर गलत है। –

+0

"php में डीबी कनेक्शन का उपयोग करने का सबसे अच्छा तरीका एक डीबी ऑब्जेक्ट का सिंगलटन उदाहरण बनाना है ताकि कनेक्शन को आपके स्क्रिप्ट निष्पादन के संदर्भ में पुन: उपयोग किया जा सके।" - यह सुनहरा हंस है जिसे मैं ढूंढ रहा हूं। यह समझाने का शानदार तरीका वास्तव में कहां और क्यों सिंगलटन उपयोगी होगा! – samazi

3

आप MySQLi का उपयोग कर सकते हैं।

अधिक जानकारी के लिए, कनेक्शन अनुभाग @http://www.php.net/manual/en/mysqli.quickstart.connections.php#example-1622

ध्यान दें कि कनेक्शन पूलिंग भी अपने सर्वर (अर्थात अपाचे httpd) और इसके विन्यास पर निर्भर है पूलिंग के लिए नीचे स्क्रॉल।

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

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