बहुत खोज के बाद, मैंने आखिरकार एक समाधान ढूंढ लिया है।
मैं ज्यादा लेखक नहीं हूं, इसलिए मैं इसे यथासंभव संक्षिप्त बनाने की पूरी कोशिश करूंगा।
अब तक जहां तक मुझे पता चला, 2 संभावित समाधान हैं:
एसक्यूएल रिले
http://sqlrelay.sourceforge.net/
यह वही करता है जो सवाल पूछा था, और एक गुच्छा अधिक। मैं इस बारे में बहुत अधिक विस्तार से नहीं जानता कि मैं इस बारे में क्या पता कर पाया था, लेकिन यह उल्लेख करूंगा कि यह व्यवहार्य समाधान नहीं था क्योंकि यह पारदर्शी नहीं है। इसका मतलब है कि प्रवाह इस प्रकार है:
PHP -> Queries -> SQL Relay Extension -> SQL Relay -> Externally hosted MySQL
इसलिए इसमें mysql से sql relay तक हमारे सभी कोड को फिर से लिखना शामिल होगा। हमारे मामले में कोई विकल्प नहीं है।
यह सब कहा जा रहा है, अगर कोई एक ताजा बड़े पैमाने पर परियोजना की योजना बना रहा है जिसमें SQL रिले के लिए कई विशेषताओं में से किसी की आवश्यकता होती है, तो यह सुंदर लगता है।
मैसकल प्रॉक्सी
http://forge.mysql.com/wiki/MySQL_Proxy
यह वह समाधान है जिसका हमने उपयोग किया है।
इसे बनाने की कुंजी यह है कि हम जो करना चाहते हैं वह है mysql प्रॉक्सी के लिए LUA स्क्रिप्ट।
यह LUA एक्सटेंशन यहां पाया जा सकता है:
https://github.com/cwarden/mysql-proxy/blob/315ab806bb95b8223f5afd3d238eff2a40af03d8/lib/ro-pooling.lua
बहुत अधिक विस्तार में जाने के बिना, यहां कुछ बुनियादी आँकड़े दिए गए हैं ... ध्यान में रखते हुए, यह कम उपयोग के समय पर परीक्षण किया जाता है:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
6433 38598 572537
Mysql- प्रॉक्सी पर जाने के बाद, और चीजों को व्यवस्थित करने दें:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
32 192 2848
जैसा कि आप स्पष्ट रूप से देख सकते हैं, mysql को TIME_WAIT पोर्ट लगभग कोई भी नहीं गिरा है।
कनेक्शन अब वास्तव में mysql_pconnect / mysqli_connect (... p: hostname ...) का उपयोग किए बिना लगातार हैं ।
वर्थ लुआ लिपि के शीर्ष के पास कुछ विन्यास सेटिंग्स दिखाई देती हैं।
स्थानीय min_idle_connections
तथा
स्थानीय max_idle_connections
ये बहुत आत्म व्याख्यात्मक प्रतीत होते हैं। सिवाय इसके कि: ऐसा प्रतीत होगा कि प्रत्येक उपयोगकर्ता नाम (और पासवर्ड? अछूता ... सबसे अधिक संभावना नहीं है।) संयोजन लगातार कनेक्शन का अपना सेट बनाता है।
तो डेटाबेस से जुड़ने वाले अनन्य mysql उपयोगकर्ताओं की संख्या से max_idle_connections को गुणा करें। और इससे आपको अंदाजा होना चाहिए कि आपके पास कितने निष्क्रिय कनेक्शन होंगे।
इसलिए, मुझे इस छोटे ब्लर्ब के लिए पुनरावृत्ति करने दें जो Google के माध्यम से खोज करने वालों के लिए कुछ कीवर्ड्स को हिट करता है:
PHP का उपयोग करते समय mysql_pconnect के बिना लगातार mysql कनेक्शन रखना संभव है?
हाँ, यह एसक्यूएल रिले के माध्यम से किया जा सकता है, अगर आपको अपने कोड को फिर से बनाने में कोई आपत्ति नहीं है, तो अपने प्रश्नों को उनके विस्तार के लिए पाइप करें या आरओ-पूलिंग.लुआ स्क्रिप्ट के साथ mysql- प्रॉक्सी का उपयोग करें।
हम लगभग एक साल से ऐसा ही कुछ चाहते हैं।
का आनंद लें!
mysql_pconnect
कुछ "क्लीनअप फ़ंक्शंस" के साथ प्रत्येक कनेक्शन का उपयोग और शुरू क्यों न करें ?