Eseguire la migrazione dei database esistenti per ottenere scalabilità orizzontaleMigrate existing databases to scale out

È possibile gestire facilmente i database partizionati con scalabilità orizzontale esistenti usando gli strumenti di database del database SQL di Azure, come ad esempio la libreria client dei database elastici.Easily manage your existing scaled-out sharded databases using Azure SQL Database database tools (such as the Elastic Database client library). Come prima cosa convertire un set di database esistente per l'uso del gestore delle mappe partizioni.First convert an existing set of databases to use the shard map manager.

PanoramicaOverview

Per eseguire la migrazione di un database partizionato esistente:To migrate an existing sharded database:

  1. Preparare il database del gestore delle mappe partizioni.Prepare the shard map manager database.
  2. Creare la mappa partizioni.Create the shard map.
  3. Preparare le singole partizioni.Prepare the individual shards.
  4. Aggiungere i mapping alla mappa partizioni.Add mappings to the shard map.

Queste tecniche possono essere implementate tramite la libreria client .NET Framework o gli script di PowerShell disponibili nella pagina relativa agli script degli strumenti di database elastico del database SQL di Azure.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. Negli esempi in questo articolo vengono usati gli script PowerShell.The examples here use the PowerShell scripts.

Per altre informazioni su ShardMapManager, vedere Gestione mappe partizioni.For more information about the ShardMapManager, see Shard map management. Per una panoramica sugli strumenti di database elastici, vedere Panoramica sulle funzionalità di database elastico.For an overview of the elastic database tools, see Elastic Database features overview.

Preparare il database del gestore delle mappe partizioniPrepare the shard map manager database

Il gestore delle mappe partizioni è un database speciale che contiene i dati per la gestione dei database con un numero maggiore di istanze.The shard map manager is a special database that contains the data to manage scaled-out databases. È possibile usare un database esistente o crearne un nuovo.You can use an existing database, or create a new database. Un database che funge da gestore delle mappe partizioni non deve essere lo stesso della partizione.A database acting as shard map manager should not be the same database as a shard. Lo script di PowerShell non crea automaticamente il database.The PowerShell script does not create the database for you.

Passaggio 1: Creare un gestore mappe partizioniStep 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.

Per recuperare il gestore mappe partizioniTo retrieve the shard map manager

Dopo la creazione, è possibile recuperare il gestore mappe partizioni con questo cmdlet.After creation, you can retrieve the shard map manager with this cmdlet. Questo passaggio è necessario ogni volta che si deve usare l'oggetto 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>' 

Passaggio 2: Creare la mappa partizioniStep 2: create the shard map

Selezionare il tipo di mappa partizioni da creare.Select the type of shard map to create. La scelta dipende dall'architettura del database:The choice depends on the database architecture:

  1. Singolo tenant per database. Per informazioni sui i termini, vedere il glossario.Single tenant per database (For terms, see the glossary.)
  2. Più tenant per database (due tipi):Multiple tenants per database (two types):
    1. Mapping di tipo elencoList mapping
    2. Mapping di tipo intervalloRange mapping

Per un modello a singolo tenant, creare una mappa partizioni con mapping di tipo elenco .For a single-tenant model, create a list mapping shard map. Il modello single-tenant assegna un database per tenant.The single-tenant model assigns one database per tenant. Si tratta di un modello efficace per gli sviluppatori SaaS in quanto semplifica la gestione.This is an effective model for SaaS developers as it simplifies management.

Mapping di tipo elenco

Il modello multi-tenant assegna diversi tenant a un database singolo ed è possibile distribuire gruppi di tenant tra più database.The multi-tenant model assigns several tenants to a single database (and you can distribute groups of tenants across multiple databases). Usare questo modello quando si prevedono esigenze di dati ridotte per ogni tenant.Use this model when you expect each tenant to have small data needs. In questo modello viene assegnato un intervallo di tenant a un database usando il mapping di tipo intervallo.In this model, assign a range of tenants to a database using range mapping.

Mapping di tipo intervallo

In alternativa è possibile implementare un modello di database multi-tenant usando il mapping di tipo elenco per assegnare più tenant a un database singolo.Or you can implement a multi-tenant database model using a list mapping to assign multiple tenants to a single database. Ad esempio, DB1 viene usato per archiviare le informazioni sugli ID tenant 1 e 5 e DB2 archivia i dati per i tenant 7 e 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.

Tenant multipli su database singolo

In base alla scelta effettuata, procedere con una delle opzioni seguenti:Based on your choice, choose one of these options:

Opzione 1: creare una mappa partizioni per un mapping di tipo elencoOption 1: create a shard map for a list mapping

Creare una mappa partizioni usando l'oggetto 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 

Opzione 2: creare una mappa partizioni per un mapping di tipo intervalloOption 2: create a shard map for a range mapping

Per usare questo modello di mapping, i valori dell'ID tenant devono essere a intervalli continui ed è accettabile avere gap negli intervalli ignorando l'intervallo durante la creazione dei database.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 

Opzione 3: eseguire il mapping di tipo elenco in un database singoloOption 3: List mappings on a single database

Per l'impostazione di questo modello è necessario anche creare una mappa di tipo elenco, come illustrato nel passaggio 2, opzione 1.Setting up this pattern also requires creation of a list map as shown in step 2, option 1.

Passaggio 3: preparare le singole partizioniStep 3: Prepare individual shards

Aggiungere ciascuna partizione (database) al gestore mappe partizioni.Add each shard (database) to the shard map manager. Ciò consente di preparare i singoli database per l'archiviazione delle informazioni di mapping.This prepares the individual databases for storing mapping information. Eseguire questo metodo su ogni partizione.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.

Passaggio 4: aggiungere mappingStep 4: Add mappings

L'aggiunta di mapping dipende dal tipo di mappa partizioni creato.The addition of mappings depends on the kind of shard map you created. Se è stata creata una mappa di tipo elenco, aggiungere mapping di tipo elenco.If you created a list map, you add list mappings. Se è stata creata una mappa di tipo intervallo, aggiungere mapping di tipo intervallo.If you created a range map, you add range mappings.

Opzione 1: eseguire il mapping dei dati per il mapping di tipo elencoOption 1: map the data for a list mapping

Eseguire il mapping dei dati aggiungendo un mapping di tipo elenco per ogni tenant.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>' 

Opzione 2: eseguire il mapping dei dati per il mapping di tipo intervalloOption 2: map the data for a range mapping

Aggiungere il mapping di tipo intervallo per tutte le associazioni intervallo ID tenant - database: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>' 

Passaggio 4, opzione 3: eseguire il mapping dei dati per più tenant su un database singoloStep 4 option 3: map the data for multiple tenants on a single database

Per ogni tenant eseguire Add-ListMapping (opzione 1).For each tenant, run the Add-ListMapping (option 1).

Verifica dei mappingChecking the mappings

È possibile eseguire query per ottenere informazioni sulle partizioni esistenti e sui mapping a esse associati usando i comandi seguenti: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 

RiepilogoSummary

Dopo aver completato l'installazione, è possibile iniziare a usare la libreria client di database elastici.Once you have completed the setup, you can begin to use the Elastic Database client library. È anche possibile usare il routing dipendente dai dati e le query su più partizioni.You can also use data-dependent routing and multi-shard query.

Passaggi successiviNext steps

Gli script di PowerShell sono disponibili nella pagina relativa agli script degli strumenti di database elastici del database SQL di Azure.Get the PowerShell scripts from Azure SQL DB-Elastic Database tools scripts.

Gli strumenti sono disponibili anche in GitHub: Azure/elastic-db-tools.The tools are also on GitHub: Azure/elastic-db-tools.

Usare lo strumento di suddivisione-unione per spostare dati in o da un modello multi-tenant a un modello single-tenant.Use the split-merge tool to move data to or from a multi-tenant model to a single tenant model. Vedere la pagina relativa allo strumento di divisione-unione.See Split merge tool.

Risorse aggiuntiveAdditional resources

Per informazioni sugli schemi di architettura dati comuni delle applicazioni di database multi-tenant software come un servizio (SaaS), vedere Schemi progettuali per applicazioni SaaS multi-tenant con il database SQL di 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.

Domande e richieste di funzionalitàQuestions and Feature Requests

Se ci sono domande, usare il forum sul database SQL mentre è possibile inserire le richieste di nuove funzionalità nel forum relativo a commenti e suggerimenti sul database SQL.For questions, use the SQL Database forum and for feature requests, add them to the SQL Database feedback forum.