Migrera befintliga databaser för att skala ut

Gäller för:Azure SQL Database

Hantera enkelt dina befintliga utskalade shardade databaser med hjälp av verktyg (till exempel Elastic Database-klientbiblioteket). Konvertera först en befintlig uppsättning databaser till att använda shard map manager.

Översikt

Så här migrerar du en befintlig fragmenterad databas:

  1. Förbered shard map manager-databasen.
  2. Skapa fragmentkartan.
  3. Förbered enskilda shards.
  4. Lägg till mappningar i fragmentkartan.

Dessa tekniker kan implementeras med hjälp av . NET Framework-klientbiblioteket eller PowerShell-skripten som finns i Azure SQL Database – Elastic Database-verktygsskript. Exemplen här använder PowerShell-skripten.

Mer information om ShardMapManager finns i Shard Map Management. En översikt över elastic database-verktygen finns i Översikt över elastic database-funktioner.

Förbereda shard map manager-databasen

Shard Map Manager är en särskild databas som innehåller data för att hantera utskalade databaser. Du kan använda en befintlig databas eller skapa en ny databas. En databas som fungerar som shard map manager bör inte vara samma databas som en shard. PowerShell-skriptet skapar inte databasen åt dig.

Steg 1: Skapa en shard map manager

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

Så här hämtar du karthanteraren för shard

När du har skapat den kan du hämta karthanteraren för shard med den här cmdleten. Det här steget behövs varje gång du behöver använda ShardMapManager-objektet.

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

Steg 2: Skapa fragmentkartan

Välj den typ av fragmentkarta som ska skapas. Valet beror på databasarkitekturen:

  1. Enskild klientorganisation per databas (Termerna finns i ordlistan.)
  2. Flera klientorganisationer per databas (två typer):
    1. Listmappning
    2. Intervallmappning

Skapa en shardkarta för listmappning för en enskild klientorganisationsmodell. Modellen med en klient tilldelar en databas per klientorganisation. Detta är en effektiv modell för SaaS-utvecklare eftersom det förenklar hanteringen.

List mapping

Modellen med flera klientorganisationer tilldelar flera klientorganisationer till en enskild databas (och du kan distribuera grupper av klientorganisationer över flera databaser). Använd den här modellen när du förväntar dig att varje klientorganisation har små databehov. I den här modellen tilldelar du ett intervall med klienter till en databas med hjälp av intervallmappning.

Range mapping

Eller så kan du implementera en databasmodell för flera klientorganisationer med hjälp av en listmappning för att tilldela flera klienter till en enskild databas. Db1 används till exempel för att lagra information om klientorganisations-ID 1 och 5, och DB2 lagrar data för klientorganisation 7 och klient 10.

Multiple tenants on single DB

Välj något av följande alternativ baserat på ditt val:

Alternativ 1: Skapa en fragmentkarta för en listmappning

Skapa en fragmentkarta med hjälp av ShardMapManager-objektet.

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

Alternativ 2: Skapa en fragmentkarta för en intervallmappning

För att kunna använda det här mappningsmönstret måste klientorganisations-ID-värden vara kontinuerliga intervall, och det är acceptabelt att ha en lucka i intervallen genom att hoppa över intervallet när du skapar databaserna.

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

Alternativ 3: Lista mappningar i en enskild databas

Om du konfigurerar det här mönstret måste du också skapa en listkarta som du ser i steg 2, alternativ 1.

Steg 3: Förbereda enskilda shards

Lägg till varje shard (databas) i shard map manager. Detta förbereder de enskilda databaserna för lagring av mappningsinformation. Kör den här metoden på varje shard.

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

Steg 4: Lägga till mappningar

Tillägget av mappningar beror på vilken typ av shardkarta du skapade. Om du har skapat en listkarta lägger du till listmappningar. Om du har skapat en intervallkarta lägger du till intervallmappningar.

Alternativ 1: Mappa data för en listmappning

Mappa data genom att lägga till en listmappning för varje klientorganisation.

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

Alternativ 2: Mappa data för en intervallmappning

Lägg till intervallmappningarna för alla klientorganisations-ID-intervall – databasassociationer:

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

Steg 4 alternativ 3: Mappa data för flera klienter i en enskild databas

För varje klientorganisation kör du Add-ListMapping (alternativ 1).

Kontrollera mappningarna

Information om befintliga shards och de mappningar som är associerade med dem kan efterfrågas med hjälp av följande kommandon:

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

Sammanfattning

När du har slutfört installationen kan du börja använda Elastic Database-klientbiblioteket. Du kan också använda databeroende routning och multi-shard-fråga.

Nästa steg

Hämta PowerShell-skript från Azure Elastic Database-verktygsskript.

Klientbiblioteket för elastiska databasverktyg finns på GitHub: Azure/elastic-db-tools.

Använd verktyget för delningskoppling för att flytta data till eller från en modell för flera klientorganisationer till en enda klientorganisationsmodell. Se Verktyget Dela sammanfogning.

Ytterligare resurser

Information om vanliga mönster för dataarkitekturen i SaaS-databasprogram (Software-as-a-Service) med flera klienter finns i Designmönster för SaaS-program med flera klienter i Azure SQL Database.

Frågor och funktionsförfrågningar

För frågor kan du använda microsofts Q&A-frågesida för SQL Database och för funktionsbegäranden lägger du till dem i SQL Database-feedbackforumet.