2012-06-09 5 views
2

내 응용 프로그램은 최대 25 개의 MySQL 동시 연결로 공유 호스팅 공급자에서 호스팅됩니다. 아래는 DB에 연결하기위한 코드입니다.mysql 연결 디자인 및 동시 연결

function dbConnect() { 
$dbHost = 'localhost'; 
$dbUser = 'user'; 
$dbPass = 'pass'; 
$dbName = 'dbase'; 
    mysql_connect($dbHost, $dbUser, $dbPass)or die(mysql_error()); 
    mysql_select_db($dbName) or die(mysql_error()); 
    } 

내 응용 프로그램은 데이터베이스 쿼리에 더 의존합니다. 홈 페이지에는 적어도 20 개의 mysq_query가 있습니다. 내 홈 페이지를 코딩하는 방법은

include 'config.php'; 
dbConnect(); 

쿼리 1 이하 ... // 여러 쿼리

쿼리 1 ... // 처리 결과 발생 초기 변수

공정 변수를 얻을처럼

QUERY3 ... // 처리 결과

등 최대 ....

query 20 ... // 처리 결과

대부분의 쿼리는 대부분 다른 쿼리의 전제 조건입니다. 매일 적어도 1000 명의 사용자가있을 것으로 예상하고 있으며, 사용자의 50 %가 동일한 시간에 또는 가장 적은 초 간격으로 연결할 가능성이 있습니다.

  1. DB에 연결하면 연결 제한이 쉽게 설정됩니까?
  2. php는 쿼리 직후에 연결을 닫습니까? 즉, 첫 번째 쿼리가 끝난 후 닫히고, 두 번째로 열리고, 다시 닫히고, 바로 다음에 닫힙니다. 연결을 직접 닫지 않아도됩니다.
  3. 위의 시나리오가 20 개의 동시 연결을 자동으로 소비했다는 가정하에 올바른지 확인하십시오.

미리 감사드립니다.

+0

[PDO] (http://php.net/manual/en/book.pdo.php) (즉, 서버에 제공되는 경우)를 사용하십시오. 'mysql_' 함수를 사용하지 마십시오 ('mysqli_' 패밀리가 그보다 약간 더 낫습니다). –

+0

시스템을 통한 모든 요청에 ​​대해 20 개의 쿼리 (적어도)를 수행해야 할 경우 요청자 (사용자)가 캐시 할 수있는 데이터베이스에 저장된 데이터를 가능한 한 세션에 캐시해야합니다. 다행히도 데이터 스키마가 설계되지 않았으므로 그렇게 할 수 없습니다. –

+0

그리고 [연결 풀링] (http://php.net/manual/en/mysqlnd-ms.pooling.php)을 이용할 수 있기를 바랍니다. –

답변

2

2 및 3 번 질문에 대한 답이 있습니다.

  • 당신이
  • mysql_close()를 호출하면의 끝에 도달 : genpet의 원래의 게시물의 :과 (을 가정하면 mysql_pconnect()로 openned되지 않은) 경우 만

    1. PHP는 MySQL의에 대한 연결을 닫습니다 스크립트

  • 따라서 동일한 스크립트에서 20 개의 쿼리를 보내면 하나의 연결 만 사용합니다.

  • 한 가지 생각이 들었습니다. 당신이를 조회해야하는 경우

  • 다시 *_close()
  • 개방/여론 조사에 최대한 빨리 연결을 해제 결과 처리,
  • *_pconnect()와의 연결이 쿼리를 실행

    • 개방/설문 조사 :이 패턴을 고려 나중에 스크립트에서 DB를

    이 방법은, 내가 하나의 낮은 동시 연결 한도 (비록 내가 사람들이 당신의 호스팅 계획을 조언 동의 동의 할 수 있다고 생각합니다. 귀하의 요구를 충족시키기 위해 부적절합니다.)

    이것은 이론이지만, 나는 실제에서 그것을 시도하지 않았습니다.

  • 0

    IMO, 연결 디자인입니다 ("호스팅 계획을 업그레이드") 그것은 나에게 위의 주석으로이 게시하지 않습니다, 그래서 이것은 대답,하지만 내 첫 코멘트의 확장되지 않습니다 안 좋아. "die"는 실패를 예상하는 경우 터미널 기능이며 재시도 옵션과 사용자에게 익숙한 오류 처리 기능을 만듭니다. 또한 DB를 열거 나 닫을 때마다 시간이 많이 걸리므로 하나의 쿼리를 닫고 다시 여는 것보다 세 쿼리를 더 빨리 집어 넣을 수는 있습니다 (하지만 다른 요소에 의해 제안 된 공유 풀에 추가 할 수있는 몇 가지 요인에 따라 달라질 수 있습니다).)하지만 내 충고는 계획을 호스팅하고 "일반적으로"개발하는 업그레이드입니다. 그렇다면 당신의 스타일은 괜찮습니다. "die"보다 우스꽝스러운 오류 화면을 사용하는 것을 제외하면 :-) mysql_ 함수가 아닌 pdo 또는 mysqli를 사용합니다.

    +0

    나는 치아와 고뇌의 눈물이 올 것으로 예상합니다. 그리고 그것은 그 공유 서버에있는 다른 사람들입니다. 386을 가지고 여행 할 예정입니까? 어쩌면 문제가 앞으로 나아지지 않을 수도 있지만, 어떻게 알고 싶습니다. –

    +0

    @ Robbie Thanks. 'die'는 개발 단계에서만 사용되어 쉽게 디버깅 할 수 있습니다. 다시 한번 감사드립니다. – genpet