適用対象:Azure SQL データベース
ツール ( スケーラブルなクラウド データベースの構築など) を使用して、既存のスケールアウトされたシャード 化されたデータベースを簡単に管理できます。 最初に、 シャード マップ マネージャーを使用するように既存のデータベース セットを変換します。
概要
既存のシャード化されたデータベースを移行するには:
- シャード マップ マネージャー データベースを準備します。
- シャード マップを作成します。
- 個々のシャードを準備します。
- シャード マップにマッピングを追加します。
これらの方法は、.NET Framework クライアント ライブラリまたは Azure SQL Database - Elastic Database ツール スクリプトに関するページにある PowerShell スクリプトを使用して実装できます。 この例では、PowerShell スクリプトを使用します。
ShardMapManager の詳細については、「 シャード マップの管理」を参照してください。 Elastic Database ツールの概要については、Elastic Database 機能の概要に関するページを参照してください。
シャード マップ マネージャー データベースを準備する
シャード マップ マネージャーは、スケールアウトされたデータベースを管理するためのデータを格納する特殊なデータベースです。 既存のデータベースを使用するか、新しいデータベースを作成できます。 シャード マップ マネージャーとして機能するデータベースは、シャードと同じデータベースにすることはできません。 PowerShell スクリプトではデータベースが自動的に作成されません。
手順 1:シャード マップ マネージャーを作成する
# Create a shard map manager
New-ShardMapManager -UserName '<user_name>' -Password '<password>' -SqlServerName '<server_name>' -SqlDatabaseName '<smm_db_name>'
#<server_name> and <smm_db_name> are the server name and database name
# for the new or existing database that should be used for storing
# tenant-database mapping information.
シャード マップ マネージャーを取得する
作成した後は、次のコマンドレットでシャード マップ マネージャーを取得できます。 この手順は、ShardMapManager オブジェクトを使用する必要があるたびに必要です。
# Try to get a reference to the Shard Map Manager
$ShardMapManager = Get-ShardMapManager -UserName '<user_name>' -Password '<password>' -SqlServerName '<server_name>' -SqlDatabaseName '<smm_db_name>'
手順 2:シャード マップを作成する
作成するシャード マップの種類を選択します。 何を選択するかはデータベースのアーキテクチャによって異なります。
- データベースごとに 1 つのテナント (用語については「 用語集」を参照)
- データベースごとに複数のテナント (2 種類):
- リスト マッピング
- 範囲マッピング
シングルテナント モデルの場合は、 リスト マッピング シャード マップを作成します。 シングルテナント モデルでは、テナントごとに 1 つのデータベースが割り当てられます。 これは、管理が簡単なので、SaaS 開発者に有効なモデルです。
マルチテナント モデルでは、複数のテナントが個々のデータベースに割り当てられます (また、複数のデータベースにテナントのグループを分散させることができます)。 各テナントで必要なデータが少ない場合は、このモデルを使用します。 このモデルでは、範囲マッピングを使用してデータベースにテナントの範囲を割り当てます。
または、 リスト マッピング を使用してマルチテナント データベース モデルを実装し、個々のデータベースに複数のテナントを割り当てることができます。 たとえば、ID が 1 と 5 のテナントに関する情報を DB1 に格納し、DB2 にテナント 7 と 10 のデータを格納する、といったことができます。
以上の選択を基にして、次のいずれかのオプションを選択します。
オプション 1: リスト マッピングのシャード マップを作成する
ShardMapManager オブジェクトを使用してシャード マップを作成します。
# $ShardMapManager is the shard map manager object
$ShardMap = New-ListShardMap -KeyType $([int]) -ListShardMapName 'ListShardMap' -ShardMapManager $ShardMapManager
オプション 2:範囲マッピングのシャード マップを作成する
このマッピング パターンを利用するには、テナント ID の値が連続する範囲である必要があります。また、データベースの作成時に範囲をスキップすることで、範囲のギャップを許容できます。
# $ShardMapManager is the shard map manager object
# 'RangeShardMap' is the unique identifier for the range shard map.
$ShardMap = New-RangeShardMap -KeyType $([int]) -RangeShardMapName 'RangeShardMap' -ShardMapManager $ShardMapManager
オプション 3:単一データベースでのリスト マッピング
このパターンを設定するには、手順 2、オプション 1 で示したようなリスト マップも作成する必要があります。
手順 3:個々のシャードを準備する
各シャード (データベース) をシャード マップ マネージャーに追加します。 これは、マッピング情報を格納するための個々のデータベースの準備です。 各シャードで次のメソッドを実行します。
$ShardMap
は、手順 2 で作成したシャード マップです。
Add-Shard -ShardMap $ShardMap -SqlServerName '<shard_server_name>' -SqlDatabaseName '<shard_database_name>'
# The $ShardMap is the shard map created in step 2.
手順 4:マッピングを追加する
マッピングの追加は、作成したシャード マップの種類によって異なります。 リスト マップを作成した場合は、リスト マッピングを追加します。 範囲マップを作成した場合は、範囲マッピングを追加します。
オプション 1: リスト マッピングのデータをマップする
各テナントのリスト マッピングを追加することで、データをマップします。 次の PowerShell サンプル スクリプトを使用してマッピングを作成し、それらを新しいシャードに関連付けます。
# Create the mapping and associate it with the new shards
Add-ListMapping -KeyType $([int]) -ListPoint '<tenant_id>' -ListShardMap $ShardMap -SqlServerName '<shard_server_name>' -SqlDatabaseName '<shard_database_name>'
オプション 2:範囲マッピングのデータをマップする
すべてのテナント ID 範囲 (データベースの関連付け) の範囲マッピングを追加します。 次の PowerShell サンプル スクリプトを使用してマッピングを作成し、それらを新しいシャードに関連付けます。
# Create the mapping and associate it with the new shards
Add-RangeMapping -KeyType $([int]) -RangeHigh '5' -RangeLow '1' -RangeShardMap $ShardMap -SqlServerName '<shard_server_name>' -SqlDatabaseName '<shard_database_name>'
手順 4、オプション 3:単一データベースの複数テナントのデータをマップする
テナントごとに、 Add-ListMapping
(オプション 1) コマンドレットを実行します。
マッピングを確認する
既存のシャードとそのシャードに関連付けられているマッピングに関する情報は、次の PowerShell サンプル スクリプトを使用して照会できます。
# List the shards and mappings
Get-Shards -ShardMap $ShardMap
Get-Mappings -ShardMap $ShardMap
まとめ
セットアップが完了すると、Elastic Database クライアント ライブラリの使用を開始できます。 データ依存ルーティングおよびマルチシャード クエリを使用することもできます。