2011-09-14 28 views
3

私はEC2インスタンス上で稼働中のmongodbサーバーを持っています。 mongodbの公式ドキュメントによると、永続的なDB接続は、常にプロダクションで使用されるべきです。私は約50の永続的な接続を試していて、テスト中に頻繁な接続エラー(時間の約33%)を得ていました。私はこのコードを使用しています: - 500の範囲である - それはまだランプアップされたリンクの追跡アプリケーションです、MongoDBの最適なパフォーマンス - 永続的な接続の数

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

アプリケーションのいくつかの背景を1K、毎時あまりにもクレイジーは何も書き込まれていません...まだ。

もっと永続的な接続を許可する必要があるのだろうか?利用可能なサーバーリソースと永続的な接続との適切なバランスをどのように判断するのですか?

ありがとうございます。

答えて

5

persistの値は、最新のドライバ(1.2.0)の時点でno longer supportedです。

真実は、典型的なApache + PHPの設定ではどういうことが起こったのかは決して分かりませんでした。 Googleグループやその他の詳細については、いくつかのコメントがありますが、persistまたはpersistentが深度でテストされたという証拠はありませんでした。

代わりに、すべて「すぐに使用できる」接続プールに置き換えられています。接続プールは、明らかにbeen through some changesが1.2行内にあり、MongoPoolクラスが追加されています。

Apacheでのプーリングの仕組みについての詳しい説明はまだありませんが、少なくともpersistについて心配する必要はありません。

この混乱にもかかわらず、PHPドライバを使用して1つのMongoDBサーバーでトラフィックを1000回処理しました。

例外をキャッチしていますか?

正確な例外についてさらに詳しく説明できますか?

コード解決策がある可能性があります。

1

PHPページ要求ごとに新しい接続を開くか、50個の固定接続を持つ接続プールを使用していますか?毎回新しい接続を開いている場合、すぐにリソースが不足する可能性があります。

各接続でサーバー上に追加のスレッドが使用されるため、ネットワーク接続のスレッド数に制限がある場合は、サーバーログのエラーを/var/lib/mongodbで確認してください。

official MongoDB PHP driverを使用している場合は、接続プーリングを自動的に処理するはずです。あなたが50人の別々のクライアントからMongoに接続しているなら、Mongoの前にキューを入れて書き込みをバッファすることを検討してください。

関連する問題