2011-12-09 5 views
20

私は20k人以上の同時ユーザーがいるウェブサイトを持っています。mongodb&max connections

私はmongodbを1つの管理ノードと3つ以上のノードを使ってデータシャーディングに使用します。

私の問題は最大の接続です。私は多くのユーザーがデータベースにアクセスしている場合、どのように彼らは最大限に達していないことを確認することができますか?また、カーネルに接続を増やすために何かを変更する必要がありますか?

基本的にデータベースは、接続されたユーザーをサイトに保持するために使用されるため、大量の読み取り/書き込み操作が行われます。

ありがとうございます。

+1

ほとんどのmongodbドライバで永続的な接続を使用します。 – DhruvPathak

+0

あなたの好みのスタック(LAMP/PHP/Perl/Python/Ruby on Rails/Apache/Tomcat/Windows/Linux)を知るのにかなり役立ちます – Kato

答えて

23

新しいユーザーが接続するたびに新しいデータベース接続を開くことは望ましくありません。 MongoDBは、新しい接続ごとに新しいスレッドを使用するので、20k +の同時ユーザーに容易に拡張できるかどうかはわかりません。あなたのWebアプリケーションのバックエンドで、少数のデータベース接続を開いてプール内で使用するだけで済みます。特に、Webの使用は非常に非同期で、イベント駆動型であるためです。

は、以下を参照してください。サーバがTCP 接続ごとに1つのスレッドを使用しますhttp://www.mongodb.org/display/DOCS/Connections

、したがって、非常にあなたのアプリケーション は、接続プールのいくつかの並べ替えを使用することをお奨めします。幸いなことに、ほとんどのドライバーはあなたのためにこれの後ろにこの を処理します。注目すべき例外の1つは、 アプリがCGIやPHPの一部の の設定など、リクエストごとに新しいプロセスを生成する設定です。

どのドライバを使用していても、接続の処理方法やプールの有無を調べる必要があります。例えば、NodeのMongooseはノンブロッキングであるため、通常、アプリケーションごとに1つの接続を使用します。これはおそらくあなたが望むようなものです。

+0

あなたの答えに感謝しています。あなたはこのドライバについて話していますか?どうすれば設定できますか?ありがとうございます。 –

+1

@enrico使用したいプログラミングモデルは、イベントベースのプログラミングであり、あなたが考えていたスレッドベースのモデルではありません。 Node.js + Express + Mongoose + MongoDBはこれによく使われるスタックです。あなたがPerlにいるなら、MojoliciousかAnyEventを見てください。イベントが発生したシステムを使用しない場合の問題は、C10kの問題です。http://www.kegel.com/c10k.html ここにNode.js Webアプリケーションの例があります:http ://github.com/EhevuTov/netPeek – EhevuTov