2011-12-09 15 views
20

Avrò un sito Web con 20k + utenti simultanei.mongodb e connessioni max

userò mongodb utilizzando un nodo di gestione e 3 o più nodi per la suddivisione dei dati.

ora il mio problema è il numero massimo di connessioni. se ho così tanti utenti che accedono al database, come posso assicurarmi che non raggiungano il limite massimo? devo anche cambiare qualcosa sul kernel per aumentare le connessioni?

in pratica il database verrà utilizzato per mantenere gli utenti connessi al sito, quindi ci saranno pesanti operazioni di lettura/scrittura.

grazie in anticipo.

+1

utilizza connessioni persistenti, disponibili nella maggior parte dei driver mongodb. – DhruvPathak

+0

Sarebbe di grande aiuto conoscere il tuo stack preferito (LAMP/PHP/Perl/Python/Ruby on Rails/Apache/Tomcat/Windows/Linux?) – Kato

risposta

23

Non si desidera aprire una nuova connessione al database ogni volta che un nuovo utente si connette. Non so se sarai in grado di scalare facilmente fino a 20k + utenti simultanei, dato che MongoDB usa un nuovo thread per ogni nuova connessione. Si desidera che il back-end dell'app Web abbia solo una o più connessioni database aperte e utilizzi solo quelle in un pool, in particolare poiché l'utilizzo del Web è molto asincrono e basato su eventi.

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

Il server utilizza un thread per TCP connessione, quindi è altamente consigliato che l'applicazione utilizzare una sorta di pool di connessioni. Fortunatamente, molti driver gestiscono questo per te dietro le quinte. Un'eccezione degna di nota sono le impostazioni in cui l'app genera un nuovo processo per ogni richiesta, come CGI e alcune configurazioni di PHP .

Qualunque sia il driver che stai utilizzando, dovrai scoprire come gestiscono le connessioni e se si raggruppano o meno. Ad esempio, Node's Mongoose non è bloccante e di solito usi una sola connessione per app. Questo è il tipo di cosa che probabilmente vuoi.

+0

grazie per la tua risposta, ora sono totalmente noob .. Che cos'è questo driver di cui stai parlando? come posso configurarlo? grazie –

+1

@enrico Bene, il modello di programmazione che si desidera utilizzare è la programmazione basata sugli eventi e non il modello basato su thread a cui si stava pensando. Node.js + Express + Mongoose + MongoDB è uno stack popolare per questo. Se ti trovi in ​​Perl, controlla Mojolicious o AnyEvent. Il problema che si verificherà se non si utilizza un sistema evented, è il problema C10k: http://www.kegel.com/c10k.html Ho un esempio di app web Node.js qui: http : //github.com/EhevuTov/netPeek – EhevuTov

Problemi correlati