SQL Azureを徹底活用

第8回SQL Database Federationを使用するための最初の一歩

前回は、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管理ポータルでフェデレーション作成
図1 SQL Azure管理ポータルでフェデレーション作成

フェデレーションを作成すると、ルートデータベースと指定したデータ型の全範囲を含むメンバーデータベースが作成されます。フェデレーションを作成すると、SQL Server Management Studio 2012では、図2のようにオブジェクトエクスプローラー上で確認できます。

図2 SQL Server Management Studio 2012でフェデレーションの確認
図2 SQL Server Management Studio 2012でフェデレーションの確認

SQL Azure管理ポータルでは、図3のようにデータベースの「管理タブ」「概要」にフェデレーションが表示されます。

図3 SQL Azure管理ポータルでフェデレーションの確認
図3 SQL Azure管理ポータルでフェデレーションの確認

フェデレーションを作成すると、図4のようにフェデレーションを作成したデータベースにフェデレーションオブジェクトが作成されます。フェデレーションオブジェクトに所属するルートデータベースとメンバーデータベースが含まれます。SQL Server Management Studio 2012やSQL Azure管理ポータル上では、ルートデータベースやメンバーデータベースそのものは隠ぺいされており表示されません[1]⁠。

図4 フェデレーション作成時のデータベースの状況
図4 フェデレーション作成時のデータベースの状況

フェデレーションのメンバーデータベースに接続

フェデレーションを作成したので、フェデレーションのメンバーデータベース内に接続します。メンバーデータベースに接続するには、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 メンバーデータベースの様子
図5 メンバーデータベースの様子

SQL Server Management Studio 2012でメンバーデータベースに接続するには、オブジェクトブラウザーでフェデレーションをダブルクリックします図6⁠。

図6 オブジェクトエクスプローラーのフェデレーション
図6 オブジェクトエクスプローラーのフェデレーション

ダブルクリックすると、図7のように「フェデレーションメンバーへの接続」ダイアログが表示されます。

図7 フェデレーションメンバーへの接続
図7 フェデレーションメンバーへの接続

メンバーデータベースに接続すると、図8のようにメンバーデータベースに接続され、オブジェクトエクスプローラーに表示されます。

図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 フェデレーションテーブルと参照テーブル
図9 フェデレーションテーブルと参照テーブル

SQLデータベースは、データベースごとに物理的に異なるマシンに作成されるため、データベース間のテーブル結合をすることはできません。フェデレーションでは、複数のメンバーデータベースを使用してスケールアウトします。データ量が多く分散させる必要があるテーブルはフェデレーションテーブルとして作成します。マスターデータのようなデータ量が少なく、フェデレーションテーブルと結合するようなデータは、参照テーブルとします。

クエリ2、クエリ3では、注文テーブル(Order)と注文詳細テーブル(OrderDetail)はフェデレーションテーブルとして作成し分散できるようにします。商品マスター(Product)は、参照テーブルとして作成しました。参照テーブルを更新することもできますが、参照テーブルのデータを更新しても、他のフェデレーション内の同じ参照テーブルには反映されます。詳しくは次回説明します。

まとめ

今回は、SQL Database Federationでの、フェデレーションの作成、フェデレーションテーブルの作成、参照テーブルの作成方法と処理を実行することで、どのような結果になるのかを説明しました。次回は、フェデレーションの分割、結合、データの転送などについて説明します。

おすすめ記事

記事・ニュース一覧