クライアント シングルトンを実装する
CosmosClient クラスの各インスタンスには、お客様に代わって既に実装されているいくつかの機能があります。
- インスタンスは既にスレッドセーフです
- インスタンスでは接続を効率的に管理します
- 直接モードで動作しているときはインスタンスによってアドレスがキャッシュされます
この動作により、1 つの .NET AppDomain 内でインスタンスを破棄して再作成するたびに、キャッシュと接続の管理のメリットが新しいインスタンスで失われます。
Azure Cosmos DB for NoSQL SDK チームでは、アプリケーションの有効期間中に、AppDomain ごとに 1 つのインスタンスを使用することをお勧めします。 このように設定に小さな変更を加えると、SDK クライアント側のパフォーマンスを向上させて、接続管理をより効率的にすることができます。
ヒント
一般的な .NET コンソール アプリケーションでシングルトンを使用するのは簡単です。 ASP.NET Web アプリケーションの場合は、任意の依存関係挿入フレームワークを使用して、シングルトン インスタンスを作成する方法を確認する必要があります。
Python SDK の CosmosClient は軽量であり、Azure Cosmos DB SDK for Python は自動的に接続管理を効率的に処理します。 ただし、パフォーマンスとリソースの効率を高めるために、アプリケーション全体で同じ CosmosClient インスタンスを再利用することをお勧めします。
- Python SDK はスレッド セーフであるため、1 つのインスタンスを複数のスレッド間で共有できます。
- 複数のインスタンスを作成して破棄すると、リソースの消費量が不必要に増加します。
ベスト プラクティス
- 単一の
CosmosClientインスタンスを作成し、アプリケーションの有効期間中に再利用します。 - 実行時間の長いアプリケーションでは、モジュール レベルの変数や依存関係挿入コンテナーなど、グローバルにアクセスできる場所に
CosmosClientインスタンスを格納します。
ヒント
FastAPI や Flask などのフレームワークを使用している場合は、アプリの起動時に 1 回 CosmosClient を作成し、要求間で再利用することを検討してください。
JavaScript SDK の CosmosClient クラスは、複数の操作で再利用できるように設計されています。
- JavaScript SDK は接続を効率的に管理しますが、インスタンス化が頻繁に行われるとパフォーマンスに影響を与える可能性があります。
-
CosmosClientは本質的に作成コストは高くありませんが、1 つのインスタンスを再利用すると、リソースの使用を最適化できます。
ベスト プラクティス
- 1 つの
CosmosClientインスタンスを作成し、アプリケーション全体で再利用します。 - Node.js 環境で、
CosmosClientを 1 回初期化し、モジュール間で共有します。 - Express.jsなどの Web フレームワークを使用する場合は、アプリケーションの起動時に
CosmosClientを初期化し、要求間で使用します。
ヒント
Azure Functions などのサーバーレス環境では、静的変数を使用して、関数呼び出し間で CosmosClient インスタンスを保持することを検討してください。