PHP의 연결 풀링
J2EE 컨테이너에서와 같이 PHP를 사용할 때 데이터베이스 연결을 캐시 할 수 있습니까? 그렇다면 어떻게?
PHP 에는 연결 풀링 이 없습니다 .
mysql_pconnect 와 연결 풀링 은 서로 다른 두 가지입니다. 관련하여 많은 문제가 mysql_pconnect
있으며 먼저 매뉴얼을 읽고주의 깊게 사용해야하지만 이것은 연결 풀링이 아닙니다.
연결 풀링은 애플리케이션 서버가 연결을 관리하는 기술입니다. 응용 프로그램에 연결이 필요한 경우 응용 프로그램 서버에 연결을 요청하고 사용 가능한 연결이 하나 있으면 응용 프로그램 서버는 풀링 된 연결 중 하나를 반환합니다.
다음 링크를 통해 PHP에서 연결 확장을 수행 할 수 있습니다. http://www.oracle.com/technetwork/articles/dsl/white-php-part1-355135.html
따라서 PHP에서 연결 풀링이 없습니다.
Julio가 말했듯이 apache는 현재 요청에 대한 요청이 끝나면 모든 리소스를 해제합니다. mysql_pconnect를 사용할 수 있지만 해당 기능에 제한이 있으므로 매우주의해야합니다. 다른 선택은 싱글 톤 패턴을 사용하는 것이지만이 중 어느 것도 풀링이 아닙니다.
이것은 좋은 기사입니다 : https://blogs.oracle.com/opal/highly-scalable-connection-pooling-in-php
http://www.apache2.es/2.2.2/mod/mod_dbd.html 도 읽으십시오 .
영구 연결은 연결 풀링과 다릅니다. PHP의 영구 연결은 동일한 요청 / 스크립트 실행 컨텍스트 내에서 여러 db 연결을 만드는 경우에만 재사용됩니다. 대부분의 일반적인 웹 개발 시나리오에서 mysql_pconnect를 사용하면 스크립트가 다음 요청에서 열린 연결에 대한 참조를 가져올 방법이 없기 때문에 연결을 더 빠르게 최대화 할 수 있습니다. PHP에서 db 연결을 사용하는 가장 좋은 방법은 스크립트 실행 컨텍스트 내에서 연결이 재사용되도록 db 개체의 단일 인스턴스를 만드는 것입니다. 이것은 여전히 요청 당 적어도 1 db 연결을 발생하지만 요청 당 여러 db 연결을 만드는 것보다 낫습니다.
PHP의 특성으로 인해 PHP에는 실제 DB 연결 풀링이 없습니다. Php는 적어도 일종의 주요 해킹 없이는 요청 사이에 배치하고 열린 연결 풀에 대한 참조를 관리 할 수있는 애플리케이션 서버가 아닙니다. 이론적으로는 PHP로 앱 서버를 작성하고 백그라운드에 앉아서 DB 연결을 열어두고 다른 스크립트에 대한 참조를 전달하는 명령 줄 스크립트로 실행할 수 있다고 생각하지만, 그렇지 않습니다. 그것이 실제로 가능한지, 명령 줄 스크립트의 참조를 다른 스크립트로 전달하는 방법을 알고 있습니다. 그리고 나는 당신이 그것을 풀 수 있다고하더라도 그것이 잘 수행 될 것 같지 않습니다. 어쨌든 그것은 대부분 추측입니다. 나는 PHP와 같은 prefork 서버에 대한 연결 풀링을 허용하기 위해 다른 누군가가 apache 모듈에 게시 한 링크를 확인했습니다.https://github.com/junamai2000/mod_namy_pool#readme
mod_php를 사용하고 있다고 생각합니다.
PHP 파일이 실행을 마치면 모든 상태가 종료되므로 연결 풀링을 수행 할 방법이 없습니다 (PHP 코드에서). 대신 확장 기능에 의존해야합니다.
당신은 할 수 는 mysql_pconnect , 당신의 연결이 페이지 완료된 후 폐쇄되지 것입니다 그래서 그들은 다음 요청에서 다시받을 그런 식으로.
이것이 필요한 전부일 수 있지만, 열린 상태로 유지할 연결 수를 지정할 방법이 없기 때문에 연결 풀링과 동일하지 않습니다.
건배.
MySQLi 를 사용할 수 있습니다 .
자세한 내용은 연결 풀링 섹션 @ http://www.php.net/manual/en/mysqli.quickstart.connections.php#example-1622로 스크롤 하십시오.
연결 풀링은 서버 (예 : Apache httpd) 및 해당 구성에 따라 달라집니다.
연결 풀을 수동으로 인스턴스화 할 수 없습니다.
그러나 mysql_pconnect 함수 와 함께 "내장"연결 풀링을 사용할 수 있습니다.
나는 제안하고 싶다 PDO::ATTR_PERSISTENT
영구 연결은 스크립트 실행이 종료 될 때 닫히지 않는 링크입니다. 영구 연결이 요청되면 PHP는 동일한 영구 연결 (이전에서 열린 상태로 유지됨)이 이미 있는지 확인하고 존재하는 경우이를 사용합니다. 존재하지 않는 경우 링크를 생성합니다.
연결 풀링은 이와 같이 MySQL 서버 측에서 작동합니다.
- MySQL 서버 구성에서 지속성 연결이 활성화 된 경우 MySQL은 요청 된 클라이언트 (php 스크립트)가 작업을 완료 한 후 연결을 열어 대기 상태로 유지합니다.
- 두 번째 요청이 동일한 자격 증명 데이터 (동일한 사용자 이름, 동일한 암호, 동일한 연결 매개 변수, 동일한 데이터베이스 이름, 아마도 동일한 IP에서 왔을 수 있음, IP에 대해 확실하지 않음)와 함께 제공되면 MySQL은 절전 상태에서 활성 상태로 이전 연결을 풀링합니다. 클라이언트가 연결을 사용하도록합니다. 이는 MySQL이 연결을위한 초기 리소스의 시간을 절약하고 총 연결 수를 줄이는 데 도움이됩니다.
따라서 연결 풀링 옵션은 실제로 MySQL 서버 측에서 사용할 수 있습니다. PHP 코드 끝에는 옵션이 없습니다. mysql_pconnect ()는 스크립트 실행이 끝날 때 연결 종료 요청 신호를 보내지 않도록 PHP에 알리는 래퍼입니다.
참고 URL : https://stackoverflow.com/questions/39753/connection-pooling-in-php
'Development Tip' 카테고리의 다른 글
github 프로젝트에서 바이너리를 배포하는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.05 |
---|---|
"이벤트 이미 터"란 무엇입니까? (0) | 2020.11.05 |
ListPreference : 항목 값으로 문자열 배열을 사용하고 항목 값이 작동하지 않으므로 정수 배열을 사용합니다. (0) | 2020.11.05 |
JavaScript 코드에서 Python 함수 호출 (0) | 2020.11.05 |
지연 평가 및 시간 복잡성 (0) | 2020.11.04 |