2014-07-23 8 views
5

मैंने पढ़ा है कि mysqli ने कनेक्शन पूलिंग शुरू की जो mysql में उपलब्ध नहीं था। http://php.net/manual/en/mysqli.quickstart.connections.phpकनेक्शन पूलिंग बनाम लगातार कनेक्शन mysqli

मैंने this question पढ़ा है जो कनेक्शन पूलिंग और लगातार कनेक्शन के बीच अंतर बताता है।

mysqli documentation for Persistent connection में वे लिखा है कि:

मेजबान, उपयोगकर्ता नाम, पासवर्ड, सॉकेट, बंदरगाह और डिफ़ॉल्ट डेटाबेस की दी गई संयोजन के लिए एक अप्रयुक्त लगातार कनेक्शन कनेक्शन पूल में नहीं पाया जा सकता है, तो , तो mysqli एक नया कनेक्शन खोलता है।

तो, क्या mysqli लगातार कनेक्शन के लिए कनेक्शन पूलिंग का उपयोग करता है?

यदि हां, तो कनेक्शन पूलिंग और mysqli में लगातार कनेक्शन के बीच क्या अंतर है?

यदि नहीं, तो mysqli लगातार कनेक्शन के लिए कनेक्शन ऑब्जेक्ट के लिए लुकअप कैसे करता है?

उत्तर

1

libmysql18 में, यह किसी भी मौजूदा डिफ़ॉल्ट mysql sock/port की तलाश करता है और इसे प्रमाण-पत्रों के साथ परीक्षण करता है। यदि यह नहीं पाया जा सकता है, तो C++ फ़ंक्शन clone() कहा जाता है, नया कनेक्शन ऑब्जेक्ट (संसाधन) बनाते हैं। कुछ मामलों में इसका परिणाम एक ढेर ओवरफ्लो हो सकता है। मैं इस बात से परिचित नहीं हूं कि यह mysqlnd (मूल चालक) में कैसे काम करता है। शायद कोई और है। यदि आप यह कैसे काम करते हैं, इसके बारे में अधिक जानकारी चाहते हैं, तो फेसबुक के संस्करण HHVM-debug पैकेज स्थापित करें और कई नेस्टेड फ़ंक्शंस में वैश्विक के माध्यम से कनेक्शन पास करने का प्रयास करें। यह एचएचवीएम के तहत एक स्टैक ओवरफ़्लो ट्रिगर कर सकता है, जो आपको उस बिंदु तक अपवाद से पहले बुलाए गए प्रत्येक फ़ंक्शन को दिखाएगा।

+0

पुनः के लिए धन्यवाद। मैं हैक के लिए mysqli और php नहीं ढूंढ रहा हूं। – Dhruv

+0

@Druru हाँ, मुझे पता है। mysql से कनेक्ट करने के लिए दो अलग-अलग ड्राइवर php उपयोग हैं। एक mysqlnd है, दूसरा libmysql है। आप जिस ड्राइवर का उपयोग कर रहे हैं वह आपके ओएस और आपकी स्थापना पर निर्भर करता है। मैंने आपके प्रश्न का उत्तर दिया कि यह कनेक्शन ऑब्जेक्ट्स के लिए लुकअप कैसे करता है। – r3wt

2

असल शर्तों कनेक्शन और लगातार कनेक्शन पूलिंग mysqli PHP में के मामले में एक ही बात को देखें।

लगातार कनेक्शन इस मामले में जो खुला रहता है के बाद स्क्रिप्ट, निष्पादन पूरा होने कुछ बाद में फांसी में फिर से इस्तेमाल किया जा रहा MySQL कनेक्शन PHP स्क्रिप्ट से खुला को दर्शाता है।

कनेक्शन पूलिंग का मतलब पीएचपी द्वारा बनाए रखा लगातार कनेक्शन का एक पूल है कि वहाँ। इस पूल से एक निष्क्रिय कनेक्शन PHP स्क्रिप्ट को दिया जाता है जो MySQL से कनेक्ट करना चाहता है और स्क्रिप्ट समाप्त होने पर पूल में लौटाया जाता है।

आपको आश्चर्य हो सकता है कि हमें MySQL कनेक्शन के पूल की आवश्यकता क्यों है, हम सभी स्क्रिप्ट के लिए केवल एक लगातार कनेक्शन का उपयोग क्यों नहीं करते?

  • पीएचपी host/port/username/password इस्तेमाल किया आधार पर MySQL कनेक्शन की एक पूल बनाता है:

    इसके दो कारण हैं।एक स्क्रिप्ट कुछ host/port/username/password संयोजन के साथ MySQL से कनेक्ट करना चाहता है, पीएचपी निष्क्रिय लगातार कनेक्शन जो मान इसी की खोज करता है। यदि यह नहीं मिला है, तो इस host/port/username/password संयोजन के साथ एक नया लगातार कनेक्शन बनाया गया है। इसलिए हमें कम से कम कई अलग-अलग कनेक्शन की आवश्यकता है क्योंकि सभी स्क्रिप्ट द्वारा उपयोग किए जाने वाले host/port/username/password मान हैं।

  • आप एक ही समय में एक MySQL कनेक्शन पर दो एसक्यूएल आदेश पर अमल नहीं कर सकते। ऐसा तब हो सकता है जब दो PHP स्क्रिप्ट एक साथ निष्पादित हो रहे हों। जब दो स्क्रिप्ट एक ही समय में MySQL के साथ संवाद करना चाहते हैं, तो दो लगातार MySQL कनेक्शन बनाए जाते हैं। पूल में लगातार कनेक्शन की संख्या अधिकतम समानांतर PHP स्क्रिप्ट निष्पादित, या ऊपरी सीमा php.ini में सेट करने के लिए बराबर के अंतिम संख्या के बराबर है।

महत्वपूर्ण सूचना:

MySQL कनेक्शन पूल (और किसी भी अन्य कनेक्शन पूल) केवल मौजूद यदि पीएचपी एक वेब सर्वर प्लगइन के रूप में क्रियान्वित किया जाता है कर सकते हैं। पूल काम नहीं करते हैं जब यह फास्ट-सीजीआई मोड में काम कर रहा है या किसी अन्य तरीके से जब PHP निष्पादन योग्य स्क्रिप्ट निष्पादन के बाद समाप्त हो जाता है।

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

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