Azure SQL Database のスケール アウトを試してみよう
Microsoft Japan Data Platform Tech Sales Team
阪本 真悟
はじめに
Azure SQL Database は柔軟性の高いデータベース サービスですので、必要に応じて垂直および水平方向の拡張が可能です。ビジネスが軌道に乗り、予想以上にデータベースへの負荷が高まった場合も容易に対応が可能です。拡張性の高さはクラウド環境の大きなメリットと言えます。
垂直方向の拡張とは、サイズの変更により個々のデータベースのパフォーマンス レベルを増減することを意味します。"スケールアップ" とも呼ばれます。
水平方向の拡張とは、容量または全体のパフォーマンスを調整するためにデータベースを追加または削除することを意味します。 “スケールアウト” とも呼ばれます。
今回は2つ目の水平方向の拡張を、 「シャード マップ マネージャー」と シャード マップを管理するための 「Elastic Database クライアント ライブラリ」を使用して試してみましょう。
シャード マップ マネージャーとは
シャーディングは、同じ構造を持つ大量のデータを数多くの独立したデータベースに分散する手法です。拡張したいときにどんどん新しいデータベースを追加することが可能になります。
シャード マップ マネージャーは、管理対象のシャード セット内のすべてのシャード (データベース) についてのグローバル マッピング情報を保持する特殊なデータベースです。 アプリケーションは シャード マップ マネージャーに保持されているシャーディング キーの値に基づいて、分散先の適切なシャード(データベース)に接続できます。
以下の図が参考になります。Shard1, Shard2, Shard3 と書かれているのが実際にデータを格納するデータベースで、Range[1, 100] と書かれているのがシャーディング キーの範囲を表しています。
Elastic Database クライアント ライブラリ
シャード マップの管理(シャード マップの作成、シャードの追加など)、複数のデータベースをまたいだクエリを制御するために Elastic Database クライアント ライブラリを使うことが出来ます。
Elastic Database クライアント ライブラリは Java 用と .Net 用が用意されています。今回は.Net 用 Elastic Database ツールを使ってみました。
ライブラリはMicrosoft.Azure.SqlDatabase.ElasticScale.Clientからインストールが可能です。 ライブラリは、次のセクションで説明するサンプル アプリと共にインストールされます。
このあたりの手順の詳細はここに記述されています。
サンプル アプリケーションの実行
Elastic Database クライアント ライブラリの様々な機能を試してみるために今回は、サンプル アプリケーションを使ってみます。
ElasticScaleStarterKit.sln ソリューションを C# ディレクトリから開いてプロジェクトを作成します。
サンプル プロジェクトのソリューションで、app.config ファイルを開きます。 ファイルの指示に従って、使用する Azure SQL Database サーバー名とサインイン情報 (ユーザー名とパスワード) を追加します。
修正が終わったらアプリケーションをビルドして実行しますが、事前にファイア ウォールのポリシーに接続元クライアントの IP アドレスを追加しないとエラーが発生しますので、アプリケーションを実行する前に追加しておきましょう。
※ファイアウォールの設定は Azure のポータル画面、SQL database の Overview 画面から「Set server firewall」をクリックして変更が可能です。
1. シャード マップ マネージャの追加
アプリケーションを実行すると次のようなメッセージが表示されますので、「1」を選んで新しいシャード マップ マネージャを作成します。
次のようなメッセージが表示されて無事に作成が出来ました。ツールを使って次の処理を実行しています。
1.シャード マップ マネージャを作成
2.シャーディング キーの範囲を<0-100>に設定したシャード0を作成
3.シャーディング キーの範囲を<100-200>に設定したシャード1を作成
実際にデータベースに接続して中身を見てみます。
シャード マップ マネージャには以下のようなテーブルが作成されていました。
テーブルの中を見てみると、[ShardsGlobal] テーブルには DB が管理する[ShardID]、[ShardMapId] と一緒に [ServerName](サーバ名)と、[DatabaseName](データベース名)が格納されていることが分かります。
[ShardMappingsGlobal] テーブルには [ShardID]、[ShardMapId] とシャーディングキーの範囲(最小値・最大値)が 16 進数で格納されていました。
2.シャード(データベース)の追加
もう一度サンプル アプリケーションに戻ります。Elastic Database クライアント ライブラリからはシャード(データベース)の追加など様々な管理機能を実行することも可能です。
アプリケーションのメニューから「2」新規シャード(データベース)の追加を選んでみましょう。
シャーディング キーの範囲を<200-300>に設定したシャード2を作成することが出来ました。
3.スケールアウトされた環境での動作を確認
サンプル アプリケーションからいくつかエントリを追加してデータベースの中を確認してみましょう。メニューから「3」を何度か実行してみました。
データベースを確認してみるとシャーディング キーに応じてエントリが格納されていることが分かります。
シャード0 <シャーディング キーの範囲:0-100>
最後に Elastic Database クライアント ライブラリを使ってスケールアウトされた環境に対して参照クエリを発行してみます。これもサンプル アプリケーションからテスト実行が可能です。「4」を選んで実行してみます。
全てのエントリがまとめて表示されたことを確認しました。
このように「シャード マップ マネージャー」と「Elastic Database クライアント ライブラリ」を使って動作を確認することが出来ました。
複数のシャード(データベース)にまたがるクエリの実行が必要となるデータ収集/レポート作成などのタスクに活用することが出来ると思います。是非、試してみてください。