Azure SQL Database を使用したスケールアウト
適用対象: Azure SQL データベース
Elastic Database ツールを使用すると、Azure SQL Database のデータベースを簡単にスケールアウトできます。 これらのツールと機能では、Azure SQL Database のデータベースのリソースを使用して、トランザクションのワークロードに対するソリューション、特にサービスとしてのソフトウェア (SaaS) アプリケーションを作成できます。 Elastic Database は、次の機能で構成されています。
- Elastic Database クライアント ライブラリ:クライアント ライブラリ機能を使用すると、シャード化されたデータベースを作成および管理できます。 「Elastic Database ツールの概要」を参照してください。
- スケールアウトされたクラウド データベース間でデータを移動する: シャード化されたデータベース間でデータを移動します。 このツールは、マルチテナント データベースからシングル テナント データベースに (またはその逆に) データを移動させるのに便利です。 「split-merge サービスをデプロイして、シャード化されたデータベース間でデータを移動する」を参照してください。
- Azure SQL データベースの エラスティック ジョブ: ジョブを使用して、Azure SQL データベースの多数のデータベースを管理します。 ジョブを使用して、スキーマの変更、資格情報の管理、参照データの更新、パフォーマンス データの収集、テナント (顧客) テレメトリの収集などの管理操作を簡単に実行できます。
- Azure SQL データベースのエラスティック クエリの概要 (プレビュー): 複数のデータベースにまたがる Transact-SQL クエリを実行することができます。 これにより、Excel、Power BI、Tableau などのレポート作成ツールに接続できます。
- クラウド データベースにまたがる分散トランザクション: この機能を使用すると、複数のデータベースにまたがるトランザクションを実行することができます。 Elastic Database トランザクションは、ADO .NET を使用して .NET アプリケーションで利用できます。System.Transaction クラスを使用することで、これまでに培ったプログラミングの経験を活かすことができます。
次の図は、データベースのコレクションに関連する Elastic Database の機能を含めたアーキテクチャを示しています。
この図では、データベースの色は、スキーマを表しています。 同じ色のデータベースは、同じスキーマを共有します。
- SQL データベースが、シャーディング アーキテクチャを使用して Azure でホストされています。
- Elastic Database クライアント ライブラリ は、シャード セットの管理に使用します。
- 一部のデータベースは、エラスティック プールに入っています。
- エラスティック データベース ジョブは、すべてのデータベースに対して、T-SQL スクリプトを実行します。
- 1 つのシャードから別のシャードにデータを移動するときには、 分割/マージ ツール を使用します。
- Elastic Database クエリ では、シャード セット内のすべてのデータベースにまたがるクエリを記述することができます。
- エラスティック トランザクションでは、複数のデータベースにまたがるトランザクションを実行できます。
ツールを使用する理由
クラウド アプリケーションにおいて弾力性と拡張性を実現することは、VM と Blob Storage では簡単です。単純にユニットの追加や削除、能力の増強を行えば良いからです。 ところが、リレーショナル データベースでのステートフルなデータ処理では、それが依然として困難でした。 これらのシナリオでの課題:
- ワークロードのリレーショナル データベース部分の容量の拡張および縮小。
- 負荷の高いエンド ユーザー (テナント) など、データの特定のサブセットに影響を及ぼす可能性があるホットスポットの管理。
これまで、このようなシナリオには、大規模なサーバーに投資を行ってアプリケーションをサポートすることで、対処してきました。 ただし、この方法には、すべての処理が事前に定義済みのコモディティ ハードウェアで実行されるクラウドでは限りがあります。 そこで、同じ構造を持つ多くのデータベース間でデータを分散し処理を行う手法 ("シャーディング" と呼ばれているスケールアウト パターン) が、コストと弾力性の両面で従来のスケールアップ アプローチの代替案となります。
水平および垂直方向のスケーリング
次の図は、水平および垂直方向のスケーリングを示しています。エラスティック データベースのスケーリングでは、どちらも基本的な方法です。
水平方向のスケーリングとは、容量または全体的なパフォーマンスを調整するためにデータベースを追加または削除することを指します。またこれは、"スケールアウト" とも呼ばれます。同じ構造のデータベースのコレクション間でデータがパーティション分割されるシャーディングは、水平方向のスケーリングを実装する一般的な方法です。
垂直方向のスケーリングとは、個々のデータベースのコンピューティング サイズを増減することを意味します。"スケールアップ" とも呼ばれます。
ほとんどのクラウド規模のデータベース アプリケーションでは、この 2 つの手法を組み合わせて使用しています。 たとえば、サービス アプリケーションとしてのソフトウェアでは、水平方向のスケーリングを使用して新しいエンド ユーザーをプロビジョニングし、垂直方向のスケーリングを使用して、各エンドユーザーのデータベースがワークロードで必要とされる条件に応じてリソースを拡大縮小できるようにします。
- 水平方向のスケーリングは、 Elastic Database クライアント ライブラリを使用して管理します。
- 垂直方向のスケーリングは、Azure PowerShell コマンドレットを使用してサービス レベルを変更するか、エラスティック プールにデータベースを配置して実行します。
シャーディング
シャーディングとは、同じ構造を持つ大量のデータを、多数の独立したデータベースにわたって分散させる手法です。 この手法は、エンド ユーザーまたは企業向けにサービスとしてのソフトウェア (SAAS) 製品をサービスで作成するクラウド開発者の間でよく知られています。 これらのエンド ユーザーは、多くの場合、"テナント" と呼ばれます。シャーディングは、さまざまな理由で必要になる場合があります。
- データの合計数が多すぎて、個別のデータベースの制約に適合しない
- ワークロード全体のトランザクションのスループットが個別のデータベースの能力を超えている
- テナントを互いに物理的に独立させる必要があり、テナントごとに別個のデータベースが必要になる
- コンプライアンス、パフォーマンス、または地政学上の理由から、データベースの異なる部分を異なる地理的場所に配置することが必要になる
他のシナリオ (たとえば、分散されたデバイスからのデータの取り込み) では、シャーディングを使用して、一時的に構成されたデータベースのセットに値を入力できます。 たとえば、別個のデータベースをそれぞれの日または週専用に使用できます。 その場合、シャーディング キーとして (シャード化テーブルのすべての行に存在する) 日付を表す整数を使用できます。アプリケーションは、日付の範囲の情報を取得するクエリを、対象の範囲をカバーするデータベースのサブセットにルーティングする必要があります。
シャーディングは、アプリケーションのすべてのトランザクションをシャーディング キーの単一の値に制限できる場合に最適です。 これにより、すべてのトランザクションが特定のデータベースにローカルであることが保証されます。
マルチテナントとシングルテナント
一部のアプリケーションでは、テナントごとに別個のデータベースを作成する最も単純なアプローチが使用されています。 このアプローチは、テナント単位で分離、バックアップ/復元、およびリソースのスケーリングを可能にする、単一テナントのシャーディング パターンです。 シングル テナントのシャーディングでは、各データベースは特定のテナント ID 値 (またはカスタマー キー値) に関連付けられますが、キーがデータ自体に存在する必要はありません。 各要求を適切なデータベースにルーティングするのはアプリケーションの役目です。クライアント ライブラリはこの作業を簡素化できます。
複数のテナントを別個のデータベースに分離する代わりに、一緒にデータベースにパックするシナリオもあります。 このパターンが典型的なマルチテナントのシャーディング パターンです。このパターンの利用は、1 つのアプリケーションが多数の小さなテナントを管理するという状況により促進されます。 マルチテナントのシャーディングでは、データベース テーブル内の行は、テナント ID を識別するキーまたはシャーディング キーを格納するように設計されています。 ここでも、アプリケーション層は、テナントの要求を適切なデータベースにルーティングする役割を負います。これは、エラスティック データベース クライアント ライブラリによってサポートされます。 さらに、行レベル セキュリティを使用して、各テナントがアクセスできる行をフィルター処理することができます。詳細については、「Elastic Database ツールと行レベル セキュリティを使用したマルチテナント アプリケーション」をご覧ください。 マルチ テナントのシャーディング パターンでは、データを複数のデータベース間で再分散することが必要な場合があります。この再分散は、エラスティック データベースの分割/マージ ツールで容易に行うことができます。 エラスティック プールを使用する SaaS アプリケーションの設計パターンについての詳細は、「マルチテナント SaaS データベース テナント パターン」を参照してください。
マルチテナントデータベースからシングルテナント データベースへのデータ移動
SaaS アプリケーションを作成する場合は、見込顧客に試用版のソフトウェアを提供するのが一般的です。 この場合は、データにマルチテナント データベースを使用すると費用対効果を高めることができます。 ただし、見込顧客が実際に顧客になった場合、シングルテナント データベースを使用した方がパフォーマンスが向上します。 このため、顧客が試用期間中にデータを作成していた場合には、分割/マージ ツール を使用して、マルチテナント データベースから新しいシングルテナント データベースにデータを移動します。
注意
マルチテナント データベースからシングル テナントに復元することはできません。
サンプルおよびチュートリアル
クライアント ライブラリの使い方を示すサンプル アプリについては、「Elastic Database ツールの概要」をご覧ください。
ツールを使用するように既存のデータベースを変換する方法については、「既存のデータベースを移行してスケールアウト」をご覧ください。
エラスティック プールの詳細を確認するには、「エラスティック プールの価格およびパフォーマンスに関する考慮事項」を参照するか、エラスティック プールで新しいプールを作成してください。
関連するコンテンツ
まだ弾力性データベース ツールを使用していない場合は、 ファースト ステップ ガイドを参照してください。 ご質問がある場合は、SQL Database に関する Microsoft Q&A 質問ページを参照してください。機能に関するご要望は、SQL Database に関するフィードバック フォーラムで新しいアイデアを追加したり、既存のアイデアに投票したりしてください。