Delen via


Een shard toevoegen met elastic database-hulpprogramma's

Van toepassing op: Azure SQL Database

Een shard toevoegen voor een nieuw bereik of nieuwe sleutel

Toepassingen moeten vaak nieuwe shards toevoegen om gegevens te verwerken die worden verwacht uit nieuwe sleutels of sleutelbereiken, voor een shard-toewijzing die al bestaat. Een toepassing die is geshard door tenant-id, moet bijvoorbeeld mogelijk een nieuwe shard maken voor een nieuwe tenant, of er is mogelijk een nieuwe shard nodig die maandelijks is ingericht voordat elke nieuwe maand wordt gestart.

Als het nieuwe bereik met sleutelwaarden nog geen deel uitmaakt van een bestaande toewijzing, kunt u de nieuwe shard toevoegen en de nieuwe sleutel of het nieuwe bereik aan die shard koppelen.

Voorbeeld: een shard en het bijbehorende bereik toevoegen aan een bestaande shard-toewijzing

In dit voorbeeld wordt gebruikgemaakt van TryGetShard (Java, .NET) de CreateShard (Java, .NET), CreateRangeMapping (Java, .NET-methoden) en wordt een exemplaar van de klasse ShardLocation (Java, .NET) gemaakt. In het onderstaande voorbeeld is een database met de naam sample_shard_2 en alle benodigde schemaobjecten in de database gemaakt voor het bereik [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));

Voor de .NET-versie kunt u PowerShell ook gebruiken als alternatief voor het maken van een nieuwe Shard-toewijzingsbeheer. Hier is een voorbeeld beschikbaar.

Een shard toevoegen voor een leeg deel van een bestaand bereik

In sommige gevallen hebt u mogelijk al een bereik toegewezen aan een shard en gedeeltelijk gevuld met gegevens, maar u wilt nu dat toekomstige gegevens worden omgeleid naar een andere shard. U kunt bijvoorbeeld sharden op dagbereik en al 50 dagen aan een shard hebben toegewezen, maar op dag 24 wilt u dat toekomstige gegevens in een andere shard terechtkomen. Het hulpprogramma voor splitsen en samenvoegen van elastische databases kan deze bewerking uitvoeren, maar als gegevensverplaatsing niet nodig is (bijvoorbeeld gegevens voor het bereik van dagen [25, 50), dat wil gezegd, dag 25 tot 50 exclusief, bestaat nog niet) kunt u dit volledig uitvoeren met behulp van de Shard Map Management-API's.

Voorbeeld: een bereik splitsen en het lege gedeelte toewijzen aan een nieuw toegevoegde shard

Er is een database met de naam 'sample_shard_2' en alle benodigde schemaobjecten in de database gemaakt.

// 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));

Belangrijk

Gebruik deze techniek alleen als u zeker weet dat het bereik voor de bijgewerkte toewijzing leeg is. Met de voorgaande methoden worden geen gegevens gecontroleerd op het bereik dat wordt verplaatst, dus u kunt het beste controles in uw code opnemen. Als er rijen in het bereik bestaan dat wordt verplaatst, komt de werkelijke gegevensdistributie niet overeen met de bijgewerkte shard-toewijzing. Gebruik het hulpprogramma voor splitsen en samenvoegen om de bewerking in deze gevallen uit te voeren.

Aanvullende bronnen

Gebruikt u nog geen hulpprogramma's voor elastische databases? Bekijk de handleiding Aan de slag. Neem voor vragen contact met ons op op de microsoft Q&A-vragenpagina voor SQL Database en voor functieaanvragen, voeg nieuwe ideeën toe of stem op bestaande ideeën in het feedbackforum van SQL Database.