次の方法で共有


既存のデータベースを移行してスケール アウト

適用対象:Azure SQL データベース

ツール ( スケーラブルなクラウド データベースの構築など) を使用して、既存のスケールアウトされたシャード 化されたデータベースを簡単に管理できます。 最初に、 シャード マップ マネージャーを使用するように既存のデータベース セットを変換します。

概要

既存のシャード化されたデータベースを移行するには:

  1. シャード マップ マネージャー データベースを準備します。
  2. シャード マップを作成します。
  3. 個々のシャードを準備します。
  4. シャード マップにマッピングを追加します。

これらの方法は、.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. データベースごとに 1 つのテナント (用語については「 用語集」を参照)
  2. データベースごとに複数のテナント (2 種類):
    1. リスト マッピング
    2. 範囲マッピング

シングルテナント モデルの場合は、 リスト マッピング シャード マップを作成します。 シングルテナント モデルでは、テナントごとに 1 つのデータベースが割り当てられます。 これは、管理が簡単なので、SaaS 開発者に有効なモデルです。

リスト マッピングの図。

マルチテナント モデルでは、複数のテナントが個々のデータベースに割り当てられます (また、複数のデータベースにテナントのグループを分散させることができます)。 各テナントで必要なデータが少ない場合は、このモデルを使用します。 このモデルでは、範囲マッピングを使用してデータベースにテナントの範囲を割り当てます。

範囲マッピングの図。

または、 リスト マッピング を使用してマルチテナント データベース モデルを実装し、個々のデータベースに複数のテナントを割り当てることができます。 たとえば、ID が 1 と 5 のテナントに関する情報を DB1 に格納し、DB2 にテナント 7 と 10 のデータを格納する、といったことができます。

1 つの DB 上の複数のテナントの図。

以上の選択を基にして、次のいずれかのオプションを選択します。

オプション 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 クライアント ライブラリの使用を開始できます。 データ依存ルーティングおよびマルチシャード クエリを使用することもできます。