SQL Azureを徹底活用

第7回 スケールアウトとSQL Azure Federation

この記事を読むのに必要な時間:およそ 3 分

クラウドの特徴はスケールアウト

クラウドサービスの多くは,大量のデータを格納したり大量の処理を捌くのに,複数のコンピュータを並列に繋げるスケールアウトが採用されています。SQL AzureもマイクロソフトのDCで提供されるクラウドサービスです。SQL Azureのサービスの特徴を見直してみましょう。

SQL Azureのデータベース最大容量は150GBです。また共有サービスモデルで提供されるため,過剰なリソース消費をした場合,接続を切断されてしまいます。大容量のデータを格納するデータベースや,負荷が高いデータベースはSQL Azureで運用できないように思えるかもしれません。確かに運用できない時期もありましたが,現在は運用することができます。SQL Azureで大容量データを格納したり,高負荷環境の運用を可能にしたのが2011年12月に追加されたSQL Azure Federationです。

SQL Azure Federationとパーティショニング

SQL Azure Federationは,SQL Azureデータベースをスケールアウトする機能です。複数のデータベースを使用して,負荷の分散,データの分散をします。SQL Azure Federationは,テーブルのパーティショニングで行方向に分けて分散させます。

テーブルのパーティショニングとは,どういったものか具体例を出して説明します。たとえば顧客テーブルがあったとします。顧客テーブルには顧客IDや顧客名などの列があります。顧客テーブルは1つで,100万件格納されているのが図1です。

図1

図1

図2は顧客テーブルを顧客IDに応じて複数のテーブルに分けました。各テーブルは10万件ずつ格納するようにし,顧客IDが1から100000までが顧客テーブル1,顧客IDが100001から200000までが顧客テーブル2というように,顧客IDに紐づけて顧客テーブルを10個に分割しました。

テーブルを分割することで,テーブルに格納されるデータを複数テーブルに分散させることができました。しかし,顧客情報を参照するたびに,どの顧客テーブルに参照しようとしている顧客情報が格納されているかを意識する必要があります。顧客ID504000は,顧客ID500001から600000の顧客情報を格納している顧客テーブル6に含まているので,顧客テーブル6を参照します。

図2

図2

顧客IDから参照先を調べるのは手間が増えてしまいます。データベースの機能として提供されるパーティショニングは,その手間を無くしています。図3のように,テーブルは図2のように顧客IDに応じて複数テーブルとして分散されています。しかし,あたかも1つのテーブルのように見せます。たとえば,顧客ID504000の情報を参照するときも顧客テーブルを参照するだけです。データベース側で顧客IDから格納先を調べ,自動的に対象テーブルに振り分けてくれます。このように複数テーブルにデータが分散されているにもかかわらず,格納先を意識する必要が無いのがテーブルのパーティショニング機能です。

図3

図3

SQL Azure Federationのパーティショニングも,テーブルを特定のキーに応じて複数のテーブルに分けますが,どのテーブルに含まれているのかを意識する必要が無いという点で同じ考え方です。

SQL Azure Federationでは,分割したテーブル毎に別々のデータベースに格納します。図4のように,フェデレーションには複数のデータベースが含まれています。それぞれのデータベースは,テーブルを分割するキーの範囲で分割されます。今回の例では,100000区切りに分割していますので,各データベースも「最小値~100000」⁠100001~200000」……「900001~最大値」で区切られます。

図4

図4

SQL Azure Federationでは,テーブルをキーに応じて分割し,複数のデータベースに分散配置してスケールアウトすることで,大容量のデータを格納し,高負荷を分散処理できるようにしました。複数のデータベースに分割しつつも,どのデータベースに格納されているのかを意識しなくても良いようになっています。

著者プロフィール

大和屋貴仁(やまとやたかひと)

Microsoft MVP for SQL Azure

2010年1月のWindows Azure正式リリース直後に,sqlazure.jpドメインを取得。ネタを探す日々ですので,SQL Azureで不明点があれば遠慮なくTwitterなどでご相談くださいませ。

Twitter:SQLAzureJP

URL:http://sqlazure.jp

コメント

コメントの記入