我已經得到了設置三個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配置)限制了一些「最大連接數」,所以我現在正在研究這個問題。