2013-01-09 3 views
1

PDO의 연결 풀링이 어떻게 작동하는지 전혀 모르겠다. 나는 아무 데나 검색을하고있다.AJAX로 PDO 연결 풀링

첫째, 명확성을 위해 PDO의 연결 풀링이 자동으로 수행됩니까?

그렇지 않은 경우 어떻게 AJAX 페이지에서 활용할 수 있습니까?

저는 로컬 wampserver dev에서 mysqli를 통해 10ms 당 mysqli를 통해 데이터베이스 연결을 설정하는데 시간이 많이 걸렸습니다. 가능한 한 0에 가까운 대기 시간을 사용하려고합니다. 이것은 나의 마지막 문제 중 하나입니다.

+0

또한, 데이터베이스 연결 풀,하지 PDO를 관리합니다. –

+1

지속적인 연결에 대해 이야기하는 경우 여기를보십시오. http://php.net/manual/en/pdo.connections.php –

+0

@TomaszKowalczyk 설명해 주시겠습니까? mysqli가 연결 풀링을 사용하지 않는다는 것인가? –

답변

2

당신이 영구 연결에 대해 이야기하는 경우는 이쪽을 봐 : http://php.net/manual/en/pdo.connections.php

영구 연결이 다른 AJAX 요청을 열린 상태로합니까?

예 및 재사용하지 않을 위험이 있습니다. @carefulnow에 감사드립니다. 나는 여기에 자신의 의견을 인용합니다 :

영구 연결 및 연결 풀링 같은 일 연결 풀링은 연결을 많이 시작하는 만든 다음 응용 프로그램이 바로 그 이미 설립 연결 중 하나를 잡고 수 없습니다. 영구 연결은 새 연결을 설정하지만 명시 적으로 지시하지 않으면 닫히지 않습니다 (정상 연결은 스크립트의 끝에서 닫힙니다). 영구 연결은 대부분의 데이터베이스가 최대 연결 수를 구현하기 때문에 신중하게 사용하지 않으면 위험합니다. 적중하면 연결이 더 이상 거부됩니다. 대부분의 경우, 정상적인 연결 (단지 DSN과 로그인 세부 사항을 가진 PDO 생성자를 호출하는 것)이 좋을 것입니다.

PHP 코드와 결과 연결 수를 MariaDB 콘솔 모니터에 표시하여 설명하겠습니다. 다음 스크린 샷을보고 오른쪽 하단의 "실행 횟수"에주의하십시오. 영구 연결을 사용할 때 연결이 닫히지 않고 대신 절전 모드로 전환됩니다. 연결 # 231을 무시하십시오, 그것은 콘솔 모니터입니다. http://i.imgur.com/IL42tjF.png, http://i.imgur.com/aDvl7F7.png, http://i.imgur.com/IuFEEvO.png. 보시다시피, 시간 열은 연결된 시간의 길이가 아닌 비활성 시간을 나타냅니다. 따라서 SHOW PROCESSLIST;를 방금 실행했기 때문에 콘솔 모니터의 시간은 항상 0입니다. 이 모든 것이 조금이라도 없어지기를 바랍니다. 데이터베이스 연결 관리는 때로는 매우 까다 롭습니다.

스크린 샷을 보면 궁금한 점이 있습니다. 이러한 영구 연결을 다시 수집하는 방법입니다. StackOverflow에 대한 몇 가지 대답은 스레드 수준에서 캐시된다는 것입니다. 따라서 많은 연결을 얻는 것보다 하나 이상의 스레드 (예상되는)가있는 경우. 이것은 mysql의 연결 제한에 부딪 힐 위험이있다. 지속적인 연결을 사용하기 전에 어떻게 작동하는지 이해해야합니다. (모르지만 @carefulnow-))

영구 연결을 만료되도록 설정할 수 있습니까?

PHP doc에 따르면 캐시 된 것이므로 시간이 지나면 정리됩니다.

More on the php doc

+0

지속적인 연결 및 연결 풀링 ** ** – carefulnow1

+0

@ carefulnow 코멘트 주셔서 감사합니다. 그 차이점은 무엇입니까? –

+0

연결 풀링은 많은 연결을 만들어 내고 응용 프로그램은 이미 설정된 연결 중 하나를 잡습니다. 영구 연결은 새 연결을 설정하지만 명시 적으로 지시하지 않으면 닫히지 않습니다 (정상 연결은 스크립트의 끝에서 닫힙니다). 영구 연결은 대부분의 데이터베이스가 최대 연결 수를 구현하기 때문에 신중하게 사용하지 않으면 위험합니다. 적중하면 연결이 더 이상 거부됩니다. 대부분의 경우, 정상적인 연결 (단지 DSN과 로그인 세부 사항을 가진 PDO 생성자를 호출하는 것)이 좋을 것입니다. – carefulnow1

3
다음 볼 수 @fabian에 의해 주어진 동일한 link에서도

:

<?php 
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
    PDO::ATTR_PERSISTENT => true 
)); 
?> 

Note: If you wish to use persistent connections, you must set PDO::ATTR_PERSISTENT in the array of driver options passed to the PDO constructor. If setting this attribute with PDO::setAttribute() after instantiation of the object, the driver will not use persistent connections.