2014-09-14 2 views
0

저는 현재 Ajax를 초당 약 4 번 실행하는 응용 프로그램을 만들고 있습니다. PHP 파일은 Ajax가 해고 될 때마다 MongoDB에 연결해야합니다. 때때로 라이브 서버 로그에 따라 추가로 3 개의 mongo 연결을 설정하게됩니다. PHP 세션 중에 새 세션을 설정하지 않고 어떻게 하나의 연결을 설정해야합니까?PHP 세션에서 몽고 연결

답변

1

실제로 연결 수는 문제가되지 않습니다. 드라이버는 실제로 연결 풀을 설정합니다. 복제본 세트 및 분할 클러스터에는 관리 연결도 있습니다. 여러 개의 연결을 갖는 것은 문제가되지 않습니다.

MongoDB에 대해 많은 것을 알고 있지만 저는 PHP 전문가가 아닙니다. 그러나 내가 아는 한 PHP에는 응용 프로그램 수준 변수가 없습니다. 그래서 afaik, 응용 프로그램 수준에서 연결 (풀)을 저장할 수있는 방법이 없습니다.

PHP 파일에서 연결을 열면 서버 쪽 커서가 여전히 연결에 연결되어 있기 때문에 어떤 이유로이 연결이 서버에 의해 계속 열려 있습니다. 이러한 고아 연결을 호출 해 보겠습니다. 이러한 고아 연결은 10 분 후에 서버에 의해 제거됩니다.

mongod/mongos 인스턴스가 취할 수있는 연결 제한은 20.000입니다. 그래서 당신이 사용할 수있는 많은 연결이 있습니다. 그럼에도 불구하고 당신은 당신도 그 커서를 배출 (후가 자동으로 찢어진) 또는 기능/방법/소스 파일의 끝에

$cursor->reset(); 

에 수동으로 해체 있는지 확인해야합니다. 그렇지 않으면 응용 프로그램에 많은 사용자가있을 때 문제가 발생할 수 있습니다.

1

수 없습니다. 스크립트는 serialize()과 비슷한 형식으로 파일에 기록되며 스크립트가 종료 될 때 (또는 session_write_close()를 호출 할 때) 데이터베이스 연결과 같이 PHP resource objects을 저장할 수 없습니다.

요청 당 여러 Mongo 연결이 표시되는 경우 PHP MongoDB 확장의 현재 버전이 실행되지 않은 것일 수 있습니다. 현재 버전 (1.3 이상)은 요청간에 자동으로 연결을 풀링합니다. 현재 버전의 드라이버로 업데이트하면 더 이상 작업 할 필요가 없습니다.