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']); 
} 
 

Недавно я использовал код отслеживания функции на 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), поэтому я сейчас изучаю это.

ответ

1

В конце концов, я не возился с параметром TSace $ persist ... вместо этого мы скомпилировали библиотеку бережливого трафика, которая поставляется с phpcassa и включенным apc (я не использовал явные кэширование пулов соединений, но apc - кэширование кода операции , и т.д). Между этими двумя изменениями время установки пула соединений для трех пулов упало в одноразрядный миллисекундный диапазон ... что означает, что я нахожусь на других узких местах.

Смежные вопросы