2011-09-14 1 views
3

프로덕션 환경에서 mongodb 서버가 EC2 인스턴스로 제공됩니다. mongodb 공식 문서에 따르면, 영구 DB 연결은 항상 프로덕션에서 사용되어야합니다. 나는 약 50 개의 지속적인 연결을 실험 해 왔으며 테스트 중에 빈번한 연결 오류 (약 33 %)를 얻고있었습니다. 이 코드를 사용하지 해요 :MongoDB 최적 성능 - 얼마나 많은 지속적인 연결

$pid = 'db_'.rand(1,50); 
$mongo = new Mongo("mongodb://{$user}:{$pass}@{$host}", array('persist' => $pid)); 

응용 프로그램의 일부 배경은, 아직까지 올렸 링크 추적 응용 프로그램입니다 - 500의 범위에있다 - 1K 시간당 기록, 너무 미친 아무것도 ... 아직.

더 지속적인 연결을 허용해야하는지 궁금합니다. 사용 가능한 서버 리소스 대 영구 연결의 올바른 균형을 어떻게 결정합니까?

미리 감사드립니다.

답변

5

persist 값은 최신 드라이버 (1.2.0) 현재 no longer supported입니다.

진실은 전형적인 Apache + PHP 설정에서 실제로 무엇을했는지 결코 명확하지 않습니다. Google 그룹스 및 기타 세부 정보를 요청하는 여러 의견이 있지만 persist 또는 persistent에 대한 깊이있는 테스트를 한 증거는 없습니다.

대신에 "out of the box"라는 연결 풀링으로 대체되었습니다. 연결 풀링은 클래스가 추가 된 1.2 라인 내에서 분명히 been through some changes입니다.

풀링이 Apache와 어떻게 작동하는지에 대한 자세한 설명은 아직 없지만 적어도 persist에 대해 걱정할 필요가 없습니다.

이 모든 혼란에도 불구하고, 나는 많은 연결 문제없이 PHP 드라이버를 통해 단일 MongoDB 서버에서 트래픽을 1000 배 처리했습니다.

예외가 있습니까?

정확한 예외에 대한 자세한 정보를 제공 할 수 있습니까?

코드 해결책이있을 수 있습니다.영구 연결 X1000없이

1

각 PHP 페이지 요청에 대해 새 연결을 열거 나 50 개의 영구 연결을 사용하는 연결 풀을 사용 중입니까? 매번 새로운 연결을 여는 경우 자원이 빨리 소모 될 수 있습니다.

각 연결은 서버에서 추가 스레드를 사용하므로 네트워크 연결 스레드 수에 제한이있을 수 있으므로 서버 로그에서 /var/lib/mongodb 오류를 확인하십시오.

official MongoDB PHP driver을 사용중인 경우 자동으로 연결 풀링을 처리해야한다는 것을 알고 있습니다. 50 명의 개별 클라이언트로부터 Mongo에 연결하는 경우 Mongo 앞에 큐를 넣어 쓰기를 버퍼링하는 것이 좋습니다.