2012-04-25 6 views
1

mongodbに接続してどこにでも使用できますか?今までmongodbを使用したいときは、冗長に$m= new Mongo;と打つ必要があります。繰り返し接続するとパフォーマンスに影響を与えるかどうかは疑問です。mongodbをPHPで接続したままにすることはできますか?

+0

これらの14文字_are_冗長な... –

+0

だけでなく、私のキーポイントは、パフォーマンス上の問題です繰り返し接続してもパフォーマンスに影響を与えない場合mysql_pconnectが接続を維持するためにmysqlになぜあるか – LotusH

答えて

3

これはMongoDb < 1.2で重要なことですが、その後は永続的な接続がデフォルトです。 MongoDbのすべての言語ドライバは、内部的に接続プールを管理しますので、デフォルト動作で安全に使用できます。 接続プーリングのために、new Mongo()を作成するたびに、接続プールから確立された接続が選択されます。接続プールから接続が確立されていない場合は再接続します。

抜粋から:。 http://php.net/manual/en/mongo.connecting.php

In 1.2.0+, connections are always persistent and managed 
automatically by the driver. 

「接続の作成接続プーリング(バージョン1.2.0+)

はそれを取ることができ ドライバがないことが最もヘビー級のものの一つであります高速ネットワーク上であっても の接続を正しく設定するために数百ミリ秒かかるため、ドライバは を再利用して新しい接続の数を最小限にしようとします。 プールからの接続。

ユーザはMongoの新しいインスタンスを作成し、すべての必要な接続 は(レプリカセットがmultple 接続、セットの各メンバーのための1つを必要とするかもしれない)、そのプールから採取されます。 Mongoインスタンス が有効範囲外になると、接続はプールに返されます。 PHPプロセスが終了すると、プール内のすべての接続が閉じられます。 「

あなたは、これが形成最大接続数を確認するためのテストPHPスクリプトを使用して、そしてmongostatを観察してみてください。MДΓΓБД[email protected]わから

+0

まさに私が欲しいものです。ありがとう! – LotusH

1

memoizationと呼ばれています。今では通常、新しいmongoインスタンスを作成し、代わりにこの関数を呼び出すと、新しいインスタンスを作成するのではなく、既存の接続を提供します。

+0

これはシングルトンではありませんか? –

+0

シングルトンは$ mをMongoクラスに格納し、Mongoはpublicコンストラクタを持たないでしょう –

関連する問題