既存のデータベースを移行してスケール アウト
適用対象: Azure SQL データベース
ツール (Elastic Database クライアント ライブラリなど) を使用して、既存のスケールアウトされたシャード化されたデータベースを簡単に管理できます。 最初に、 シャード マップ マネージャーを使用するように既存のデータベース セットを変換します。
概要
既存のシャード化されたデータベースを移行するには:
- シャード マップ マネージャー データベースを準備します。
- シャード マップを作成します。
- 個々のシャードを準備します。
- シャード マップにマッピングを追加します。
これらの方法は、.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:個々のシャードを準備する
各シャード (データベース) をシャード マップ マネージャーに追加します。 これは、マッピング情報を格納するための個々のデータベースの準備です。 各シャードで次のメソッドを実行します。
Add-Shard -ShardMap $ShardMap -SqlServerName '<shard_server_name>' -SqlDatabaseName '<shard_database_name>'
# The $ShardMap is the shard map created in step 2.
手順 4:マッピングを追加する
マッピングの追加は、作成したシャード マップの種類によって異なります。 リスト マップを作成した場合は、リスト マッピングを追加します。 範囲マップを作成した場合は、範囲マッピングを追加します。
オプション 1: リスト マッピングのデータをマップする
各テナントのリスト マッピングを追加することで、データをマップします。
# Create the mappings 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 範囲の範囲マッピングを追加します (データベースの関連付け)。
# Create the mappings 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)。
マッピングの確認
既存のシャードおよびそれらに関連付けられているマッピングに関する情報は、次のコマンドを使用してクエリできます。
# List the shards and mappings
Get-Shards -ShardMap $ShardMap
Get-Mappings -ShardMap $ShardMap
まとめ
セットアップが完了すると、Elastic Database クライアント ライブラリの使用を開始できます。 データ依存ルーティングおよびマルチシャード クエリを使用することもできます。
次のステップ
Azure Elastic Database ツール スクリプトから PowerShell スクリプトを取得します。
Elastic Database Tools クライアント ライブラリは、GitHub の Azure/elastic-db-tools で入手できます。
マルチテナント モデルとシングルテナント モデルの間でデータを移動するには、分割/マージ ツールを使用します。 分割/マージ ツールを参照してください。
その他のリソース
マルチテナント SaaS (サービスとしてのソフトウェア) データベース アプリケーションの一般的なデータ アーキテクチャ パターンについては、Azure SQL Database を使用するマルチテナント SaaS アプリケーションの設計パターンに関する記事を参照してください。
質問と機能に関する要望
ご質問がある場合は、SQL Database に関する Microsoft Q&A 質問ページを参照してください。機能に関するご要望は、SQL Database に関するフィードバック フォーラムにお寄せください。