Hinzufügen eines Shards mithilfe der Tools für elastische Datenbanken

Gilt für:Azure SQL-Datenbank

So fügen Sie einen Shard für einen neuen Bereich oder Schlüssel hinzu

Anwendungen müssen häufig neue Shards hinzufügen, um Daten zu verwalten, die von neuen Schlüsseln oder Schlüsselbereichen für eine Shardzuordnung erwartet werden, die bereits vorhanden ist. Eine Anwendung beispielsweise, bei der Sharding nach Mandanten-ID erfolgt, muss ggf. einen neuen Shard für einen neuen Mandanten erstellen. Oder Daten mit monatlichem Sharding benötigen möglicherweise einen neuen Shard, der vor Beginn jedes neuen Monats bereitgestellt wird.

Wenn der neue Schlüsselwertbereich nicht bereits Teil einer vorhandenen Zuordnung (Mapping) ist, können Sie den neuen Shard hinzufügen und den neuen Schlüssel oder Bereich diesem Shard zuordnen.

Beispiel: Hinzufügen eines Shards und seines Bereichs zu einer vorhandenen Shard-Zuordnung

In diesem Beispiel werden die Methoden TryGetShard (Java, .NET), CreateShard (Java, .NET) und CreateRangeMapping (Java, .NET) verwendet, und es wird eine Instanz der ShardLocation-Klasse (Java, .NET) erstellt. Im Beispiel unten wurden eine Datenbank namens sample_shard_2 mit allen erforderlichen darin enthaltenen Schemaobjekten so erstellt, dass sie den Bereich [300, 400) abdecken.

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

Für die .NET-Version können Sie auch PowerShell verwenden, um einen neuen Shardzuordnungs-Manager zu erstellen. Ein Beispiel ist hierverfügbar.

So fügen Sie einen Shard für einen leeren Teil eines vorhandenen Bereichs hinzu

In einigen Fällen haben Sie einem Shard vielleicht bereits einen Bereich zugeordnet und diesen teilweise mit Daten gefüllt. Jetzt möchten Sie aber weitere Daten an einen anderen Shard umleiten. Angenommen, Sie führen das Sharding nach einem Bereich von Tagen durch und haben einem Shard bereits 50 Tage zugeordnet. Am 24. Tag sollen zukünftige Daten jedoch an einen anderen Shard weitergeleitet werden. Das Split-Merge-Tool für elastische Datenbanken kann diesen Vorgang durchführen. Wenn jedoch keine Datenverschiebung erforderlich ist (weil z. B. noch keine Daten für den Tagesbereich 25-50, d. h. einschließlich Tag 25 bis ausschließlich Tag 50, vorliegen), können Sie den ganzen Vorgang direkt mithilfe der Verwaltungs-APIs für die Shardzuordnung durchführen.

Beispiel: Aufteilen eines Bereichs und Zuweisen des leeren Teils zu einem neu hinzugefügten Shard

Eine Datenbank namens „sample_shard_2“ sowie alle erforderlichen, darin enthaltenen Schemaobjekte wurden erstellt.

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

Wichtig

Verwenden Sie dieses Verfahren nur, wenn Sie sicher sind, dass der Bereich für die aktualisierte Zuordnung leer ist. Durch die oben genannten Methoden werden keine Daten für den verschobenen Bereich überprüft. Deshalb empfiehlt es sich, Prüfroutinen im Code zu implementieren. Wenn der verschobene Bereich Zeilen enthält, stimmt die tatsächliche Datenverteilung nicht mit der aktualisierten Shard Map überein. Verwenden Sie das Split-Merge-Tool, um den Vorgang durchzuführen.

Zusätzliche Ressourcen

Verwenden Sie noch keine elastischen Datenbanktools? Sehen Sie sich unseren Leitfaden zu den ersten Schritten an. Wenden Sie sich bei Fragen auf der Frageseite von Microsoft Q&A für SQL-Datenbank und für Featureanforderungen an uns, fügen Sie neue Ideen hinzu, oder stimmen Sie im SQL-Datenbank-Feedbackforumüber vorhandene Ideen ab.