mongodb を接続してどこでも使用する方法はありますか? mongodb を使用したいときはいつでも、詳細に入力する$m= new Mongo;
必要があります。繰り返し接続するとパフォーマンスに影響するかどうか疑問に思っています。
2 に答える
これは 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+)
接続の作成は、ドライバーが行う最も負荷の高い作業の 1 つです。高速ネットワークでも、接続を正しく設定するには数百ミリ秒かかる場合があります。したがって、ドライバーは、プールからの接続を再利用して、作成される新しい接続の数を最小限に抑えようとします。
ユーザーが Mongo の新しいインスタンスを作成すると、必要なすべての接続がプールから取得されます (レプリカ セットでは、セットのメンバーごとに 1 つずつ、複数の接続が必要になる場合があります)。Mongo インスタンスが範囲外になると、接続はプールに戻されます。PHP プロセスが終了すると、プール内のすべての接続が閉じられます。"
mongostat
テスト php スクリプトを使用してこれを試し、形成される最大接続数を観察します。
private $m;
private function getMongo() {
if ($this->m) return $this->m;
return $this->m = new Mongo();
}
と呼ばれる技法ですmemoization
。通常は新しい mongo インスタンスを作成する場所で、代わりにこの関数を呼び出すと、新しい接続を作成するのではなく、既存の接続が提供されます。