5

나는 다음과 같이 인스턴스에 세 phpcassa 연결 풀을 설정하는 데이터 액세스 클래스를 가지고 : 나는 최근에 약간의 성능을 수행 할 젠드의 PHP 서버에 기능을 추적하는 코드를 사용 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']); 
} 
 

이 클래스에 대한 감사를하고 세 개의 연결 풀 설정이 ~ 100ms를 소비하는 것으로 나타났습니다. 연결 설정은이 클래스의 인스턴스화마다 한 번 또는 두 번만 사용된다는 점에서 연결 설정을 잃어 버리는 데는 많은 시간이 걸린다.

누구나 이러한 연결 풀을 한 번 빌드하고 클래스의 인스턴스화간에 공유 할 수있는 영리한 트릭을 알고 있습니까? 어쩌면 더 진보 된 PHP 개발자가 바로 그 일을 할 수있는 간단한 방법이 있을까요?

는 UPDATE :는 "성공적으로"APC를 사용하여 연결 풀을 캐시 한 후 다음과 같이 읽어 영구 연결에 대한 자세한 내용을 읽고 그 phpcassa의 connection.php 파일 (라인 59 V 0.8.a.2를) 발견 :

 

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

... 음, TSocket에는 세 번째 (옵션) 매개 변수 $ persist가 있으며 기본값은 false입니다. 그러나 phpcassa에서 59 번째 줄을 변경하여 $ true를 true로 설정하면 회귀 테스트가 나에게 지옥으로가는 것입니다. 그들이 실패하는 방식으로 어딘가에 (아마도 카산드라 설정) 몇 가지 "최대 연결"제한을 두는 것처럼 보입니다. 그래서 나는 지금 그것에 대해 조사하고 있습니다.

답변

1

결국 TSocket $ persist 매개 변수가 엉망이되었습니다 ... 대신 phpcassa와 함께 제공되고 apc를 사용하는 절약 라이브러리를 컴파일했습니다 (연결 풀을 명시 적으로 캐시하지 않았지만 apc는 opcode 캐싱입니다 , 등). 이 두 변경 사이에 세 개의 풀에 대한 연결 풀 설정 시간이 한 자리 밀리 초 범위로 떨어졌습니다 ... 이는 다른 병목 현상을 의미합니다.