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