Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:Azure SQL Database
Lägg till ett fragment för ett nytt intervall eller en ny nyckel
Program behöver ofta lägga till nya shards för att hantera data som förväntas från nya nycklar eller nyckelintervall, för en fragmentkarta som redan finns. Ett program som delats in med TenantID kan till exempel behöva skapa en ny delning för en ny klientorganisation, eller data som partitioneras varje månad kan behöva en ny delning etablerad före början av varje ny månad.
Om det nya intervallet med nyckelvärden inte redan är en del av en befintlig mappning kan du lägga till den nya fragmentet och associera den nya nyckeln eller intervallet till fragmentet.
Exempel: lägga till en shard och dess intervall till en befintlig fragmentkarta
I det här exemplet används TryGetShard (Java, .NET), CreateShard (Java, .NET), CreateRangeMapping (Java, .NET) metoder, och en instans av ShardLocation klassen skapas (Java, .NET). I följande exempel har en databas med namnet sample_shard_2 och alla nödvändiga schemaobjekt i den skapats för att innehålla intervallet [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));
Lägg till ett fragment för en tom del av ett befintligt intervall
I vissa fall kanske du redan har mappat ett intervall till ett fragment och delvis fyllt det med data, men nu vill du att kommande data ska dirigeras till en annan shard. Du kan till exempel sharda efter dagintervall och redan har allokerat 50 dagar till en shard, men dag 24 vill du att framtida data ska landa i en annan shard. Split-merge-verktyget för elastisk databas kan utföra den här åtgärden, men om dataflytt inte är nödvändig (till exempel om data för dagintervallet [25, 50), det vill säga dag 25 är inkluderad och 50 är exkluderad, ännu inte finns) kan du utföra detta helt och hållet med hjälp av Shard Map Management API:erna direkt.
Exempel: Dela upp ett intervall och tilldela den tomma delen till en nyligen tillagd shard
En databas med namnet sample_shard_2 och alla nödvändiga schemaobjekt i den har skapats.
// 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));
Viktigt!
Använd endast den här tekniken om du är säker på att intervallet för den uppdaterade mappningen är tomt. Föregående metoder kontrollerar inte data för det intervall som flyttas, så det är bäst att inkludera kontroller i koden. Om det finns rader i intervallet som flyttas matchar inte den faktiska datafördelningen den uppdaterade fragmentkartan. Använd verktyget split-merge för att utföra åtgärden i stället i dessa fall.
Relaterat innehåll
Använder du inte elastiska databasverktyg än? Kolla in vår komma igång-guide. För frågor kan du kontakta oss på Microsoft Q&En frågesida för SQL Database och för funktionsförfrågningar, lägga till nya idéer eller rösta på befintliga idéer i SQL Database-feedbackforumet.