適用対象: NoSQL
このガイドには、Azure Cosmos DB for NoSQL 用 JavaScript SDK の最新バージョンを使用して構築されたソリューションのベスト プラクティスが含まれています。 ここに記載されているベスト プラクティスは、待機時間の向上、可用性の向上、ソリューションの全体的なパフォーマンスの向上に役立ちます。
アカウントの構成
- 待機時間を短縮するには、可能な限り、Azure Cosmos DB アカウントと同じ Azure リージョンでアプリケーションを実行してください。 2 から 4 のリージョンを有効にし、複数のリージョンでアカウントをレプリケートして、可用性を最大限に高めます。 運用環境ワークロードの場合は、サービスマネージド フェールオーバーを有効にします。 この構成がない場合、リージョンに接続されていないため手動フェールオーバーは成功せず、書き込みリージョンが停止している間、アカウント全体で書き込みができなくなります。 JavaScript SDK を使用して複数のリージョンを追加する方法の詳細については、 グローバル配布のチュートリアル を参照してください。
SDK の使用
- 最適なパフォーマンスを実現するために、常に最新バージョンの Azure Cosmos DB SDK を使用します。
- パフォーマンスを向上させるには、ご自身のアプリケーションの有効期間中に の
CosmosClientを使用します。 - ConnectionPolicy を使用して SDK で preferredRegions を設定します。 フェールオーバー中に、書き込み操作が現在の書き込みリージョンに送信され、すべての読み取りが優先リージョン リスト内の最初のリージョンに送信されます。 リージョン内フェールオーバーのメカニズムの詳細については、可用性に関するトラブルシューティング ガイド を参照してください。
- 一時エラーとは、その基になる原因がすぐに自動的に解決されるエラーです。 データベースに接続するアプリケーションは、これらの一時エラーを想定して構築する必要があります。 これに対処するには、アプリケーション エラーとしてユーザーに表示するのではなく、コードに再試行ロジックを実装します。 SDK には、読み取りやクエリの操作など、再試行可能な要求でこれらの一時的なエラーを処理するロジックが組み込まれています。 書き込みはべき等ではないため、一時的なエラーの場合、SDK では書き込みを再試行できません。 ユーザーは、SDK を使用して、スロットルの再試行ロジックを構成できます。 再試行の対象となるエラーの詳細については、こちらを参照してください。
- SDK のログを使用して、追加の診断情報をキャプチャし、待機時間の問題をトラブルシューティングします。
データ デザイン
- 特定の操作の要求の料金は、ドキュメントのサイズに直接関係します。 サイズの大きいドキュメントの操作は、サイズの小さいドキュメントの操作よりもコストがかかるので、ドキュメントのサイズを小さくすることをお勧めします。
- 一部の文字は制限されており、一部の識別子: '/'、'\'、'?'、'#' では使用できません。 一般的なレコメンデーションは、予期しない動作を回避するために、データベース名、コレクション名、項目 ID、パーティション キーなどの識別子に特殊文字を使用しないことをお勧めします。
- Azure Cosmos DB のインデックス作成ポリシーでは、
IndexingPolicy#getIncludedPaths()とIndexingPolicy#getExcludedPaths()のインデックス作成パスを使用して、インデックス作成に含めたり除外したりするドキュメント パスも指定できます。 書き込みを高速化するには、インデックス作成から未使用のパスを除外ししてください。 詳細については、SDKサンプルを使用したインデックスの作成 を参照してください。
ホストの特性
- クライアント マシン上のリソースが不足しているため、接続/可用性の問題に遭遇することがあります。 Azure Cosmos DB クライアントを実行しているノードで CPU 使用率を監視し、使用率が高い場合はスケールアップ/スケールアウトします。 また、 クラスター モジュールを使用してワークロードを実行することを検討してください。
- 運用環境ワークロードにおける、ほとんどの一般的なケースでは、可能な限り、少なくとも4コアと 8 GB のメモリ VM を使用することを強くお勧めします。
- 仮想マシンを使用してアプリケーションを実行する場合は、VM で高速ネットワークを有効にして、高トラフィックが原因で発生するボトルネックを解消し、待機時間や CPU ジッターを減らします。 CPU の最大使用率が 70% 未満であるハイエンドな仮想マシンの使用も検討してください。
- 既定では、100 項目または 4 MB (先に達した方) のチャンク単位でクエリ結果が返されます。 クエリから返される項目が 100 個を超える場合は、ページ サイズを大きくして、必要なラウンド トリップの数を減らします。 ページ サイズが大きくなるにつれて、メモリ消費量が増えます。