Mam klasę dostępu do danych, które określa się trzy pula połączeń phpcassa na konkretyzacji tak:phpcassa pula połączeń
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']);
}
Niedawno używane kod śledzenia funkcji na serwerze php Zend, aby zrobić trochę wydajność audyt na tej klasie i zauważył, że konfiguracja tych trzech pul połączeń trwa ~ 100 ms. To dużo czasu na utratę konfiguracji połączenia, ponieważ każde połączenie jest używane tylko raz lub dwa razy na wystąpienie tej klasy.
Ktoś wie o jakichś sprytnych sztuczkach, które pozwoliłyby mi raz zbudować te pule połączeń i udostępnić je pomiędzy instancjami klasy? Może jest jakiś prosty sposób, aby to zrobić od razu do bardziej zaawansowanych twórców PHP?
UPDATE: była "sukcesem" buforowanie pula połączeń przy użyciu APC, a następnie dowiedzieć się więcej na trwałych połączeń i odkrył plik connection.php tego phpcassa'S (linia 59 v 0.8.a.2) brzmi tak:
$socket = new TSocket($host, $port);
... cóż, TSocket ma trzeci (opcjonalny) parametr $ persist, który domyślnie przyjmuje wartość false. Ale kiedy zmieniam linię 59 w phpcassa, aby ustawić $ persist na true, moje testy regresji idą do mnie piekło. Sposób, w jaki zawodzą, sprawia, że wygląda na to, że gdzieś trafiam w limit "maks. Połączeń" (prawdopodobnie konfiguracja Kasandra), więc teraz się nad tym zastanawiam.