Azure Cosmos DB for NoSQL での Python SDK のベスト プラクティス
適用対象: NoSQL
このガイドには、Azure Cosmos DB for NoSQL 用 Python SDK の最新バージョンを使用して構築されたソリューションのベスト プラクティスが含まれています。 ここに記載されているベスト プラクティスは、待機時間の向上、可用性の向上、ソリューションの全体的なパフォーマンスの向上に役立ちます。
アカウントの構成
- 待機時間を短縮するには、可能な限り、Azure Cosmos DB アカウントと同じ Azure リージョンでアプリケーションを実行してください。 アカウントの 2 つ以上のリージョンでレプリケーションを有効にして、可用性を最大限に高めます。 運用環境ワークロードの場合は、サービスマネージド フェールオーバーを有効にします。 この構成がない場合、リージョンに接続されていないため手動フェールオーバーは成功せず、書き込みリージョンの停止中は、アカウントで書き込みを利用できなくなる可能性があります。 Python SDK を使用して複数のリージョンを追加する方法の詳細については、グローバル配布のチュートリアルを参照してください。
SDK の使用
- 最適なパフォーマンスを実現するために、常に最新バージョンの Azure Cosmos DB SDK を使用します。
- パフォーマンスを向上させるには、ご自身のアプリケーションの有効期間中に
CosmosClient
の単一インスタンスを使用します。 - cosmos クライアントで
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 を使用した要求ユニットの見積もりに関するページを参照してください