Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

phpcassa connection pools

I've got a data access class that sets up three phpcassa connection pools on instantiation like this:


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

I recently used the code tracing feature on the zend's php server to do a little performance audit on this class and noticed that the setup of these three connection pools is consuming ~100ms. That's a lot of time to lose to connection setup given that each connection is only used once or twice per instantiation of this class.

Anyone know of any clever tricks that would let me build these connection pools once and have them shared between instantiations of the class? Maybe there's some simple way to do that that will occur right away to more advanced PHP devs?

UPDATE: Was "successfully" caching the connection pools using APC, then read more on persistent connections and discovered that phpcassa's connection.php file (line 59 v 0.8.a.2) reads like this:


$socket = new TSocket($host, $port);

... well, TSocket has a third (optional) parameter $persist that defaults to false. But when I change line 59 in phpcassa to set $persist to true, my regression tests go all to hell on me. The way they fail makes it look like I'm hitting some "max connections" limit somewhere (presumably a cassandra config), so I'm now looking into that.

like image 698
codemonkey Avatar asked Nov 13 '22 08:11

codemonkey


1 Answers

In the end I didn't mess with the TSocket $persist parameter... instead we compiled the thrift library that comes with phpcassa and enabled apc (I didn't explicitly cache the connection pools, but apc is opcode caching, etc). Between those two changes, my connection pool setup times for the three pools dropped into the single-digit millisecond range... which means I'm on to other bottlenecks.

like image 190
codemonkey Avatar answered Nov 16 '22 02:11

codemonkey