2012-03-15 22 views
5

मैं एक डेटा का उपयोग वर्ग है कि इस तरह इन्स्टेन्शियशन पर तीन phpcassa कनेक्शन पूल सेट मिल गया है:phpcassa कनेक्शन पूल

 

try { 
    $this->cache = new ConnectionPool(
    BSCACHE_KEYSPACE, 
    explode(',', BSCACHE_SERVERS), 
    null, null, null, null, null, 
    array(
     'username' => BSCACHE_USERNAME, 
     'password' => BSCACHE_PASSWORD 
    ) 
); 
    $this->indexCache = new ConnectionPool(
    INDEXCACHE_KEYSPACE, 
    explode(',', INDEXCACHE_SERVERS), 
    null, null, null, null, null, 
    array(
     'username' => INDEXCACHE_USERNAME, 
     'password' => INDEXCACHE_PASSWORD 
    ) 
); 

    $this->metaCache = new ConnectionPool(
    METACACHE_KEYSPACE, 
    explode(',', METACACHE_SERVERS), 
    null, null, null, null, null, 
    array(
     'username' => METACACHE_USERNAME, 
     'password' => METACACHE_PASSWORD 
    ) 
); 
} catch (Exception $e) { 
    return array($this->error['connection']); 
} 
 

मैं हाल ही में एक छोटे से प्रदर्शन करने के लिए कोड Zend के php सर्वर पर सुविधा का पता लगाने के लिए इस्तेमाल किया इस वर्ग पर लेखापरीक्षा और ध्यान दिया कि इन तीन कनेक्शन पूलों का सेटअप ~ 100ms का उपभोग कर रहा है। यह कनेक्शन सेटअप को खोने के लिए बहुत समय है कि प्रत्येक कनेक्शन का उपयोग केवल इस वर्ग के प्रति तत्कालता के लिए एक या दो बार किया जाता है।

किसी को भी किसी भी चालाक चाल के बारे में पता है जो मुझे एक बार इन कनेक्शन पूल बनाने और कक्षा के तत्काल के बीच साझा करने देगा? हो सकता है कि ऐसा करने के लिए कुछ आसान तरीका है जो तुरंत अधिक उन्नत PHP devs के लिए होगा?

अद्यतन: था "सफलतापूर्वक" एपीसी का उपयोग कर कनेक्शन पूल कैशिंग, तो लगातार कनेक्शन के बारे में अधिक पढ़ सकते हैं और है कि phpcassa के connection.php फ़ाइल (लाइन 59 वी 0.8.a.2) की खोज की इस तरह पढ़ता है:

 

$socket = new TSocket($host, $port); 
 

... ठीक है, टीएसकेट में एक तिहाई (वैकल्पिक) पैरामीटर $ है जो कि झूठ के लिए डिफ़ॉल्ट है। लेकिन जब मैं $ 5 को phpcassa में बदलता हूं, तो यह सुनिश्चित करने के लिए कि मेरा सच्चाई लगातार चल रहा है, मेरे प्रतिगमन परीक्षण मुझ पर नरक में जाते हैं। जिस तरह से वे असफल होते हैं, ऐसा लगता है कि मैं कहीं "अधिकतम कनेक्शन" सीमा को मार रहा हूं (संभवतः एक कैसंड्रा कॉन्फ़िगरेशन), इसलिए अब मैं इसे देख रहा हूं।

उत्तर

1

अंत में मैंने TSocket $ persist पैरामीटर के साथ गड़बड़ नहीं की ... इसके बजाय हमने phpcassa और सक्षम एपीसी के साथ आने वाली थ्रिफ्ट लाइब्रेरी संकलित की (मैंने कनेक्शन पूल को स्पष्ट रूप से कैश नहीं किया था, लेकिन एपीसी ओपोड कैशिंग है , आदि)। उन दो परिवर्तनों के बीच, तीन पूल के लिए मेरा कनेक्शन पूल सेटअप समय सिंगल-डिजिट मिलीसेकंड रेंज में गिरा दिया गया ... जिसका अर्थ है कि मैं अन्य बाधाओं पर हूं।

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