Overview
MongoDBデプロイに接続するには、次の項目を作成する必要があります。
接続 URI 。 接続string とも呼ばれます。これは、接続するPHP 配置をMongoDB ライブラリに指示します。
MongoDB\Clientオブジェクトは、 MongoDBデプロイへの接続を作成し、それに対して操作を実行できるようにします。
これらのコンポーネントのいずれかまたは両方内でオプションを設定して、 MongoDBに接続中にPHPライブラリが動作する方法をカスタマイズすることもできます。
このガイドでは、接続 のコンポーネントについて説明し、{0string MongoDB\Client
オブジェクトを使用してMongoDB 配置に接続する方法を示します。
接続URI
標準の接続stringには次のコンポーネントが含まれます。
コンポーネント | 説明 |
---|---|
| 必須: これを標準接続形式の文字列として識別するプレフィックス。 |
| 任意。 認証資格情報。 これらを含めると、クライアントは |
| 必須。 MongoDB が実行されているホストとオプションのポート番号。 ポート番号を指定しない場合、ドライバーはデフォルトのポート |
| 任意。 接続stringに |
| 任意。 接続固有のオプションを |
接続文字列の詳細については、サーバー マニュアルの「 接続文字列 」を参照してください。
MongoDB$Client の作成
MongoDBへの接続を作成するには、 MongoDB\Client
オブジェクトを構築します。次のパラメータを MongoDB\Client
コンストラクターに渡します。
$uri
: 接続 URI を設定します。$uriOptions
:(任意)認証情報やサーバー選択設定など、クライアントがMongoDBに接続する方法を構成するための URI オプションを設定します。このパラメータと接続文字列で同じオプションを設定すると、$uriOptions
の値が優先されます。サポートされているオプションの完全なリストを表示するには、 「接続オプションの指定」ガイドを 参照してください。$driverOptions
: (任意)TLS 接続のデータ暗号化設定や証明書検証オプションなど、基礎となるPHP拡張機能の動作を構成するオプションを設定します。サポートされているオプションの完全なリストを表示するには、 APIドキュメントのMongoDB\Client::__construct()
を参照してください。
例
この例では、クライアントを構築し、次のパラメータを渡します。
接続 URI。
localhost
のポート27017
上のMongoDBデプロイに接続します。PHPオプション パラメーター。PHP ライブラリは、エラーを生成する前にサーバー選択のために
10000
ミリ秒待機するよう指示します。
$uri = 'mongodb://localhost:27017'; $uriOptions = ['serverSelectionTimeoutMS' => 10000]; $client = new MongoDB\Client($uri, $uriOptions);
クライアントの永続化
libmongoc
ライブラリとPHP拡張機能は、 MongoDBデプロイへの接続を処理します。MongoDB\Client
インスタンスを構築すると、 PHPライブラリは同じ接続文字列とオプションを使用してMongoDB$Driver\Manager インスタンスを作成します。拡張機能は、永続的な クライアントのハッシュキーを生成するためにも、これらのコンストラクター引数を使用します。以前にキーを使用して クライアントを永続化した場合、これは再利用されます。それ以外の場合、新しいlibmongoc
libmongoc
libmongoc
クライアントが作成され、 PHPワーカー プロセスの有効期間にわたって永続化されます。このプロセスの詳細については、 PHP拡張機能のドキュメント を参照してください。
各 libmongoc
クライアントは、 MongoDBデプロイへの独自の接続と、そのトポロジーのビューを維持します。 永続的な libmongoc
クライアント を再利用すると、 PHPライブラリは新しい接続を確立し、トポロジーを再検出する のオーバーヘッドを回避できます。 このアプローチによりパフォーマンスが向上することがほとんどで、これはドライバーのデフォルトの動作です。
永続的な libmongoc
クライアントは、 PHPワーカー プロセスが終了するまで解放されません。その結果、MongoDB\Driver\Manager
オブジェクトが範囲を超えた後もMongoDBデプロイへの接続が開いたままになる可能性があります。これは通常、1 つのMongoDBデプロイに接続するアプリケーションには問題ありませんが、次の状況ではエラーが発生する可能性があります。
PHP-FPM は
pm.max_requests=0
で構成されているため、ワーカーは再生成されず、 PHPアプリケーションはMongoDB の接続文字列やオプションに小さな変更を加えて繰り返し配置されます。これにより、各ワーカー プロセスにlibmongoc
クライアントオブジェクトが蓄積される可能性があります。アプリケーションは、リクエストレイテンシが最も重要ではないバックエンドコンポーネント内の別のMongoDBデプロイに時々接続します。
最初の場合、アプリケーション配置の一部としてPHP -FPM を再起動すると、アプリケーションは未使用の libmongoc
クライアントを解放し、最新の接続文字列に永続的なクライアントを引き続き使用できます。
2 番目のケースでは別のソリューションが必要になります。 disableClientPersistence
ドライバー オプションに true
を指定すると、 PHPライブラリは新しい libmongoc
クライアントを作成し、対応する MongoDB\Driver\Manager
が範囲外になったときに解放されるようにします。
次のコードは、クライアントを作成するときに disableClientPersistence
オプションを true
に設定する方法を示しています。
$client = new MongoDB\Client( uri: getenv('MONGODB_URI') ?: 'mongodb://127.0.0.1/', driverOptions: ['disableClientPersistence' => true], );
注意
クライアントの永続性を無効にすると、 PHPライブラリはMongoDBデプロイへの接続を確立し、そのトポロジー を検出するのにより長い時間が必要になります。
API ドキュメント
PHPライブラリでMongoDB\Client
オブジェクトを作成する方法の詳細については、次のAPIドキュメントを参照してください。