Eseguire la migrazione dei database esistenti per ottenere scalabilità orizzontale

SI APPLICA A: Database SQL di Azure

È possibile gestire facilmente i database partizionati con scalabilità orizzontale esistenti usando strumenti, ad esempio la database elastico client di . Come prima cosa convertire un set di database esistente per l'uso del gestore delle mappe partizioni.

Panoramica

Per eseguire la migrazione di un database partizionato esistente:

  1. Preparare il database del gestore delle mappe partizioni.
  2. Creare la mappa partizioni.
  3. Preparare le singole partizioni.
  4. Aggiungere i mapping alla mappa partizioni.

Queste tecniche possono essere implementate usando la libreria client .NET Frameworko gli script di PowerShell disponibili in database SQL di Azure - database elastico tools. Negli esempi in questo articolo vengono usati gli script PowerShell.

Per altre informazioni su ShardMapManager, vedere Gestione mappe partizioni. Per una panoramica degli strumenti database elastico, vedere panoramica database elastico funzionalità .

Preparare il database del gestore delle mappe partizioni

Il gestore delle mappe partizioni è un database speciale che contiene i dati per la gestione dei database con un numero maggiore di istanze. È possibile usare un database esistente o crearne un nuovo. Un database che funge da gestore delle mappe partizioni non deve essere lo stesso della partizione. Lo script di PowerShell non crea automaticamente il database.

Passaggio 1: Creare un gestore mappe partizioni

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

Dopo la creazione, è possibile recuperare il gestore mappe partizioni con questo cmdlet. Questo passaggio è necessario ogni volta che si deve usare l'oggetto 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>'

Passaggio 2: Creare la mappa partizioni

Selezionare il tipo di mappa partizioni da creare. La scelta dipende dall'architettura del database:

  1. Singolo tenant per database. Per informazioni sui i termini, vedere il glossario.
  2. Più tenant per database (due tipi):
    1. Mapping di tipo elenco
    2. Mapping di tipo intervallo

Per un modello a singolo tenant, creare una mappa partizioni con mapping di tipo elenco . Il modello single-tenant assegna un database per tenant. Si tratta di un modello efficace per gli sviluppatori SaaS in quanto semplifica la gestione.

Mapping di tipo elenco

Il modello multi-tenant assegna diversi tenant a un database singolo ed è possibile distribuire gruppi di tenant tra più database. Usare questo modello quando si prevedono esigenze di dati ridotte per ogni tenant. In questo modello viene assegnato un intervallo di tenant a un database usando il mapping di tipo intervallo.

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

Tenant multipli su database singolo

In base alla scelta effettuata, procedere con una delle opzioni seguenti:

Opzione 1: Creare una mappa partizioni per un mapping di elenco

Creare una mappa partizioni usando l'oggetto ShardMapManager.

# $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 intervalli

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.

# $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: Elencare i mapping in un singolo database

Per l'impostazione di questo modello è necessario anche creare una mappa di tipo elenco, come illustrato nel passaggio 2, opzione 1.

Passaggio 3: preparare le singole partizioni

Aggiungere ciascuna partizione (database) al gestore mappe partizioni. Ciò consente di preparare i singoli database per l'archiviazione delle informazioni di mapping. Eseguire questo metodo su ogni partizione.

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 mapping

L'aggiunta di mapping dipende dal tipo di mappa partizioni creato. Se è stata creata una mappa di tipo elenco, aggiungere mapping di tipo elenco. Se è stata creata una mappa di tipo intervallo, aggiungere mapping di tipo intervallo.

Opzione 1: Eseguire il mapping dei dati per un mapping di elenco

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

Aggiungere il mapping di tipo intervallo per tutte le associazioni intervallo ID tenant - database:

# 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 in un singolo database

Per ogni tenant eseguire Add-ListMapping (opzione 1).

Verifica dei mapping

È possibile eseguire query per ottenere informazioni sulle partizioni esistenti e sui mapping a esse associati usando i comandi seguenti:

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

Riepilogo

Dopo aver completato l'installazione, è possibile iniziare a usare la libreria client di database elastici. È anche possibile usare il routing dipendente dai dati e le query su più partizioni.

Passaggi successivi

Ottenere gli script di PowerShell dagli script degli strumenti SQL Database-Elastic database di Azure.

Gli strumenti sono disponibili anche in 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. Vedere la pagina relativa allo strumento di divisione-unione.

Risorse aggiuntive

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.

Domande e richieste di funzionalità

Per le domande, usare la pagina delle domande di Microsoft Q&A per database SQL e per le richieste di funzionalità, aggiungerle al forum database SQL feedback.