У меня есть класс доступа к данным, который устанавливает три пула соединений 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']);
}
Недавно я использовал функцию трассировки кода на php-сервере Zend, чтобы провести небольшой аудит производительности этого класса, и заметил, что настройка этих трех пулов соединений занимает ~100 мс. На настройку соединения уходит много времени, учитывая, что каждое соединение используется только один или два раза для каждого экземпляра этого класса.
Кто-нибудь знает какие-нибудь хитрые приемы, которые позволили бы мне создать эти пулы соединений один раз и разделить их между экземплярами класса? Может быть, есть какой-то простой способ сделать это, который сразу придет в голову более продвинутым PHP-разработчикам?
ОБНОВЛЕНИЕ: «успешно» кэшировал пулы соединений с помощью APC, затем прочитал больше о постоянных соединениях и обнаружил, что файл connection.php phpcassa (строка 59 v 0.8.a.2) выглядит следующим образом:
$socket = new TSocket($host, $port);
... ну, у TSocket есть третий (необязательный) параметр $persist, который по умолчанию равен false. Но когда я изменяю строку 59 в phpcassa, чтобы установить для $persist значение true, мои регрессионные тесты летят к черту. То, как они терпят неудачу, выглядит так, будто я где-то достиг предела «максимальных подключений» (предположительно, конфигурации cassandra), поэтому я сейчас изучаю это.