пулы соединений 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-сервере 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), поэтому я сейчас изучаю это.


person codemonkey    schedule 15.03.2012    source источник


Ответы (1)


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

person codemonkey    schedule 30.03.2012