1

mongodb を接続してどこでも使用する方法はありますか? mongodb を使用したいときはいつでも、詳細に入力する$m= new Mongo;必要があります。繰り返し接続するとパフォーマンスに影響するかどうか疑問に思っています。

4

2 に答える 2

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+)

接続の作成は、ドライバーが行う最も負荷の高い作業の 1 つです。高速ネットワークでも、接続を正しく設定するには数百ミリ秒かかる場合があります。したがって、ドライバーは、プールからの接続を再利用して、作成される新しい接続の数を最小限に抑えようとします。

ユーザーが Mongo の新しいインスタンスを作成すると、必要なすべての接続がプールから取得されます (レプリカ セットでは、セットのメンバーごとに 1 つずつ、複数の接続が必要になる場合があります)。Mongo インスタンスが範囲外になると、接続はプールに戻されます。PHP プロセスが終了すると、プール内のすべての接続が閉じられます。"

mongostatテスト php スクリプトを使用してこれを試し、形成される最大接続数を観察します。

于 2012-04-25T06:16:33.920 に答える
1
private $m;
private function getMongo() {
    if ($this->m) return $this->m;
    return $this->m = new Mongo();
}

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

于 2012-04-25T04:56:29.100 に答える