2011-12-09 2 views
20

20k + 동시 사용자가있는 웹 사이트를 갖게됩니다.mongodb & max connections

데이터 샤딩을 위해 하나의 관리 노드와 3 개 이상의 노드를 사용하여 mongodb를 사용할 예정입니다.

지금 내 문제는 최대 연결입니다. 많은 사용자가 데이터베이스에 액세스하는 경우 최대 제한에 도달하지 못하게하려면 어떻게해야합니까? 또한 커널에서 연결을 증가시키기 위해 무엇인가를 변경해야합니까?

기본적으로 데이터베이스는 연결된 사용자를 사이트에 보관하는 데 사용되므로 읽기/쓰기 작업이 많습니다.

미리 감사드립니다.

+1

대부분의 mongodb 드라이버에서 영구 연결을 사용합니다. – DhruvPathak

+0

선호하는 스택 (LAMP/PHP/Perl/Python/Ruby on Rails/Apache/Tomcat/Windows/Linux)을 알면 꽤 도움이 될 것입니다. – Kato

답변

23

새 사용자가 연결할 때마다 새 데이터베이스 연결을 열고 싶지 않습니다. MongoDB가 각각의 새로운 연결마다 새로운 쓰레드를 사용하기 때문에, 20k + 동시 사용자로 쉽게 확장 할 수 있을지 모르겠습니다. 웹 응용 프로그램 백엔드에서 소수의 데이터베이스 연결을 열어서 풀에서 사용하도록하고 싶습니다. 특히 웹 사용이 매우 비동기적이고 이벤트 중심이므로.

볼 : 서버가 TCP 연결 당 하나 개의 스레드를 사용합니다 http://www.mongodb.org/display/DOCS/Connections

, 따라서 높은 응용 프로그램 연결 풀링의 일종을 사용하는 것이 시스템 권장된다. 다행히도 대부분의 운전자가 뒤에서이 을 처리합니다. 한 가지 주목할만한 예외는 앱이 CGI와 일부 PHP 구성과 같은 각 요청에 대해 새 프로세스를 생성하는 설정입니다.

사용하는 드라이버에 관계없이 연결을 처리하는 방법과 풀이되는지 여부를 알아야합니다. 예를 들어, Node의 Mongoose는 비 블로킹 (non-blocking)이므로 보통 앱마다 하나의 연결을 사용합니다. 이것은 아마도 당신이 원하는 종류의 것입니다.

+0

답변 해 주셔서 감사합니다. 이 운전사가 너에 대해서 말하는거야? 내가 어떻게 세울 수 있니? 감사합니다. –

+1

@enrico 글쎄, 당신이 사용하고 싶은 프로그래밍 모델은 당신이 생각하고 있던 쓰레드 기반 모델이 아니라 이벤트 기반 프로그래밍입니다. Node.js + Express + Mongoose + MongoDB는이를위한 인기있는 스택입니다. Perl을 사용하고 있다면 Mojolicious 또는 AnyEvent를 살펴보십시오. 이벤트 시스템을 사용하지 않는다면 문제는 C10k 문제입니다. http://www.kegel.com/c10k.html 여기에 Node.js 웹 앱의 예가 있습니다. http : //github.com/EhevuTov/netPeek – EhevuTov