Migrieren vorhandener Datenbanken für die Aufskalierung

Gilt für:Azure SQL-Datenbank

Verwalten Sie Ihre vorhandenen horizontal skalierten Sharddatenbanken mithilfe von Tools (wie z. B. der Clientbibliothek für elastische Datenbanken). Konvertieren Sie zunächst eine vorhandene Gruppe von Datenbanken für die Verwendung des Shardzuordnungs-Managers.

Übersicht

So migrieren Sie eine vorhandene Sharddatenbank:

  1. Bereiten Sie die Shardzuordnungs-Manager-Datenbankvor.
  2. Erstellen Sie die Shardzuordnung.
  3. Bereiten Sie die einzelnen Shards vor.
  4. Fügen Sie Zuordnungen zur Shardzuordnung hinzu.

Diese Schritte können entweder unter Verwendung der .NET Framework-Clientbibliothek oder der PowerShell-Skripts ausgeführt werden, die unter Azure SQL Database – Elastic Database tools scripts (Azure SQL-Datenbank – Skripts für Tools für elastische Datenbanken) verfügbar sind. Für die hier beschriebenen Beispiele werden die PowerShell-Skripts verwendet.

Weitere Informationen zum Shardzuordnungs-Manager finden Sie unter Shard-Zuordnungsverwaltung. Eine Übersicht der Tools für elastische Datenbanken finden Sie unter Übersicht über Features für elastische Datenbanken.

Vorbereiten der Shardzuordnungs-Manager-Datenbank

Der Shardzuordnungs-Manager ist eine spezielle Datenbank, die Daten zur Verwaltung von horizontal skalierten Datenbanken enthält. Sie können eine vorhandene Datenbank verwenden oder eine neue Datenbank erstellen. Eine als Shardzuordnungs-Manager eingesetzten Datenbank sollte nicht gleichzeitig eine Datenbank sein, die als Shard definiert ist. Das PowerShell-Skript erstellt die Datenbank nicht für Sie.

Schritt 1: Erstellen eines Shardzuordnungs-Managers

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

So rufen Sie den Shardzuordnungs-Manager ab

Nach dem Erstellen können Sie den Shardzuordnungs-Manager mit diesem Cmdlet abrufen. Dieser Schritt muss jedes Mal ausgeführt werden, wenn Sie das ShardMapManager-Objekt verwenden müssen.

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

Schritt 2: Erstellen der Shardzuordnung

Wählen Sie den Typ der zu erstellenden Shardzuordnung aus. Die Auswahl hängt von der Architektur der Datenbank ab:

  1. Ein Mandant pro Datenbank (Informationen finden Sie im Glossar).
  2. Mehrere Mandanten pro Datenbank (zwei Typen):
    1. Listenzuordnung
    2. Bereichszuordnung

Erstellen Sie für ein Modell mit einem einzelnen Mandanten eine Listenzuordnungs -Shardzuordnung. Beim Modell mit einem Mandanten wird eine Datenbank pro Mandant zugewiesen. Dies ist ein effektives Modell für SaaS-Entwickler, da es die Verwaltung vereinfacht.

List mapping

Beim Modell mit mehreren Mandanten werden einer einzelnen Datenbank mehrere Mandanten zugewiesen. Außerdem können Sie Mandantengruppen auf verschiedene Datenbanken verteilen. Verwenden Sie dieses Modell, wenn Sie erwarten, dass die einzelnen Mandanten geringe Datenanforderungen haben. In diesem Modell wird einer Datenbank mithilfe der Bereichszuordnung ein Bereich von Mandanten zugewiesen.

Range mapping

Wenn Sie einer einzelnen Datenbank mehrere Mandanten zuweisen möchten, kann das Datenbankmodell mit mehreren Mandanten auch unter Verwendung einer Listenzuordnung implementiert werden. Beispiel: DB1 wird zum Speichern von Informationen zu den Mandanten-IDs 1 und 5, DB2 zum Speichern von Daten für die Mandanten 7 und 10 verwendet.

Multiple tenants on single DB

Basierend auf Ihrer Entscheidung wählen Sie eine der folgenden Optionen aus:

Option 1: Erstellen einer Shardzuordnung für eine Listenzuordnung

Erstellen Sie mithilfe des ShardMapManager-Objekts eine Shardzuordnung.

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

Option 2: Erstellen einer Shardzuordnung für eine Bereichszuordnung

Bei Verwendung dieses Zuordnungsmusters müssen die Mandanten-IDs fortlaufende Bereiche sein. Dabei können Bereiche unterbrochen werden, indem Sie einen Bereich beim Erstellen der Datenbanken überspringen.

# $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: Listenzuordnungen für eine einzelne Datenbank

Für die Einrichtung dieses Musters muss auch eine Listenzuordnung erstellt werden, wie in Schritt 2, Option 1 gezeigt.

Schritt 3: Vorbereiten der einzelnen Shards

Fügen Sie die einzelnen Shards (Datenbanken) dem Shardzuordnungs-Manager hinzu. Dadurch werden die einzelnen Datenbanken für das Speichern von Zuordnungsinformationen vorbereitet. Führen Sie diese Schritte für jeden Shard aus.

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

Schritt 4: Hinzufügen von Zuordnungen

Die Schritte zum Hinzufügen von Zuordnungen hängen von der Art der Shardzuordnung ab, die Sie erstellt haben. Wenn Sie eine Listenzuordnung erstellt haben, fügen Sie Listenzuordnungen hinzu. Wenn Sie eine Bereichszuordnung erstellt haben, fügen Sie Bereichszuordnungen hinzu.

Option 1: Zuordnen der Daten für eine Listenzuordnung

Ordnen Sie die Daten zu, indem Sie eine Listenzuordnung für jeden Mandanten hinzufügen.

# Create the mappings 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 2: Zuordnen der Daten für eine Bereichszuordnung

Fügen Sie die Bereichszuordnungen für alle Zuordnungen zwischen Mandanten-ID-Bereichen und der Datenbank hinzu:

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

Schritt 4, Option 3: Zuordnen der Daten für mehrere Mandanten zu einer einzelnen Datenbank

Führen Sie für jeden Mandanten Add-ListMapping aus (Option 1).

Überprüfen der Zuordnungen

Informationen zu vorhandenen Shards und den zugehörigen Zuordnungen können über die folgenden Befehle abgefragt werden:

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

Zusammenfassung

Nach der Einrichtung können Sie die Clientbibliothek für elastische Datenbanken verwenden. Außerdem können Sie das datenabhängige Routing und das Abfragen mehrerer Shards nutzen.

Nächste Schritte

Laden Sie die PowerShell-Skripts von Azure Skripts für Tools für elastische Datenbanken (Azure Elastic Database tools scripts) herunter.

Die Client-Bibliothek für Tools für elastische Datenbanken ist unter GitHub Azure/elastic-db-tools verfügbar.

Verschieben Sie Daten mithilfe des Split-Merge-Tools in das Modell mit mehreren Mandanten bzw. aus diesem Modell in ein Modell mit einem einzelnen Mandanten. Siehe Split-Merge-Tool.

Zusätzliche Ressourcen

Informationen zu gängigen Datenarchitekturmustern von mehrinstanzenfähigen SaaS-Datenbankanwendungen (Software as a Service) finden Sie unter Entwurfsmuster für mehrinstanzenfähige SaaS-Anwendungen und Azure SQL-Datenbank.

Fragen und Featureanfragen

Bei Fragen nutzen Sie die Microsoft F&A-Seite für SQL-Datenbank, Featureanforderungen können Sie im Feedbackforum für SQL-Datenbank einreichen.