2015-01-28 3 views
3

새로운 프로그래밍 (특히 PHP 사용)입니다. 나는 간단한 PHP 사이트를 작성합니다. PostgreSQL 데이터베이스도 사용합니다. 다음은 데이터베이스 작업을위한 저의 작은 수업입니다.PHP PostgreSQL 열기/닫기 연결 성능 ​​

class dbWorker { 

    private static $conString = "host=localhost port=5432 dbname=myDB user=postgres password=root"; 

    public static function execute($sql) { 
    $db_conn = pg_connect(self::$conString) or die('Could not connect: ' . pg_last_error()); 
    pg_query($sql) or die('Query error: ' . pg_last_error()); 
    pg_close($db_conn); 
    return; 
    } 

    public static function queryOne($sql) { 
    $allData = self::queryAll($sql); 
    if ($allData) { 
     return $allData[0]; 
    } 
    return null; 
    } 

    public static function queryAll($sql) { 
    $db_conn = pg_connect(self::$conString) or die('Could not connect: ' . pg_last_error()); 
    $qu = pg_query($db_conn, $sql) or die('Query error: ' . pg_last_error()); 


    $retval = []; 
    while ($data = pg_fetch_object($qu)) { 
     $retval[] = $data; 
    } 


    pg_free_result($qu); 
    pg_close($db_conn); 

    if (!empty($retval)) { 
     return $retval; 
    } 

    return null; 
    } 

} 

매우 편리합니다. 그러나이 수업을 페이지 - 페이지 로딩 시간에 10-20 회 사용하면 약 5-6 초가 걸립니다. 그런 다음 다음 줄을 제거했습니다.

pg_free_result($qu); 
    pg_close($db_conn); 

그런 다음 페이지로드 시간은 161 밀리 초가되었습니다.

질문은 -이 프로세스를 더 잘 구성하는 방법입니다.

다음과 같이 작성해야합니까?

dbWorker::open_connection(); 
... 
all my functions calls (like getComments(), getMessages(), getTasksList() ect.) 
... 
dbWorker::close_connection(); 

지금은 초보자이며 간단한 해결책을 찾고 있습니다. (사전에 감사의 말씀을 전합니다.)

+1

예, 한 페이지에서 여러 번 연결을 열고 닫을 필요가 없습니다. 이것이 웹 페이지 인 경우 연결을 명시 적으로 닫는 것에 어떤 값이 있는지 나는 모른다. – halfer

+1

먼저, 한 페이지에 대해 여러 번 데이터베이스 연결을 열고 닫으려고합니까? 성능 문제 만 발생합니다. 둘째, 항상 성능과 확장 성을 높이기 위해 pgBouncer 나 pgPool과 같은 연결 풀을 사용하십시오. –

답변

2

나는 한 번 연결을 만들고 모든 SQL 쿼리를 수행 한 다음 연결을 닫습니다.

영구 연결을 만들지 만 유감스럽게 생각할만한 토론이 있습니다. 동의하는 것이 좋지 않을 수도 있습니다.

+2

지속성은 응용 프로그램이 아니라 연결 풀에서 처리해야합니다. –

+1

그 간단한 경우 영구 연결이 필요하지 않습니다. –