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