前回 は、Azure SQL Databaseがスケールアウトを実現するための、フェデレーションの仕組みと構成、用語について説明しました。今回は、実際にフェデレーションを作成し、フェデレーションに接続し、フェデレーションテーブル、参照テーブルを作成する方法を説明します。
注意: SQL Azure Databaseは、Windows Azure SQL Databaseに、SQL Azure Federationは、Windows Azure SQL Database Federationに、それぞれブランド名が変更されました。
フェデレーションの作成
SQL Database Federationを使用するには、フェデレーションオブジェクトを作成することから始まります。フェデレーションはデータベース内に作成するデータベースオブジェクトで、データベース内に複数作成することができます。T-SQLを発行するか、SQL Azure管理ポータルを使用するかのどちらかでフェデレーションを作成できます。
T-SQLでフェデレーションを作成する場合は、クエリ1 を実行します。データ型には、INT、BIGINT、UNIQUEIDENTIFIER、VARBINARY(0~900)を指定することができます。
クエリ1 フェデレーションの作成
-- CREATE FEDERATION フェデレーション名(フェデレーションキー データ型 RANGE)
-- GO
CREATE FEDERATION OrderFederation(orderID int RANGE)
GO
SQL Azure管理ポータルでフェデレーションを作成することができます。図1 は、クエリ1と同じ指定をしたところです。
図1 SQL Azure管理ポータルでフェデレーション作成
フェデレーションを作成すると、ルートデータベースと指定したデータ型の全範囲を含むメンバーデータベースが作成されます。フェデレーションを作成すると、SQL Server Management Studio 2012では、図2 のようにオブジェクトエクスプローラー上で確認できます。
図2 SQL Server Management Studio 2012でフェデレーションの確認
SQL Azure管理ポータルでは、図3 のようにデータベースの「管理タブ」の「概要」にフェデレーションが表示されます。
図3 SQL Azure管理ポータルでフェデレーションの確認
フェデレーションを作成すると、図4 のようにフェデレーションを作成したデータベースにフェデレーションオブジェクトが作成されます。フェデレーションオブジェクトに所属するルートデータベースとメンバーデータベースが含まれます。SQL Server Management Studio 2012やSQL Azure管理ポータル上では、ルートデータベースやメンバーデータベースそのものは隠ぺいされており表示されません[1] 。
図4 フェデレーション作成時のデータベースの状況
[1] 実際にデータベースが作成されていることを確認したい場合は、SQL Server Management Studio 2008 R2 SP1でSQL Databaseサーバーに接続するとルートデータベースやメンバーデータベースを確認できます。
フェデレーションのメンバーデータベースに接続
フェデレーションを作成したので、フェデレーションのメンバーデータベース内に接続します。メンバーデータベースに接続するには、USE FEDERATION句を使用します。
たとえば、OrderFederationフェデレーションのOrderIDが1のメンバーデータベースに接続するにはクエリ2 のようなクエリを実行します。「 OrderID=1」とフェデレーションキーと値を指定することで、指定した値を含むメンバーデータベースに接続することができます。「 WITH RESET」は、接続リセットを明示するために必要なキーワードです。
クエリ2 USE FEDERATION句の使用例
--USE FEDERATION フェデレーション名(フェデレーションキー = 値) WITH FILTERING=ON又はOFF,REST
USE FEDERATION OrderFederation (OrderID=1) WITH RESET
USE FEDERATION OrderFederation (OrderID=1) WITH FILTERING=ON,RESET
USE FEDERATION OrderFederation (OrderID=1) WITH FILTERING=OFF,RESET
メンバーデータベースが1つしかない場合は、図5 のようにメンバーデータベース内にすべてのアトミックユニットが含まれています。「 WITH FILTERING=ON」を指定してメンバーデータベースに接続した場合、フェデレーションキーで指定したアトミックユニット内のデータのみを取得することができます。クエリ2の2つ目のように指定して接続するとOrderID=1のアトミックユニット内のデータのみになります。WITH FILTERING=ONの場合、クエリ実行時に自動的に「where OrderID=1」が補完されるイメージです。FILTERINGを指定しない場合は、既定で「WITH FILTERING=ON」となります。
図5 メンバーデータベースの様子
SQL Server Management Studio 2012でメンバーデータベースに接続するには、オブジェクトブラウザーでフェデレーションをダブルクリックします(図6 ) 。
図6 オブジェクトエクスプローラーのフェデレーション
ダブルクリックすると、図7 のように「フェデレーションメンバーへの接続」ダイアログが表示されます。
図7 フェデレーションメンバーへの接続
メンバーデータベースに接続すると、図8 のようにメンバーデータベースに接続され、オブジェクトエクスプローラーに表示されます。
図8 フェデレーションメンバーのデータベース
フェデレーションテーブルの作成
メンバーデータベースに接続しましたので、フェデレーションテーブルを作成します。フェデレーションテーブルを作成するには、CREATE TABLE句を使用します。「 FEDERATED ON」を指定すると、フェデレーション内にフデレーションテーブルとして作成できます。「 OrderID = ID」で、フェデレーションキーとフェデレーションキーに使用するテーブル列を指定します。OrderテーブルのID列を、OrderFederationフェデレーションのフェデレーションキーとして指定しました。フェデレーションキーに指定した列は、クラスター化インデックスに含まれている必要があります[2] 。
クエリ3 CREATE TABLE句でフェデレーションテーブルの作成
CREATE TABLE [Order](
[ID] [int] NOT NULL,
[OrderName] [nvarchar](8) NULL,
CONSTRAINT [PK_Order] PRIMARY KEY CLUSTERED ([ID])
) FEDERATED ON (OrderID = ID)
GO
CREATE TABLE [OrderDetail](
[ID] [int] NOT NULL,
[DetailID] [int] NOT NULL,
[ProductID] [nvarchar](8) NULL,
CONSTRAINT [PK_OrderDetail] PRIMARY KEY CLUSTERED ([ID],[DetailID])
) FEDERATED ON (OrderID = ID)
GO
フェデレーション内で、「 FEDERATED ON」を指定せずにテーブルを作成すると参照テーブルとなります(クエリ4 ) 。
クエリ4 参照テーブルの作成
CREATE TABLE [Product](
[ID] [int] NOT NULL,
[ProductName] [nvarchar](8) NULL,
CONSTRAINT [PK_Product] PRIMARY KEY CLUSTERED ([ID])
)
GO
クエリ3とクエリ4を実行すると、図9 のようにフェデレーション内にフェデレーションテーブルと参照テーブルを作成できます。
図9 フェデレーションテーブルと参照テーブル
SQLデータベースは、データベースごとに物理的に異なるマシンに作成されるため、データベース間のテーブル結合をすることはできません。フェデレーションでは、複数のメンバーデータベースを使用してスケールアウトします。データ量が多く分散させる必要があるテーブルはフェデレーションテーブルとして作成します。マスターデータのようなデータ量が少なく、フェデレーションテーブルと結合するようなデータは、参照テーブルとします。
クエリ2、クエリ3では、注文テーブル(Order)と注文詳細テーブル(OrderDetail)はフェデレーションテーブルとして作成し分散できるようにします。商品マスター(Product)は、参照テーブルとして作成しました。参照テーブルを更新することもできますが、参照テーブルのデータを更新しても、他のフェデレーション内の同じ参照テーブルには反映されます。詳しくは次回説明します。
まとめ
今回は、SQL Database Federationでの、フェデレーションの作成、フェデレーションテーブルの作成、参照テーブルの作成方法と処理を実行することで、どのような結果になるのかを説明しました。次回は、フェデレーションの分割、結合、データの転送などについて説明します。