2011-12-09 15 views
20

Mam stronę internetową z 20k + równoczesnymi użytkownikami.mongodb & max connections

Mam zamiar użyć mongodb przy użyciu jednego węzła zarządzania i 3 lub więcej węzłów dla shardingu danych.

teraz moim problemem są maksymalne połączenia. jeśli mam tak wielu użytkowników uzyskujących dostęp do bazy danych, w jaki sposób mogę się upewnić, że nie osiągają maksymalnego limitu? także czy muszę zmienić wszystko, co może na jądrze, aby zwiększyć połączenia?

zasadniczo baza danych będzie używana do utrzymywania podłączonych użytkowników do witryny, więc będą ciężkie operacje odczytu/zapisu.

z góry dziękuję.

+1

używać trwałych połączeń, dostępnych w większości sterowników mongodb. – DhruvPathak

+0

Pomoże ci całkiem sporo znać twój preferowany stos (LAMP/PHP/Perl/Python/Ruby na Railsach/Apache/Tomcat/Windows/Linux?) – Kato

Odpowiedz

23

Nie chcesz otwierać nowego połączenia z bazą danych za każdym razem, gdy nowy użytkownik się połączy. Nie wiem, czy będziesz w stanie skalować do 20k + równoczesnych użytkowników, ponieważ MongoDB używa nowego wątku dla każdego nowego połączenia. Chcesz, aby twój backend aplikacji internetowej miał otwarte tylko jedno połączenie kilku baz danych i po prostu używaj ich w puli, zwłaszcza, że ​​użycie sieci jest bardzo asynchroniczne i sterowane zdarzeniami.

patrz: http://www.mongodb.org/display/DOCS/Connections

Serwer będzie używać jednego wątku per TCP związku, dlatego jest wysoce zalecane, że aplikacja użyć jakiegoś puli połączeń. Na szczęście większość sterowników obsługuje ten numer za kulisami. Jednym z godnych uwagi wyjątków jest konfiguracja, w której aplikacja spawns nowy proces dla każdego żądania, taki jak CGI i niektóre konfiguracje PHP w postaci .

Niezależnie od używanego sterownika, będziesz musiał dowiedzieć się, jak radzą sobie z połączeniami i czy się łączą, czy nie. Na przykład Mongoose Node'a nie jest blokowane, więc zazwyczaj używasz jednego połączenia na aplikację. Tego rodzaju rzeczy prawdopodobnie chcesz.

+0

dzięki za odpowiedź, teraz jestem totalnym noobem. Co to jest? ten kierowca, o którym mówisz? jak mogę to ustawić? dziękuję –

+1

@enrico Cóż, model programowania, którego chcesz użyć, jest oparty na zdarzeniach, a nie na modelu opartym na wątku, o którym myślałeś. Node.js + Express + Mongoose + MongoDB to popularny stos do tego. Jeśli jesteś w Perlu, spójrz na Mojolicious lub AnyEvent. Problem, który napotkasz, jeśli nie korzystasz z systemu, którego dotyczy problem, to problem C10k: http://www.kegel.com/c10k.html Mam przykład aplikacji internetowej Node.js tutaj: http : //github.com/EhevuTov/netPeek – EhevuTov