Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 クライアント ライブラリ」を使って動作を確認することが出来ました。
複数のシャード(データベース)にまたがるクエリの実行が必要となるデータ収集/レポート作成などのタスクに活用することが出来ると思います。是非、試してみてください。