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