Partager via


Ajout d’une partition à l’aide des outils de base de données élastique

S’applique à :Azure SQL Database

Ajouter un fragment pour une nouvelle plage ou une nouvelle clé

Les applications ont souvent besoin d’ajouter de nouvelles partitions pour gérer des données attendues de nouvelles clés ou plages de clés, pour une carte de partitions qui existe déjà. Par exemple, une application partitionnée par TenantID pourrait avoir besoin de créer une nouvelle partition pour un nouveau locataire, ou des données partitionnées mensuellement pourraient nécessiter la provision d’une nouvelle partition avant le début de chaque nouveau mois.

Si la nouvelle plage de valeurs de clé n’appartient pas déjà à un mappage existant, vous pouvez ajouter la nouvelle partition et associer la nouvelle clé ou la plage à cette partition.

Exemple : ajout d’une partition et de sa plage à une carte de partition existante

Cet exemple utilise les TryGetShard méthodes (Java, .NET) CreateShard (Java, .NET), CreateRangeMapping (Java, .NET , et crée une instance de la ShardLocation classe (Java, .NET). Dans l’exemple suivant, une base de données nommée sample_shard_2 et tous les objets de schéma nécessaires à l’intérieur de celui-ci ont été créés pour contenir la plage [300, 400).

// sm is a RangeShardMap object.
// Add a new shard to hold the range being added.
Shard shard2 = null;

if (!sm.TryGetShard(new ShardLocation(shardServer, "sample_shard_2"),out shard2))
{
    shard2 = sm.CreateShard(new ShardLocation(shardServer, "sample_shard_2"));  
}

// Create the mapping and associate it with the new shard
sm.CreateRangeMapping(new RangeMappingCreationInfo<long>
                            (new Range<long>(300, 400), shard2, MappingStatus.Online));

Ajoutez un fragment à une partie vide d’une plage existante.

Dans certaines circonstances, vous avez peut-être déjà associé une plage à un shard et l'avez partiellement remplie de données, mais vous souhaitez maintenant que les données à venir soient dirigées vers un autre shard. Par exemple, vous pouvez partitionner par plage de jours et vous avez déjà alloué 50 jours à une partition, mais le jour 24, vous souhaitez que les données futures soient dirigées vers une autre partition. L’outil de fusion et de fractionnement de la base de données élastique peut effectuer cette opération, mais s’il n’est pas nécessaire de déplacer des données (par exemple, les données de la plage de jours [25, 50), c’est-à-dire le jour 25 inclus et le jour 50 exclu, n’existent pas encore) vous pouvez effectuer cela entièrement en utilisant directement les API de gestion de carte de partition.

Exemple : fractionnement d’une plage et affectation de la partie vide dans une partition nouvellement ajoutée

Une base de données nommée sample_shard_2 et tous les objets de schéma nécessaires à l’intérieur de celui-ci ont été créés.

// sm is a RangeShardMap object.
// Add a new shard to hold the range we will move
Shard shard2 = null;

if (!sm.TryGetShard(new ShardLocation(shardServer, "sample_shard_2"),out shard2))
{
    shard2 = sm.CreateShard(new ShardLocation(shardServer,"sample_shard_2"));  
}

// Split the Range holding Key 25
sm.SplitMapping(sm.GetMappingForKey(25), 25);

// Map new range holding [25-50) to different shard:
// first take existing mapping offline
sm.MarkMappingOffline(sm.GetMappingForKey(25));

// now map while offline to a different shard and take online
RangeMappingUpdate upd = new RangeMappingUpdate();
upd.Shard = shard2;
sm.MarkMappingOnline(sm.UpdateMapping(sm.GetMappingForKey(25), upd));

Importante

Utilisez cette technique seulement si vous êtes certain que la plage de mappage mis à jour est vide. Les méthodes précédentes ne vérifient pas les données de la plage déplacée. Il est donc préférable d’inclure des vérifications dans votre code. S’il existe des lignes dans la plage déplacée, la distribution des données réelle ne correspondra pas à la carte des partitions mise à jour. Utilisez l’outil de fusion et de fractionnement pour effectuer cette opération, au lieu de le faire dans ces cases.

Vous n’utilisez pas encore d’outils de base de données élastique ? Consultez notre Guide de prise en main. Pour toute question, contactez-nous par le biais de la page de questions Microsoft Q&A sur SQL Database et, pour vos demandes de fonctionnalités, ajoutez de nouvelles idées ou votez pour les idées existantes sur le forum de commentaires SQL Database.