Migrar bancos de dados existentes para escalar horizontalmenteMigrate existing databases to scale out

Gerencie com facilidade seus bancos de dados fragmentados e escalonados horizontalmente existentes, usando as ferramentas de banco de dados do Banco de Dados SQL do Azure (como a biblioteca de cliente do Banco de Dados Elástico).Easily manage your existing scaled-out sharded databases using Azure SQL Database database tools (such as the Elastic Database client library). Primeiro converta um conjunto existente de bancos de dados para usar o gerenciador de mapa de fragmentos.First convert an existing set of databases to use the shard map manager.

Visão geralOverview

Para migrar um banco de dados fragmentado existente:To migrate an existing sharded database:

  1. Prepare o banco de dados do gerenciador de mapa de fragmentos.Prepare the shard map manager database.
  2. Criar o mapa de fragmentos.Create the shard map.
  3. Preparar os fragmentos individuais.Prepare the individual shards.
  4. Adicione os mapeamentos ao mapa de fragmentos.Add mappings to the shard map.

Essas técnicas podem ser implementadas usando a biblioteca de cliente do .NET Framework ou os scripts do PowerShell encontrados em Azure SQL DB – Scripts de ferramentas de Banco de Dados Elástico.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. Os exemplos aqui usam os scripts do PowerShell.The examples here use the PowerShell scripts.

Para saber mais sobre o ShardMapManager, confira Gerenciamento de mapa de fragmentos.For more information about the ShardMapManager, see Shard map management. Para obter uma visão geral das ferramentas de banco de dados elástico, confira Visão geral dos recursos do Banco de Dados Elástico.For an overview of the elastic database tools, see Elastic Database features overview.

Preparar o banco de dados do gerenciador de mapa de fragmentosPrepare the shard map manager database

O gerenciador de mapa de fragmentos é um banco de dados especial que contém os dados para gerenciar bancos de dados escalonados horizontalmente.The shard map manager is a special database that contains the data to manage scaled-out databases. Você pode usar um banco de dados existente ou criar um novo banco de dados.You can use an existing database, or create a new database. Um banco de dados que age como o gerenciador de mapa de fragmentos não deve ser o mesmo banco de dados que o do fragmento.A database acting as shard map manager should not be the same database as a shard. O script do PowerShell não cria o banco de dados para você.The PowerShell script does not create the database for you.

Etapa 1: criar um gerenciador de mapa de fragmentosStep 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.

Para recuperar o gerenciador de mapa de fragmentosTo retrieve the shard map manager

Após a criação, você pode recuperar o gerenciador de mapa de fragmentos com este cmdlet.After creation, you can retrieve the shard map manager with this cmdlet. Esta etapa será necessária toda vez que você precisar usar o objeto 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>' 

Etapa 2: criar o mapa de fragmentosStep 2: create the shard map

Selecione o tipo de mapa de fragmentos a ser criado.Select the type of shard map to create. A escolha depende da arquitetura do banco de dados:The choice depends on the database architecture:

  1. Um locatário único por banco de dados (para termos, consulte o glossário.)Single tenant per database (For terms, see the glossary.)
  2. Vários locatários por banco de dados (dois tipos):Multiple tenants per database (two types):
    1. Mapeamento de listaList mapping
    2. Mapeamento de intervaloRange mapping

Para um modelo de locatário único, crie um mapa de fragmentos de mapeamento de lista .For a single-tenant model, create a list mapping shard map. O modelo de locatário único atribui um banco de dados por locatário.The single-tenant model assigns one database per tenant. Esse é um modelo eficaz para desenvolvedores de SaaS, pois simplifica o gerenciamento.This is an effective model for SaaS developers as it simplifies management.

Mapeamento de lista

O modelo multilocatário atribui vários locatários a um banco de dados individual (e você pode distribuir grupos de locatários entre vários bancos de dados).The multi-tenant model assigns several tenants to an individual database (and you can distribute groups of tenants across multiple databases). Use esse modelo quando você esperar que cada locatário tenha necessidades de dados pequenas.Use this model when you expect each tenant to have small data needs. Nesse modelo, atribua um intervalo de locatários para um banco de dados usando o mapeamento intervalo.In this model, assign a range of tenants to a database using range mapping.

Mapeamento de intervalo

Ou então, você pode implementar um modelo de banco de dados multilocatário usando um mapeamento de lista para atribuir vários locatários a um banco de dados individual.Or you can implement a multi-tenant database model using a list mapping to assign multiple tenants to an individual database. Por exemplo, DB1 é usado para armazenar informações sobre a ID do locatário 1 e 5, e o DB2 armazena dados do locatário 7 e do locatário 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.

Vários locatários em um único banco de dados

Com base na sua escolha, escolha uma destas opções:Based on your choice, choose one of these options:

Opção 1: criar um mapa de fragmentos para um mapeamento de listaOption 1: create a shard map for a list mapping

Crie um mapa de fragmentos usando o objeto 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 

Opção 2: criar um mapa de fragmentos para um mapeamento de intervaloOption 2: create a shard map for a range mapping

Para utilizar esse padrão de mapeamento, os valores de ID do locatário precisam ser intervalos contínuos. É possível ter lacunas nos intervalos, pulando o intervalo ao criar os bancos de dados.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 

Opção 3: Mapeamentos de lista em um banco de dados individualOption 3: List mappings on an individual database

A configuração desse padrão também exige a criação de um mapa de lista conforme mostrado na etapa 2, opção 1.Setting up this pattern also requires creation of a list map as shown in step 2, option 1.

Etapa 3: Preparar os fragmentos individuaisStep 3: Prepare individual shards

Adicione cada fragmento (banco de dados)ao gerenciador de mapa de fragmentos.Add each shard (database) to the shard map manager. Isso prepara os bancos de dados individuais para armazenar informações de mapeamento.This prepares the individual databases for storing mapping information. Execute esse método em cada fragmento.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.

Etapa 4: Adicionar mapeamentosStep 4: Add mappings

A adição de mapeamentos depende do tipo de mapa de fragmentos criado.The addition of mappings depends on the kind of shard map you created. Se tiver criado um mapa de lista, você adicionará mapeamentos de lista.If you created a list map, you add list mappings. Se tiver criado um mapa de intervalo, você adicionará mapeamentos de intervalo.If you created a range map, you add range mappings.

Opção 1: mapear os dados para um mapeamento de listaOption 1: map the data for a list mapping

Mapeie os dados adicionando um mapeamento de lista para cada locatário.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>' 

Opção 2: mapear os dados para um mapeamento de intervaloOption 2: map the data for a range mapping

Adicione os mapeamentos de intervalo de todas as associações entre intervalo de ID do locatário e banco de dados: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>' 

Etapa 4, opção 3: mapear os dados de vários locatários em um banco de dados individualStep 4 option 3: map the data for multiple tenants on an individual database

Para cada locatário, execute o Add-ListMapping (opção 1).For each tenant, run the Add-ListMapping (option 1).

Verificando os mapeamentosChecking the mappings

Informações sobre os fragmentos existentes e os mapeamentos associados a eles podem ser consultadas usando os seguintes comandos: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 

ResumoSummary

Após ter concluído a configuração, você pode começar a usar a biblioteca de cliente do Banco de Dados Elástico.Once you have completed the setup, you can begin to use the Elastic Database client library. Você também pode usar o roteamento dependente de dados e a consulta de vários fragmentos.You can also use data-dependent routing and multi-shard query.

Próximas etapasNext steps

Obtenha os scripts do PowerShell de Azure SQL DB-Elastic Database tools scripts (Scripts das ferramentas de Banco de Dados Elástico do BD SQL do Azure).Get the PowerShell scripts from Azure SQL DB-Elastic Database tools scripts.

As ferramentas também estão no GitHub: Azure/elastic-db-tools.The tools are also on GitHub: Azure/elastic-db-tools.

Use a ferramenta de divisão e mesclagem para mover dados de/para um modelo multilocatário de/para um modelo de locatário único.Use the split-merge tool to move data to or from a multi-tenant model to a single tenant model. Consulte Ferramenta de divisão e mesclagem.See Split merge tool.

Recursos adicionaisAdditional resources

Para obter informações sobre os padrões comuns da arquitetura de dados dos aplicativos do banco de dados SaaS (software como serviço) multilocatário, consulte Padrões de Design para Aplicativos SaaS multilocatário com o Banco de Dados SQL do Azure.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.

Perguntas e solicitações de recursosQuestions and Feature Requests

Caso tenha perguntas, use o Fórum do Banco de Dados SQL e para solicitações de recurso, adicione-as no Fórum de comentários do Banco de Dados SQL.For questions, use the SQL Database forum and for feature requests, add them to the SQL Database feedback forum.