既存のデータベースを移行してスケール アウトMigrate existing databases to scale out

Azure SQL Database のデータベース ツール ( Elastic Database クライアント ライブラリなど) を使用して、既存のスケールアウトされたシャード化されたデータベースを簡単に管理できます。Easily manage your existing scaled-out sharded databases using Azure SQL Database database tools (such as the Elastic Database client library). 最初に、 シャード マップ マネージャーを使用するように既存のデータベース セットを変換します。First convert an existing set of databases to use the shard map manager.

概要Overview

既存のシャード化されたデータベースを移行するには:To migrate an existing sharded database:

  1. シャード マップ マネージャー データベースを準備します。Prepare the shard map manager database.
  2. シャード マップを作成します。Create the shard map.
  3. 個々のシャードを準備します。Prepare the individual shards.
  4. シャード マップにマッピングを追加します。Add mappings to the shard map.

これらの方法は、.NET Framework クライアント ライブラリまたは「Azure SQL DB - Elastic Database tools scripts (Azure SQL DB - エラスティック データベース ツール スクリプト)」の PowerShell スクリプトを使用して実装できます。These techniques can be implemented using either the .NET Framework client library, or the PowerShell scripts found at Azure SQL DB - Elastic Database tools scripts. この例では、PowerShell スクリプトを使用します。The examples here use the PowerShell scripts.

ShardMapManager の詳細については、「 シャード マップの管理」を参照してください。For more information about the ShardMapManager, see Shard map management. エラスティック データベース ツールの概要については、「 Elastic Database 機能の概要」を参照してください。For an overview of the elastic database tools, see Elastic Database features overview.

シャード マップ マネージャー データベースを準備するPrepare the shard map manager database

シャード マップ マネージャーは、スケールアウトされたデータベースを管理するためのデータを格納する特殊なデータベースです。The shard map manager is a special database that contains the data to manage scaled-out databases. 既存のデータベースを使用するか、新しいデータベースを作成できます。You can use an existing database, or create a new database. シャード マップ マネージャーとして機能するデータベースは、シャードと同じデータベースにすることはできません。A database acting as shard map manager should not be the same database as a shard. PowerShell スクリプトではデータベースが自動的に作成されません。The PowerShell script does not create the database for you.

手順 1: シャード マップ マネージャーを作成するStep 1: create a shard map manager

# 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.

シャード マップ マネージャーを取得するにはTo retrieve the shard map manager

作成した後は、次のコマンドレットでシャード マップ マネージャーを取得できます。After creation, you can retrieve the shard map manager with this cmdlet. この手順は、ShardMapManager オブジェクトを使用する必要があるたびに必要です。This step is needed every time you need to use the ShardMapManager object.

# 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: シャード マップを作成するStep 2: create the shard map

作成するシャード マップの種類を選択します。Select the type of shard map to create. 何を選択するかはデータベースのアーキテクチャによって異なります。The choice depends on the database architecture:

  1. データベースごとに 1 つのテナント (用語については「 用語集」を参照)Single tenant per database (For terms, see the glossary.)
  2. データベースごとに複数のテナント (2 種類):Multiple tenants per database (two types):
    1. リスト マッピングList mapping
    2. 範囲マッピングRange mapping

シングルテナント モデルの場合は、 リスト マッピング シャード マップを作成します。For a single-tenant model, create a list mapping shard map. シングルテナント モデルでは、テナントごとに 1 つのデータベースが割り当てられます。The single-tenant model assigns one database per tenant. これは、管理が簡単なので、SaaS 開発者に有効なモデルです。This is an effective model for SaaS developers as it simplifies management.

リスト マッピング

マルチテナント モデルでは、1 つのデータベースに複数のテナントが割り当てられます (そして、テナントのグループを複数のデータベースに分散させることができます)。The multi-tenant model assigns several tenants to a single database (and you can distribute groups of tenants across multiple databases). 各テナントで必要なデータが少ない場合は、このモデルを使用します。Use this model when you expect each tenant to have small data needs. このモデルでは、範囲マッピングを使用してデータベースにテナントの範囲を割り当てます。In this model, assign a range of tenants to a database using range mapping.

範囲マッピング

または、 リスト マッピング を使用して複数のテナントを 1 つのデータベースに割り当てることにより、マルチテナント データベース モデルを実装できます。Or you can implement a multi-tenant database model using a list mapping to assign multiple tenants to a single database. たとえば、ID が 1 と 5 のテナントに関する情報を DB1 に格納し、DB2 にテナント 7 と 10 のデータを格納する、といったことができます。For example, DB1 is used to store information about tenant ID 1 and 5, and DB2 stores data for tenant 7 and tenant 10.

単一 DB 上の複数のテナント

以上の選択を基にして、次のいずれかのオプションを選択します。Based on your choice, choose one of these options:

オプション 1: リスト マッピングのシャード マップを作成するOption 1: create a shard map for a list mapping

ShardMapManager オブジェクトを使用してシャード マップを作成します。Create a shard map using the ShardMapManager object.

# $ShardMapManager is the shard map manager object. 
$ShardMap = New-ListShardMap -KeyType $([int]) 
-ListShardMapName 'ListShardMap' 
-ShardMapManager $ShardMapManager 

オプション 2: 範囲マッピングのシャード マップを作成するOption 2: create a shard map for a range mapping

このマッピング パターンを使用する場合は、テナント ID の値が連続した範囲である必要があります。データベースを作成するときに範囲をスキップすることで、範囲にギャップが存在していてもかまいません。To utilize this mapping pattern, tenant ID values needs to be continuous ranges, and it is acceptable to have gap in the ranges by skipping the range when creating the databases.

# $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: 単一データベースでのリスト マッピングOption 3: List mappings on a single database

このパターンを設定するには、手順 2、オプション 1 で示したようなリスト マップも作成する必要があります。Setting up this pattern also requires creation of a list map as shown in step 2, option 1.

手順 3: 個々のシャードを準備するStep 3: Prepare individual shards

各シャード (データベース) をシャード マップ マネージャーに追加します。Add each shard (database) to the shard map manager. これは、マッピング情報を格納するための個々のデータベースの準備です。This prepares the individual databases for storing mapping information. 各シャードで次のメソッドを実行します。Execute this method on each shard.

Add-Shard 
-ShardMap $ShardMap 
-SqlServerName '<shard_server_name>' 
-SqlDatabaseName '<shard_database_name>'
# The $ShardMap is the shard map created in step 2.

手順 4: マッピングを追加するStep 4: Add mappings

マッピングの追加は、作成したシャード マップの種類によって異なります。The addition of mappings depends on the kind of shard map you created. リスト マップを作成した場合は、リスト マッピングを追加します。If you created a list map, you add list mappings. 範囲マップを作成した場合は、範囲マッピングを追加します。If you created a range map, you add range mappings.

オプション 1: リスト マッピングのデータをマップするOption 1: map the data for a list mapping

各テナントのリスト マッピングを追加することで、データをマップします。Map the data by adding a list mapping for each tenant.

# 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: 範囲マッピングのデータをマップするOption 2: map the data for a range mapping

すべてのテナント ID 範囲の範囲マッピングを追加します (データベースの関連付け)。Add the range mappings for all the tenant ID range - database associations:

# 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: 単一データベースの複数テナントのデータをマップするStep 4 option 3: map the data for multiple tenants on a single database

各テナントに対し、Add-ListMapping を実行します (オプション 1)。For each tenant, run the Add-ListMapping (option 1).

マッピングの確認Checking the mappings

既存のシャードおよびそれらに関連付けられているマッピングに関する情報は、次のコマンドを使用してクエリできます。Information about the existing shards and the mappings associated with them can be queried using following commands:

# List the shards and mappings 
Get-Shards -ShardMap $ShardMap 
Get-Mappings -ShardMap $ShardMap 

概要Summary

セットアップが完了すると、Elastic Database クライアント ライブラリの使用を開始できます。Once you have completed the setup, you can begin to use the Elastic Database client library. データ依存ルーティングおよびマルチシャード クエリを使用することもできます。You can also use data-dependent routing and multi-shard query.

次のステップNext steps

Azure SQL DB - Elastic Database tools scripts (Azure SQL DB - エラスティック データベース ツール スクリプト)」から PowerShell スクリプトを取得します。Get the PowerShell scripts from Azure SQL DB-Elastic Database tools scripts.

ツールは GitHub ( Azure/elastic-db-tools) にもあります。The tools are also on GitHub: Azure/elastic-db-tools.

マルチテナント モデルとシングルテナント モデルの間でデータを移動するには、分割/マージ ツールを使用します。Use the split-merge tool to move data to or from a multi-tenant model to a single tenant model. 分割/マージ ツールを参照してください。See Split merge tool.

その他のリソースAdditional resources

マルチテナント SaaS (サービスとしてのソフトウェア) データベース アプリケーションの一般的なデータ アーキテクチャ パターンについては、「 Azure SQL Database を使用するマルチテナント SaaS アプリケーションの設計パターン」をご覧ください。For information on common data architecture patterns of multi-tenant software-as-a-service (SaaS) database applications, see Design Patterns for Multi-tenant SaaS Applications with Azure SQL Database.

質問と機能に関する要望Questions and Feature Requests

質問がある場合は、SQL Database のフォーラムを使用してください。機能に関するご要望は、SQL Database に関するフィードバック フォーラムにお寄せください。For questions, use the SQL Database forum and for feature requests, add them to the SQL Database feedback forum.