Partager via


Migration de bases de données existantes pour effectuer un scale-out

S’applique à :Azure SQL Database

Important

La requête élastique en mode gestionnaire de cartes de partitions (partitionnement horizontal), à l’aide EXTERNAL DATA SOURCE du type SHARD_MAP_MANAGER, atteint la fin de la prise en charge le 31 mars 2027. Après cette date, les charges de travail existantes continueront de fonctionner, mais ne recevront plus de prise en charge, et la création de nouvelles sources de données externes de type SHARD_MAP_MANAGER ne sera plus possible. Pour connaître les options de migration, consultez le guide de migration à partir du mode gestionnaire de cartes de partitions de requêtes élastiques.

Gérez facilement vos bases de données partitionnées mises à l’échelle existantes à l’aide d’outils (tels que la création de bases de données cloud évolutives). Convertissez d’abord un ensemble existant de bases de données pour utiliser le Gestionnaire de cartes de partitions.

Vue d’ensemble

Pour migrer une base de données partitionnée existante :

  1. Préparez la base de données pour le Gestionnaire de cartes de partitions.
  2. Créer la carte de partitions.
  3. Préparer les partitions individuelles.
  4. Ajoutez les mappages à la carte de partitions.

Ces techniques peuvent être implémentées à l’aide de la bibliothèque de client .NET Framework ou des scripts PowerShell (voir Azure SQL Database – Scripts d’outils de base de données élastique). Les exemples fournis ici utilisent les scripts PowerShell.

Pour plus d’informations sur la classe ShardMapManager, consultez la page Gestion des cartes de partitions. Pour obtenir une présentation des outils de base de données élastique, consultez Vue d’ensemble des fonctionnalités de base de données élastique.

Préparer la base de données pour le Gestionnaire de cartes de partitions

Le Gestionnaire de cartes de partitions est une base de données spéciale qui contient les données permettant de gérer les bases de données avec montée en charge. Vous pouvez utiliser une base de données existante ou en créer une. Une base de données agissant en tant que Gestionnaire de cartes de partitions ne peut pas être identique à une partition. Le script PowerShell ne crée pas la base de données à votre place.

Étape 1 : Créer un gestionnaire de cartes de partitions

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

Récupération du gestionnaire de cartes de partitions

Après la création, vous pouvez récupérer le gestionnaire de cartes de partitions avec cette applet de commande. Cette étape est nécessaire chaque fois que vous devez utiliser l’objet 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>'

Étape 2 : Créer la carte de partitions

Sélectionnez le type de carte de partitions à créer. Votre choix dépend de l’architecture de la base de données :

  1. Client unique par base de données (Pour rechercher des termes spécifiques, consultez le glossaire.)
  2. Plusieurs clients par base de données (deux types) :
    1. Mappage de liste
    2. Mappage de plage

Pour un modèle de client unique, créez une carte de partitions de mappage de liste . Le modèle à un seul client attribue une base de données par client. Il s’agit d’un modèle efficace pour les développeurs SaaS, car il simplifie la gestion.

Diagramme du mappage de liste.

Le modèle multilocataire affecte plusieurs locataires à une base de données individuelle (et vous pouvez distribuer des groupes de locataires entre plusieurs bases de données). Utilisez ce modèle lorsque vous pensez que chaque client va avoir de faibles besoins en termes de données. Dans ce modèle, attribuez une plage de clients à une base de données à l’aide du mappage de plage.

Diagramme du mappage de plages.

Vous pouvez également implémenter un modèle de base de données mutualisé à l’aide d’un mappage de liste pour affecter plusieurs locataires à une base de données individuelle. Par exemple, DB1 est utilisée pour stocker les informations d’ID client 1 et 5 et DB2 stocke les données pour les clients 7 et 10.

Diagramme de plusieurs locataires sur une base de données unique.

Selon votre choix, procédez de l’une des manières suivantes :

Option 1 : Créer une carte de partitions pour un mappage de liste

Créez une carte de partitions à l’aide de l’objet ShardMapManager.

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

Option n°2 : Créer une carte de partitions pour un mappage de plage

Pour utiliser ce modèle de mappage, les valeurs d’ID client doivent être des plages continues. De plus, il est raisonnable d’avoir un écart dans les plages en ignorant la plage pendant la création de bases de données.

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

Option 3 : Mappages de liste sur une base de données individuelle

La configuration de ce modèle nécessite également la création d’un mappage de liste comme indiqué à l’étape 2, option 1.

Étape 3 : Préparer les partitions individuelles

Ajoutez chaque partition (base de données) dans le gestionnaire de cartes de partitions. Cela prépare les bases de données individuelles à stocker les informations de mappage. Exécutez cette méthode sur chaque partition. La $ShardMap est la carte de partitions créée à l’étape 2.

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

Étape 4 : Ajouter des mappages

L’ajout de mappages varie selon le type de carte de partitions que vous avez créé. Si vous avez créé un mappage de liste, vous ajoutez des mappages de liste. Si vous avez créé un mappage de plage, vous ajoutez des mappages de plage.

Option 1 : Mapper les données pour un mappage de liste

Mappez les données en ajoutant un mappage de liste pour chaque client. Utilisez l’exemple de script PowerShell suivant pour créer les mappages et les associer aux nouvelles partitions.

# Create the mapping and associate it with the new shards
Add-ListMapping -KeyType $([int]) -ListPoint '<tenant_id>' -ListShardMap $ShardMap -SqlServerName '<shard_server_name>' -SqlDatabaseName '<shard_database_name>'

Option n°2 : Mapper les données pour un mappage de plage

Ajoutez les mappages de plage pour la plage d’ID client – associations de bases de données. Utilisez l’exemple de script PowerShell suivant pour créer les mappages et les associer aux nouvelles partitions.

# Create the mapping 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>'

Étape 4, option 3 : Mapper les données de plusieurs locataires sur une base de données individuelle

Pour chaque locataire, exécutez l’applet Add-ListMapping de commande (option 1).

Vérifier les mappages

Vous pouvez interroger des informations sur les partitions existantes et les mappages associés à ces partitions à l’aide de l’exemple de script PowerShell suivant :

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

Résumé

Une fois que vous avez terminé l’installation, vous pouvez commencer à utiliser la bibliothèque cliente de base de données élastique. Vous pouvez également utiliser le routage dépendant des données et la requête sur plusieurs partitions.