パーティション分割による制限の回避

パーティション分割を使用して、データベース、ネットワーク、コンピューティングの制限に対処します。

クラウドでは、すべてのサービスにスケール アップ機能の制限があります。 Azure サービスの制限については、「Azure サブスクリプションとサービスの制限、クォータ、制約」をご覧ください。 制限には、コア数、データベース サイズ、クエリ スループット、ネットワーク スループットが含まれます。 システムが十分な規模になると、1 つ以上の制限に達する可能性があります。 これらの制限を回避するには、パーティション分割を使用します。

システムをパーティション分割する場合、次のようなさまざまな方法があります。

  • データベース サイズ、データ I/O、または同時セッション数の制限を回避するには、データベースをパーティション分割します。

  • 要求数やコンカレント接続数の制限を回避するには、キューまたはメッセージ バスをパーティション分割します。

  • App Service プランごとのインスタンス数の制限を回避するには、App Service Web アプリをパーティション分割します。

データベースは、"行方向"、"列方向"、または "機能的" にパーティション分割できます。

  • シャーディングとも呼ばれる行方向のパーティション分割では、各パーティションがデータ セット全体のサブセットのデータを保持します。 パーティションは同じデータ スキーマを共有します。 たとえば、名前が A ~ M で始まる顧客と N ~ Z で始まる顧客を、それぞれ異なるパーティションに配置します。

  • 列方向のパーティション分割では、各パーティションがデータ ストアに含まれる項目のフィールドのサブセットを保持します。 たとえば、アクセス頻度の高いフィールドとアクセス頻度の低いフィールドを、それぞれ異なるパーティションに配置します。

  • 機能的パーティション分割では、システム内の各有界コンテキストによって使用される方法に従ってデータをパーティション分割します。 たとえば、請求書データと製品在庫データを、それぞれ異なるパーティションに格納します。 スキーマは独立しています。

詳細なガイダンスについては、データのパーティション分割に関する記事をご覧ください。

Recommendations

アプリケーションのさまざまな部分をパーティション分割する: データベースがパーティション分割の候補の 1 つであることは明らかですが、ストレージ、キャッシュ、キュー、コンピューティング インスタンスも検討します。

ホットスポットを回避するようにパーティション キーを設計する: データベースをパーティション分割しても、引き続き 1 つのシャードで要求の大半を取得している場合、、問題は解決していません。 すべてのパーティションに負荷を均等に分散させるのが理想的です。 たとえば、一部の文字が頻出するため、顧客名の頭文字ではなく顧客 ID でハッシュします。 メッセージ キューをパーティション分割するときにも同じ原則が適用されます。 キューのセット全体にメッセージを均等に分散させるパーティション キーを選択します。 詳細については、シャーディングに関する記事をご覧ください。

パーティション分割によって Azure サブスクリプションとサービスの制限を回避する: 個々 のコンポーネントとサービスには制限がありますが、サブスクリプションとリソース グループにも制限があります。 非常に大規模なアプリケーションでは、これらの制限を回避するためにパーティション分割することが必要な場合があります。

さまざまなレベルでパーティション分割する: VM にデプロイされたデータベース サーバーについて考えてみましょう。 VM には、Azure Storage によってサポートされる VHD があります。 ストレージ アカウントは Azure サブスクリプションに属しています。 階層の段階ごとに制限があることに注意してください。 データベース サーバーには、接続プールの制限がある場合があります。 VM には CPU とネットワークの制限があります。 ストレージには IOPS の制限があります。 サブスクリプションには、VM のコア数の制限があります。 一般に、階層の下位でパーティション分割する方が簡単です。 サブスクリプション レベルでパーティション分割する必要があるのは、大規模なアプリケーションだけです。