我已经得到了设置三个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']);
}
我最近使用的代码Zend的PHP服务器上跟踪功能做了一点性能对这个类进行审计,并注意到这三个连接池的设置耗时约100ms。考虑到每个连接仅在该类的每个实例化中使用一次或两次,那么失去连接设置的时间很长。
任何人都知道任何聪明的技巧,让我建立这些连接池一次,让他们在类的实例之间共享?也许有一些简单的方法可以做到这一点,即将发生的更高级的PHP开发人员?
UPDATE:是“成功”利用高速缓存的APC连接池,然后阅读更多的持久连接,发现phpcassa的connection.php文件(行59 v 0.8.a.2)读这样的:
$socket = new TSocket($host, $port);
......好吧,TSocket有第三个(可选)参数$ persist,默认为false。但是,当我在phpcassa中更改第59行以将$ persist设置为true时,我的回归测试对我来说全然不知所措。它们失败的方式使得它看起来像在我的某个地方(可能是cassandra配置)限制了一些“最大连接数”,所以我现在正在研究这个问题。