Azure Cosmos DB は、NoSQL、リレーショナル データベース、ベクター データベース、テーブル データベースなど、複数のデータベースの種類をホストできるフル マネージド データベース ソリューションです。 ワークロードのほとんどのユース ケースに対応できます。 このガイドの推奨事項は、 Azure Cosmos DB for NoSQL バリアントに焦点を当てています。 また、いくつかの基本的な推奨事項を他のバリアントに適用することもできます。
この記事では、アーキテクトとして Azure データ オプション を確認し、ワークロードのデータ ストアとして Azure Cosmos DB for NoSQL を選択していることを前提としています。 この記事のガイダンスでは、Well-Architected Framework の柱の原則にマップされるアーキテクチャに関する推奨事項を示します。
重要
このガイドの使用方法
各セクションには、設計チェックリスト があり、テクノロジ スコープにローカライズされた設計戦略と共に、関心のあるアーキテクチャ領域が示されています。
また、これらの戦略の具体化に役立つテクノロジ機能の推奨事項も含まれています。 推奨事項は、Azure Cosmos DB for NoSQL とその依存関係で使用できるすべての構成の完全な一覧を表すわけではありません。 代わりに、設計パースペクティブにマップされた主要な推奨事項が一覧表示されます。 推奨事項を使用して概念実証を構築するか、既存の環境を最適化します。
技術の範囲
このレビューでは、次の Azure リソースに関する相互に関連する決定に焦点を当てます。
- NoSQL 用 Azure Cosmos DB
信頼性
信頼性の柱の目的は、十分な回復性を構築 し、障害から迅速に回復する機能をして継続的な機能を提供することです。
信頼性設計の原則、個々のコンポーネント、システム フロー、およびシステム全体に適用される高度な設計戦略を提供します。
設計チェックリスト
信頼性 の設計レビュー チェックリストに基づいて、設計戦略を開始します。 整合性レベル、リージョン間レプリケーション、プロビジョニング済みスループットを考慮しながら、ビジネス要件との関連性を判断します。 必要に応じて、より多くのアプローチを含むように戦略を拡張します。
シンプルなデザインを選択し、不要な機能を避けます。 複数プライマリの書き込みやカスタム インデックス作成など、ワークロードに不必要に複雑さを加える機能を採用しないでください。 Azure Cosmos DB ではこれらの機能がサポートされていますが、複雑さと運用上の負担が大幅に増える可能性があります。 ワークロードに高度な機能が必要かどうかを慎重に評価します。
認証と承認のための Microsoft Entra ID、監視用の Azure Monitor と Application Insights など、ワークロードの責任と横断的な懸念を他のサービスにオフロードします。
ワークロード フローを特定し、優先順位を付けます。 アプリケーション内のすべてのフローが同じように重要であるとは言えない。 重要なパスを特定し、各フローに優先順位を割り当てて、設計上の決定を導きます。 ユーザー フローの設計は、Azure Cosmos DB データベースに割り当てるサービス レベル、機能、容量に影響を与える可能性があります。
特別な処理が必要になる可能性がある重要なフローを特定するには、データ処理機能の観点からそれらを区別する処理要件をキャプチャします。 たとえば、一部のフローでは、スループットの高さが必要になったり、待機時間の問題に対して敏感になる場合があります。 また、一部のソリューション フローでは、異なるトランザクション整合性レベルが必要になる場合があります。
障害モード分析を使用して、ワークロード内の潜在的な障害を特定します。 潜在的な障害の軽減戦略を計画します。 次の表に、エラー モード分析の例を示します。
失敗 緩和策 新しい地理的リージョンのユーザーへのロールアウト後の待機時間とタイムアウトが長い 新しいユーザーに近い Azure リージョンへの複数リージョンレプリケーションを有効にします。 要求ユニット (RU) 数の超過が理由の調整 再試行ロジックを実装します。 RU 消費量を監視し、必要に応じてスループット設定を調整します。 1 つの Azure リージョンの単一ゾーンでの Azure Cosmos DB サービスの障害 データベースを作成するときに可用性ゾーンのサポートを構成します。 詳細については、「Azure アプリケーションのエラー モード分析」を参照してください。
冗長性を構築して回復性を向上させ、信頼性目標を満たすのに役立ちます。 Azure の少なくとも 2 つのリージョンにまたがるように、データベース アカウントのデプロイを設計します。 Azure リージョンでサポートされている場合は、アカウントを複数の可用性ゾーンに分散します。
ワークロードの複数リージョンと単一リージョンの書き込み戦略を評価します。 単一リージョンの書き込みでは、フェールオーバー用に少なくとも 2 番目の読み取りリージョンを持つワークロードを設計します。 単一リージョンの書き込みと複数リージョンの読み取りシナリオで自動フェールオーバーを有効にします。 複数リージョンの書き込みの場合は、複雑さと一貫性のトレードオフと、複数のリージョンへの書き込みの利点を比較します。 詳細については、リージョン停止時における単一リージョンおよび複数リージョンの書き込みアカウントでの期待される事項を参照してください。
整合性レベルとレプリケーション モードが、リージョン全体の停止における目標復旧ポイント (RPO) にどのように影響するかを検討します。
データベースのフェールオーバーとフェールバックのテストを含む、アプリケーションの高可用性のエンド ツー エンド テストを設計します。
ネイティブのディザスター リカバリーとバックアップ機能を使用します。 要件を満たすために、データベースとコンテナーのバックアップと復元を実装します。 復元シナリオには、ポイントインタイム リストア、偶発的な破壊的操作からの復旧、削除されたリソースの復元、特定の時点での別のリージョンへの復元などがあります。 継続的バックアップを使用してアカウントを構成します。 ビジネス要件に基づいて適切な保有期間を選択します。
Azure Cosmos DB の設計を、業界標準のアプリケーション設計のガイダンスとパターンに合わせます。 回復性のあるアプリケーションを設計し、SDK の既定の再試行ポリシーを確認し、特定の一時的なエラーに対するカスタム処理を計画するためのガイドを確認します。 これらのガイドでは、一時的なエラーに対するアプリケーション コードの回復性を高めるベスト プラクティスを提供します。
推奨事項
勧告 | メリット |
---|---|
使用可能な場合は、Azure Cosmos DB アカウントを 複数の可用性ゾーンに 分散します。 | 可用性ゾーンは、分離された電源、ネットワーク、冷却機能を提供します。これにより、レプリカのサブセットにハードウェア障害を分離できます。 可用性ゾーン機能を使用しない場合、Azure Cosmos DB は、ランダムに選択された 1 つの可用性ゾーンにまたがって複数のレプリカにまたがります。 |
少なくとも 2 つのリージョンにまたがるように Azure Cosmos DB アカウントを構成します。 | 複数のリージョンにまたがることが、ワークロードがリージョンの障害に対する回復性を確保するのに役立ちます。 |
アカウント のサービス管理フェールオーバー を有効にします。 サービス管理フェールオーバーとのトレードオフを理解し、必要に応じて強制フェールオーバーを計画します。 サービス管理フェールオーバーを一時的に無効にして、アプリケーションのエンド ツー エンドの高可用性を検証します。 手動フェールオーバーは、スクリプトまたは Azure portal を使用して開始できます。 |
サービスマネージド フェールオーバーを使用すると、Azure Cosmos DB は、可用性を維持するために複数リージョン アカウントの書き込みリージョンを自動的に変更できます。 この変更は、ユーザーの操作なしで発生します。 |
安全
セキュリティの柱の目的は、ワークロードに対して機密性、整合性、可用性を保証することです。
セキュリティ設計原則は、Azure Cosmos DB for NoSQL の技術設計にアプローチを適用することで、これらの目標を達成するための高度な設計戦略を提供します。
設計チェックリスト
セキュリティ の 設計レビュー チェックリストに基づいて設計戦略を開始し、セキュリティ体制を改善するための脆弱性と制御を特定します。 必要に応じて、より多くのアプローチを含むように戦略を拡張します。
セキュリティ ベースラインを確認します。 ワークロードのセキュリティ体制を強化するには、 Azure データベースのセキュリティ チェックリスト と Azure Cosmos DB のセキュリティ ベースラインを確認します。 少なくとも、Azure Cosmos DB アカウントをセキュリティ で保護するために、データ保護 と ID 管理の セキュリティ ベースラインを実装します。
厳密で条件付きで監査可能な ID とアクセス管理を実装します。 ワークロードの認証と承認のニーズに Microsoft Entra ID を使用します。 Microsoft Entra ID は、一元的な承認とアクセス管理を提供します。
アカウントへのコントロール プレーンとデータ プレーン アクセスの場合は、 最小特権アクセスの原則に基づいてロール、グループ、割り当てを作成します。 キーベースの認証を無効にすることを検討してください。
データを暗号化します。サービスマネージド キーまたはカスタマー マネージド キーを使用して、保存データまたは移動中のデータを暗号化します。
ネットワークのセグメント化とセキュリティ制御を適用します。 ネットワーク設計で意図的なセグメント化と境界を作成し、すべてのネットワーク境界でローカライズされたネットワーク制御を使用して多層防御の原則を適用します。
Azure Cosmos DB の セキュリティ ベースライン に従ってプライベート エンドポイントを使用して、攻撃領域を減らします。
包括的なセキュリティ監視戦略を実装します。 コントロール プレーン ログを使用して、ユーザー アクセス、セキュリティ侵害、およびリソース操作を監査します。
データ プレーン メトリックを使用して、データエグレス、データ変更、使用状況、待機時間を監視します。
セキュリティで保護された開発とテストのプラクティスを使用します。 データへの安全なアクセスのために、最適なソフトウェア開発プラクティスに従ってください。 Azure Cosmos DB と対話するアプリケーションを開発するときは、セキュリティで保護されたコーディングプラクティスに従い、セキュリティで保護されたコード レビューを実行します。
推奨事項
勧告 | メリット |
---|---|
パブリック エンドポイントを無効にし、可能な限 りプライベート エンドポイントを使用します 。 | プライベート エンドポイントを介してプライベート ネットワークを使用すると、アカウントに対する攻撃の影響を受けやすい領域が減少します。 |
ロールベースのアクセス制御 (RBAC) を使用して、明確に定義された割り当て内の特定の ID とグループへのコントロール プレーン アクセスを制限します。 | RBAC を使用すると、アカウントへの不正アクセスを防ぐことができます。 最小限の特権の原則に基づいて、Azure Cosmos DB にアクセスするユーザーまたはアプリケーションに適切なロールとアクセス許可を割り当てます。 |
仮想ネットワーク エンドポイントとルールを作成して、アカウントへのアクセスを制限します。 ネットワーク セキュリティ グループ (NSG) を使用して、Azure Cosmos DB リソースとの間のトラフィックを制御します。 | 仮想ネットワーク サービス エンドポイント、NSG、ファイアウォール規則は、Azure Cosmos DB アカウントへのアクセスを制限し、未承認のアクセスからデータを保護するのに役立ちます。 |
インジェクション攻撃、クロスサイト スクリプティング、安全でない直接オブジェクト参照などの一般的なセキュリティ脆弱性から保護します。 セキュリティ リスクを防ぐために、一般的な HTTP 状態コードの入力検証、パラメーター化されたクエリ、および適切なエラー処理を実装します。 | 入力検証は、悪意のあるデータがアプリケーションによって処理されるのを防ぐのに役立ちます。 このアプローチにより、セキュリティ侵害やデータ破損につながる可能性のある有害なデータがブロックされます。 適切なエラー処理により、アプリケーションは制御された方法でエラーに対応でき、機密情報が漏えいするのを防ぐことができます。 |
コントロール プレーン ログを監視 して、Azure Cosmos DB アカウントに対する未承認の変更を検出します。 | 監視を使用すると、アクセス パターンと監査ログを追跡して、データベースがセキュリティで保護され、関連するデータ保護規制に準拠していることを確認できます。 データ プレーンメトリックの監視は、セキュリティ侵害を明らかにする可能性のある未知のパターンを特定するのにも役立ちます。 |
Microsoft Defender for Azure Cosmos DB を有効にして、異常なアクティビティが発生したときにセキュリティ アラートをトリガーします。 | Microsoft Defender は、アカウント内のデータベースを悪用しようとする試みを検出します。 Defender は、潜在的な SQL インジェクション、疑わしいアクセス パターン、およびその他の潜在的な悪用アクティビティを検出します。 |
コストの最適化
コストの最適化では、支出パターンの検出 、重要な領域への投資の優先順位付け、ビジネス要件を満たしながら組織の予算を満たすために他の での最適化に重点を置いています。
コスト最適化の設計原則は、これらの目標を達成し、Cosmos DB for No SQL とその環境に関連する技術設計で必要に応じてトレードオフを行う高度な設計戦略を提供します。
設計チェックリスト
投資のコスト最適化 の 設計レビュー チェックリストに基づいて、設計戦略を開始します。 ワークロードの設計を、そのワークロードに割り当てられた予算に合わせて微調整します。 設計では、適切な Azure 機能を使用し、投資を監視し、時間の経過と同時に最適化する機会を見つける必要があります。
Azure Cosmos DB のスケーリング戦略を最適化します。 Azure Cosmos DB が ストレージとスループットのスケーリングを処理する方法について説明します。 要件を満たすために、パフォーマンスとコストの適切なバランスを決定します。
ワークロードに適したスループット割り当てスキーマを選択します。 データベースまたはコンテナー レベルで分散される標準スループットと自動スケーリング スループットの利点を確認します。 また、必要に応じてサーバーレス オプションを検討してください。 ワークロードのトラフィック パターンを分析して、 最適なスループット割り当てスキームを選択します。
カーディナリティが高く、変更されていないパーティション キーまたはパーティション キーのセットを決定します。 既存のガイダンスとベスト プラクティスを使用して、適切なパーティション キーを選択します。 また、パーティション キーを決定するときは、 インデックス作成ポリシー を検討してください。
Azure Cosmos DB のデータ コストを最適化します。 データのインベントリを取得し、ワークロードに予想される全体的なデータ ストレージを計算します。 項目とインデックスの両方のサイズは、データ ストレージ のコストに影響します。 レプリケーションとバックアップがストレージ コストに与える影響を計算します。
使用または不要になった古いアイテムを自動的に削除する戦略を作成します。 必要に応じて、これらの項目を削除する前に、低コストのストレージ ソリューションにエクスポートします。
コストに合わせてクエリを最適化します。 パーティション間の参照を最小限に抑える最も一般的なクエリを評価します。 この情報を使用して、パーティション キーを選択するか、インデックス作成ポリシーをカスタマイズするプロセスを通知します。
プロジェクションを使用して、大規模なクエリ結果セットのスループット コストを削減します。 クエリを作成して、結果セットで必要とされる最小限のフィールド数のみを推定します。 フィールドの計算が必要な場合は、サーバー側とクライアント側の計算を実行する場合のスループット コストを評価します。
無制限のクロスパーティション クエリは使用しないでください。 クエリを評価して作成し、可能な限り単一の論理パーティション内で検索するようにします。 クエリ フィルターを使用して、クエリの対象となる論理パーティションを制御します。 クエリが論理パーティション間で検索する必要がある場合は、フル スキャンではなく、論理パーティションのサブセットのみを検索するようにクエリをバインドします。
ワークロード内の一般的な操作とクエリを考慮するインデックス作成ポリシーを設計します。
推奨事項
勧告 | メリット |
---|---|
1 秒あたりの RU の使用状況とパターンを監視します。 クエリやその他のデータ調査手法を使用して、アプリケーション コード内のアンチパターンを見つけます。 | Azure Cosmos DB デプロイの初期段階からメトリックを使用して RU 消費量を監視すると、過剰な RU を消費する非効率的なクエリや操作を特定するのに役立ちます。 クエリを最適化してコストを削減できます。 |
ワークロードに合わせて インデックス作成ポリシー をカスタマイズします。 一般的なクエリのインデックス作成に必要なパスのみに基づいて、インデックス作成ポリシーを使用します。 書き込み負荷の高いワークロードの場合は、クエリで使用されない列の自動インデックス作成を無効にします。 |
既定のインデックス作成ポリシーは、アイテム内のすべてのパスにインデックスを付け、RU の消費量とコストに大きく影響する可能性があります。 インデックス作成ポリシーをカスタマイズすると、特定の要件に合わせてインデックス作成戦略を調整できます。 このアプローチは、最適なパフォーマンスとリソースの使用を保証するのに役立ちます。 |
スループットの消費量とデータ ストレージを論理パーティション間で均等に分散するワークロードのパーティション キー を選択します。 トラフィックが過剰に集中するホットパーティションを避けてください。 パーティションが不均衡な場合、スループット コストと一時的なエラーが増加する可能性があります。 また、無制限のパーティション間クエリの数も最小限に抑える必要があります。 最も一般的な検索クエリを使用して、単一パーティションクエリまたは有界クロスパーティション クエリのみを実行する可能性のあるパーティション キーを特定します。 |
適切なパーティション キーを選択すると、データが均等に分散されるため、ホット パーティションの可能性が低下し、スループットの消費量が最適化されます。 このアプローチにより、効率が大幅に向上し、コストが削減されます。 |
Azure Cosmos DB インスタンスに適したプロビジョニング済みスループット オプションを選択します。
サーバーレスまたはプロビジョニング済みのスループットと、手動プロビジョニングまたは自動スケーリングを選択します。 ワークロードの特定のニーズに応じて、これらのオプションをデータベースまたはコンテナー レベルで適用します。 一般に、小規模なワークロードと開発/テスト ワークロードは、データベース レベルでサーバーレス スループットまたは手動共有スループットの恩恵を受けます。 大規模でミッション クリティカルなワークロードは、コンテナー レベルでプロビジョニングされたスループットの恩恵を受ける可能性があります。 |
適切なプロビジョニング済みスループット オプションを選択すると、過剰プロビジョニングやプロビジョニング不足を回避してコストを最適化できます。 また、運用コストを削減しながら、アプリケーションがさまざまなトラフィック パターンを効果的に処理できるようにします。 |
アプリケーションの 既定の整合性レベル を構成します。 必要に応じて、クライアント セッション の既定の整合性レベルをダウングレード します。 より強力な整合性レベルでの読み取りに関連するコストが高いことを検討してください。 標準の既定の整合性レベルを変更したり、クライアント セッションでオーバーライドしたりする必要がない場合があります。 |
アプリケーションに適した整合性レベルを選択すると、データの整合性、可用性、パフォーマンス、コストの間で望ましいバランスを実現できます。 |
開発/テスト ワークロードの場合は、Docker コンテナー イメージとしても使用できる Azure Cosmos DB エミュレーターを使用します。 | エミュレーターは、開発/テストと継続的インテグレーションのユース ケースのコストを削減します。 |
トランザクション バッチ操作を使用します。 データを挿入するための論理パーティション キー内のトランザクション バッチ操作を利用するようにパーティションを設計します。 クライアント側 SDK でバッチ操作を使用して、1 つのトランザクション要求で複数のドキュメントを挿入、更新、または削除します。 |
Azure Cosmos DB でトランザクション バッチ操作を使用すると、個々の要求の数を減らすことができます。 この方法は、待機時間を短縮し、スループットの効率を向上するのに役立ちます。 |
Time to Live (TTL) を 実装して、不要なデータを自動的に削除します。 必要に応じて、期限切れのデータを低コストのストレージ ソリューションにエクスポートします。 | TTL を使用することで、データベースが散らかることなく、ストレージ コストを最適化できます。 期限切れのデータを低コストのストレージ ソリューションにエクスポートすると、コンプライアンス上の目的で履歴データを保持しながら、コストをさらに削減できます。 |
大規模な集計のための 分析ストア を検討してみてください。 | Azure Cosmos DB 分析ストアは、データを別の列ストアに自動的に同期して、大規模な集計、レポート、分析クエリを最適化します。 |
オペレーショナル エクセレンス
オペレーショナル エクセレンスは主に、開発プラクティス、可観測性、リリース管理の手順に重点を置いています。
オペレーショナル エクセレンス設計原則、ワークロードの運用要件に対してこれらの目標を達成するための高度な設計戦略を提供します。
設計チェックリスト
Azure Cosmos DB for NoSQL に関連する監視、テスト、デプロイのプロセスを定義するための オペレーショナル エクセレンスの設計レビュー チェックリスト に基づいて、設計戦略を開始します。
Azure Cosmos DB インスタンスを監視します。 ワークロード監視ソリューションには、リージョン間で Azure Cosmos DB インスタンスを含めます。
ワークロードを区別するために、クライアント アプリケーションで識別子を作成します。 各ログ エントリまたはメトリックに関連付ける必要があるワークロードを識別するには、ユーザー エージェント サフィックスなどのフラグを検討してください。
さまざまなワークロードを区別し、例外的なシナリオにフラグを設定し、例外とエラーのパターンを追跡し、ホスト マシンのパフォーマンスを追跡するためのログとメトリックの監視戦略を下書きします。
調整の監視、スループットの割り当ての分析、データのサイズの追跡を行う複数のアラートを定義します。
パーティションとインデックスの設計に基づいて、予想されるメトリックしきい値を計画します。 これらのメトリックを監視して、計画されたしきい値にどの程度近いかを判断する計画を作成します。
コードとしてのインフラストラクチャ (IaC) を使用してデプロイを自動化します。 コードデプロイプラクティスに、インフラストラクチャのデプロイや構成の変更など、すべての Azure Cosmos DB の変更を組み込みます。
Azure Cosmos DB for NoSQL アカウントとリソースのデプロイを自動化するためのベスト プラクティスを作成して適用します。
チームが同じテンプレートを使用して、他の非運用環境にデプロイすることを確認します。
推奨事項
勧告 | メリット |
---|---|
アプリケーション開発者が最新バージョンの開発者 SDK を使用していることを確認します。 詳細については、「 .NET SDK と Java SDK」を参照してください。 各 Azure Cosmos DB for NoSQL SDK には、推奨される最小バージョンがあります。 | 最新バージョンの開発者 SDK を使用すると、アプリケーションのパフォーマンス、セキュリティ、互換性を維持するのに役立ちます。 |
各 SDK の診断インジェクション手法を使用して 、補足 的な診断をキャプチャします。 これらの手法では、既定のメトリックとログと共に、ワークロードに関する補足情報が追加されます。 詳細については、「 .NET SDK と Java SDK」を参照してください。 | 診断を挿入することで、カスタム メトリック、トレース、ログをキャプチャして、トラブルシューティングを向上させ、アプリケーションを最適化できます。 既定のメトリックとログに含まれないワークロードの特定の側面を監視できます。 |
ホスト コンピューター リソース のアラート を作成します。 | 接続と可用性の問題は、クライアント側のホスト コンピューターの問題が原因で発生する可能性があります。 Azure Cosmos DB for NoSQL SDK を使用するクライアント アプリケーションを使用して、ホスト マシン上の CPU、メモリ、ストレージなどのリソースを監視します。 |
正規化された RU 消費量などのメトリックを使用して、スループット調整のアラートを作成します。 このメトリックは、データベースまたはコンテナーでのプロビジョニング済みスループットの使用率を測定します。 アラートを使用して、このメトリックが予想されるしきい値を超えた時間を追跡します。 時間の経過と同時に、ワークロードの詳細を確認し、アラートを調整します。 |
スループット調整が一貫して 100%である場合、要求は一時的なエラーを返す可能性があります。 このメトリックに基づいてアラートを作成することで、使用状況が定義されたしきい値を超えたときに通知を受け取ることができます。 アプリケーションのパフォーマンスに影響を与える前に、修正措置を講じることができます。 |
クエリ パフォーマンス メトリック を使用して、時間の経過に伴う上位クエリのパフォーマンスを追跡します。 クエリのパフォーマンスが低い場合は、パフォーマンスのトラブルシューティングを行い、クエリのベスト プラクティスを適用します。 | パフォーマンス メトリックを使用すると、クエリの実行方法と潜在的なボトルネックの場所をより深く理解できます。 この情報は、インデックス作成ポリシーとクエリの最適化に関する情報に基づいた意思決定を行う際に役立ちます。 |
テンプレートを使用して、アカウント リソースを自動的にデプロイします。 アカウントとその後のリソースのデプロイを自動化するには、 Azure Resource Manager、 Bicep、または Terraform テンプレートを検討してください。 | IaC テンプレートは、わかりやすいモデルでインフラストラクチャを定義するのに役立ちます。 反復性と一貫性を容易にし、均一で予測可能なワークロード環境を維持するのに役立ちます。 |
主要なメトリックを追跡して、パーティションごとの RU 使用量、調整、要求ボリュームなど、ワークロード内の一般的な問題を種類別に特定します。 | これらの主要なメトリックを監視すると、さまざまな条件下でのデータベースのパフォーマンスを理解するのに役立ちます。 監視は、修正措置を取ることができるように、一般的な問題を特定するのにも役立ちます。 |
パフォーマンス効率
パフォーマンス効率とは、容量の管理により、負荷が増加してもユーザー エクスペリエンスを維持することです。 この戦略には、リソースのスケーリング、潜在的なボトルネックの特定と最適化、ピーク パフォーマンスの最適化が含まれます。
パフォーマンス効率設計の原則、予想される使用に対してこれらの容量目標を達成するための高度な設計戦略を提供します。
設計チェックリスト
Azure Cosmos DB for NoSQL の主要業績評価指標に基づいてベースラインを定義するための パフォーマンス効率の設計レビュー チェックリスト に基づいて、設計戦略を開始します。
Azure Cosmos DB の容量を計画し、事前に管理します。 アプリケーションのパフォーマンス ベースラインを定義します。 処理する必要がある同時ユーザーとトランザクションの数を測定します。 平均的なユーザー フロー、一般的な操作、使用量の急増などのワークロードの特性を考慮してください。
ターゲット ユーザーを調査します。 それらに最も近い Azure リージョンを決定します。
データ設計を最適化します。 対応する JSON ドキュメントができるだけ小さいように項目を設計します。 必要に応じて、複数の項目にデータを分割することを検討してください。
アイテムのサイズ を 100 KB 未満にしてください。 項目が大きいほど、一般的な読み取りと書き込みの操作により多くのスループットが消費されます。 すべてのフィールドを射出する大きな項目に対するクエリでは、スループットコストも大幅に増加する可能性があります。
適切なレベル、機能、課金モデルを選択します。 ワークロードに分析ストアが必要かどうかを判断します。 複雑なクエリについては、 Azure Synapse Link などの分析ストアとサービスを検討してください。
デプロイ モデルを最適化します。 エンド ユーザーに最も近いリージョンに Azure Cosmos DB for NoSQL をデプロイします。 |エンド ユーザーに最も近いリージョンに Azure Cosmos DB for NoSQL をできるだけデプロイすることで、待機時間を短縮します。
パフォーマンスのためにクエリを最適化します。 クエリ パフォーマンスの ヒント を確認し、ユース ケースに適用する戦略を適用します。
1 つ以上の順序フィールドを使用するクエリを識別します。 また、複数のフィールドに影響する操作を特定します。 これらのフィールドをインデックス作成ポリシーの設計に明示的に含めます。
可能な限り一括操作を使用するように大規模なワークロードを設計します。
子配列に対するクエリを特定し、 それらがより効率的なサブクエリの候補であるかどうかを判断します。
最も一般的で複雑なクエリを調査します。 複数の参照、結合、または集計を使用するクエリを識別します。 パーティション キーまたはインデックス作成ポリシーの設計上の考慮事項で、これらのクエリを検討してください。
最も一般的なクエリでは、各ページに予想される結果の数を決定します。 この数値は、プリフェッチされた結果のバッファー内の項目数を形式化するのに役立ちます。
コード ロジックを最適化します。 ほとんどの SDK で、
CosmosClient
クラスのシングルトン パターンを使用します。 ほとんどの SDK のクライアント クラスをシングルトンとして使用します。 クライアント クラスは独自のライフサイクルを管理し、破棄されないように設計されています。 インスタンスを常に作成して破棄すると、パフォーマンスが低下する可能性があります。
推奨事項
勧告 | メリット |
---|---|
容量計算ツールなどのツールを使用して、パフォーマンス ベースラインに必要なスループットの量を決定します。 自動スケーリングなどの機能を使用して、実際のスループットを実際のワークロードに合わせてスケーリングします。 その後、実際のスループット消費量を監視し、調整を行います。 | 容量計算ツールを使用すると、リソースのプロビジョニングに関する情報に基づいた意思決定を最初に行うことができます。 不要なコストをかけずに、データベースが予想される負荷を処理できることを確認できます。 自動スケーリングスループットは、実際のワークロードのニーズに合わせてプロビジョニングされたスループットを自動的に調整します。 |
必要に応じて、クライアント側とサーバー側で最適化手法を使用します。 組み込みの 統合キャッシュを利用します。 ページごとにプリフェッチまたは バッファー処理され、返される項目の数を管理するように SDK を構成します。 | コード最適化手法を使用すると、繰り返し読み取りとクエリの RU 料金を減らすことで、ユーザー エクスペリエンスを向上させ、クライアント側とサーバー側のアプリケーションの効率を高めることができます。 これらの利点により、コストを削減できます。 |
エンド ユーザーに最も近いリージョンに Azure Cosmos DB インスタンスをデプロイします。 エンド ユーザーに近いリージョンを優先するように .NET または Java SDK を構成します。 単一または複数のリージョンで書き込み操作を構成する方法に関係なく、読み取りレプリケーションを利用して最適化された読み取りパフォーマンスを提供します。 |
エンド ユーザーに最も近いリージョンにデータベースをデプロイすると、待機時間が短縮され、ユーザー エクスペリエンスが向上します。 読み取りレプリケーションでは、書き込み操作の構成方法に関係なく、パフォーマンスの高い読み取り操作が可能になります。 |
最適なパフォーマンスを得るための ダイレクト モード 用 SDK を構成します。 このモードを使用すると、クライアントはサービス内のパーティションに直接接続して伝送制御プロトコル (TCP) 接続を開き、中間ゲートウェイなしで直接要求を送信できます。 | ダイレクト モードでは、ネットワーク ホップが少なくなるため、パフォーマンスが向上します。 |
高スループットを必要とするシナリオでは、クライアント SDK の 一括機能 を使用します。 一括機能は、スループットを最大化するために操作を自動的に管理およびバッチ処理します。 | 一括機能を使用すると、バックエンド要求の数が減り、タスクがパーティション間で効率的に分散されます。 この方法により、パフォーマンスとリソースの使用状況が向上します。 |
一括操作のインデックス作成を無効にします。 挿入、置換、アップサート操作が複数ある場合は、インデックス作成を無効にして、対応する SDK の 一括サポート を使用しながら操作の速度を向上させます。 後でインデックス作成をすぐに再び有効化できます。 | 一括操作中にインデックス作成を無効にすると、インデックスの維持に関連するオーバーヘッドが軽減されます。 データの挿入と更新を高速化する一括操作にリソースをより適切に利用できます。 |
複雑な操作でフィールドの 複合インデックス を作成します。 複数のフィールドを持つ ORDER BY ステートメントに複合インデックスを使用することを検討してください。 |
複合インデックスを使用すると、複数のフィールドに対する操作の効率が向上し、データの取得が高速かつ効率的になります。 |
SDK のホスト クライアント マシンを最適化します。 ほとんどの場合、 .NET または Java 用の SDK を使用する 64 ビット ホスト マシンでは、少なくとも 4 つのコアと 8 GB のメモリを使用します。 ホスト マシンで 高速ネットワークを 有効にします。 |
より高い仕様のマシンを使用すると、SDK がより多くの操作を同時に処理できるようになります。 高速ネットワークは待機時間を短縮するのに役立ち、応答時間が長くなります。 |
サブクエリを戦略的に使用して、大規模なデータ セットを結合するクエリを最適化します。 サブクエリを使用して自己結合式を最適化し、項目内の配列を結合する前に配列をフィルター処理します。 パーティション間クエリの場合は、クエリを最適化してパーティション キーのフィルターを含め、可能な限り最小限のパーティションへのクエリのルーティングを最適化します。 |
子配列を結合するクエリは、複数の配列が含まれ、フィルター処理されていない場合、複雑さが増す可能性があります。 サブクエリを使用することで、配列を結合する前にフィルター処理できるため、自己結合式の効率が向上します。 |
最も複雑なクエリ には分析ワークロード を使用します。 大規模なコンテナーに対して頻繁に集計または結合クエリを実行する場合は、分析ストアを有効にして、Azure Synapse Analytics でクエリを実行することを検討してください。 |
分析ワークロードはトランザクション ワークロードから分離され、複雑なクエリの処理用に最適化されています。これにより、パフォーマンスの低下を防ぎ、より高速な結果が得られます。 |
Azure ポリシー
Azure には、Azure Cosmos DB for NoSQL とその依存関係に関連する広範な組み込みポリシー セットが用意されています。 上記の推奨事項の一部は、Azure Policy を使用して監査できます。 たとえば、次のことを確認できます。
Azure Cosmos DB アカウントは、少なくとも 2 つのリージョンにデプロイされます。
Azure Cosmos DB データベース アカウントは、ゾーン冗長性のために適切に構成されます。
Azure Cosmos DB データベース アカウントでは、認証に Microsoft Entra ID が必要になるように、ローカル認証方法が無効になっている必要があります。
パブリック ネットワーク アクセスが無効になっているため、Azure Cosmos DB アカウントはパブリック インターネット上で公開されません。
リソース プロバイダーを使用して Azure Cosmos DB データベースとコンテナーを作成する場合は、最大スループットを制限する必要があります。
包括的なガバナンスについては、 Azure Cosmos DB for NoSQL の Azure Policy 組み込み定義 と、データ ストレージのセキュリティに影響する可能性があるその他のポリシーを確認します。
Azure Advisor の推奨事項
Azure Advisor は、Azure デプロイを最適化するためのベスト プラクティスに従うのに役立つ、パーソナライズされたクラウド コンサルタントです。
詳細については、Azure Advisor に関するページを参照してください。