Udostępnij za pośrednictwem


Migrowanie istniejących baz danych w celu skalowania w poziomie

Dotyczy: Azure SQL Database

Łatwe zarządzanie istniejącymi skalowalnymi bazami danych podzielonymi na fragmenty przy użyciu narzędzi (takich jak biblioteka klienta elastic database). Najpierw przekonwertuj istniejący zestaw baz danych, aby użyć menedżera mapy fragmentów.

Omówienie

Aby przeprowadzić migrację istniejącej bazy danych podzielonej na fragmenty:

  1. Przygotuj bazę danych menedżera map fragmentów.
  2. Utwórz mapę fragmentów.
  3. Przygotuj poszczególne fragmenty.
  4. Dodaj mapowania do mapy fragmentów.

Te techniki można zaimplementować przy użyciu biblioteki klienta programu .NET Framework lub skryptów programu PowerShell znajdujących się w artykule Azure SQL Database — Elastic Database tools scripts (Skrypty narzędzi usługi Azure SQL Database — elastic database). W tym przykładzie użyto skryptów programu PowerShell.

Aby uzyskać więcej informacji na temat narzędzia ShardMapManager, zobacz Zarządzanie mapami fragmentów. Aby zapoznać się z omówieniem narzędzi elastycznej bazy danych, zobacz Omówienie funkcji elastic Database.

Przygotowywanie bazy danych menedżera map fragmentów

Menedżer map fragmentów to specjalna baza danych zawierająca dane do zarządzania skalowalnymi w poziomie bazami danych. Możesz użyć istniejącej bazy danych lub utworzyć nową bazę danych. Baza danych działająca jako menedżer mapy fragmentów nie powinna być tą samą bazą danych co fragment. Skrypt programu PowerShell nie tworzy bazy danych.

Krok 1. Tworzenie menedżera mapy fragmentów

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

Aby pobrać menedżera mapy fragmentów

Po utworzeniu możesz pobrać menedżera map fragmentów za pomocą tego polecenia cmdlet. Ten krok jest potrzebny za każdym razem, gdy trzeba użyć obiektu ShardMapManager.

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

Krok 2. Tworzenie mapy fragmentów

Wybierz typ mapy fragmentów do utworzenia. Wybór zależy od architektury bazy danych:

  1. Pojedyncza dzierżawa na bazę danych (aby uzyskać terminy, zobacz słownik).
  2. Wiele dzierżaw na bazę danych (dwa typy):
    1. Mapowanie listy
    2. Mapowanie zakresu

W przypadku modelu z jedną dzierżawą utwórz mapę fragmentów mapowania listy. Model z jedną dzierżawą przypisuje jedną bazę danych na dzierżawę. Jest to skuteczny model dla deweloperów SaaS, który upraszcza zarządzanie.

Mapowanie listy

Model wielodostępny przypisuje kilka dzierżaw do pojedynczej bazy danych (i można dystrybuować grupy dzierżaw w wielu bazach danych). Użyj tego modelu, gdy oczekujesz, że każda dzierżawa będzie miała niewielkie potrzeby dotyczące danych. W tym modelu przypisz zakres dzierżaw do bazy danych przy użyciu mapowania zakresu.

Mapowanie zakresu

Możesz też zaimplementować model wielodostępnej bazy danych przy użyciu mapowania listy w celu przypisania wielu dzierżaw do pojedynczej bazy danych. Na przykład baza danych DB1 służy do przechowywania informacji o identyfikatorze dzierżawy 1 i 5, a baza danych DB2 przechowuje dane dla dzierżawy 7 i dzierżawy 10.

Wiele dzierżaw w pojedynczej bazie danych

W zależności od wybranej opcji wybierz jedną z następujących opcji:

Opcja 1. Tworzenie mapy fragmentów dla mapowania listy

Utwórz mapę fragmentów przy użyciu obiektu ShardMapManager.

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

Opcja 2. Tworzenie mapy fragmentów dla mapowania zakresu

Aby użyć tego wzorca mapowania, wartości identyfikatorów dzierżawy muszą być zakresami ciągłymi i akceptowalne jest, aby mieć lukę w zakresach, pomijając zakres podczas tworzenia baz danych.

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

Opcja 3. Mapowania listy w pojedynczej bazie danych

Skonfigurowanie tego wzorca wymaga również utworzenia mapy listy, jak pokazano w kroku 2, opcja 1.

Krok 3. Przygotowanie poszczególnych fragmentów

Dodaj każdy fragment (bazę danych) do menedżera map fragmentów. Spowoduje to przygotowanie poszczególnych baz danych do przechowywania informacji o mapowaniu. Wykonaj tę metodę dla każdego fragmentu.

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

Krok 4. Dodawanie mapowań

Dodawanie mapowań zależy od rodzaju utworzonej mapy fragmentów. Jeśli utworzono mapę listy, dodasz mapowania listy. Jeśli utworzono mapę zakresu, dodasz mapowania zakresów.

Opcja 1. Mapowanie danych dla mapowania listy

Zamapuj dane, dodając mapowanie listy dla każdej dzierżawy.

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

Opcja 2. Mapowanie danych na mapowanie zakresu

Dodaj mapowania zakresów dla wszystkich zakresów identyfikatorów dzierżawy — skojarzenia bazy danych:

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

Krok 4. Opcja 3. Mapuj dane dla wielu dzierżaw w pojedynczej bazie danych

Dla każdej dzierżawy uruchom polecenie Add-ListMapping (opcja 1).

Sprawdzanie mapowań

Informacje o istniejących fragmentach i skojarzonych z nimi mapowaniach można wykonywać zapytania przy użyciu następujących poleceń:

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

Podsumowanie

Po zakończeniu instalacji możesz rozpocząć korzystanie z biblioteki klienta elastic database. Możesz również użyć routingu zależnego od danych i zapytania wieloczęściowego.

Następne kroki

Pobierz skrypty programu PowerShell ze skryptów narzędzi usługi Azure Elastic Database.

Biblioteka klienta narzędzi elastycznych baz danych jest dostępna w witrynie GitHub: Azure/elastic-db-tools.

Użyj narzędzia split-merge, aby przenieść dane do lub z modelu wielodostępnego do jednego modelu dzierżawy. Zobacz Split merge tool (Dzielenie narzędzia scalania).

Dodatkowe zasoby

Aby uzyskać informacje na temat typowych wzorców architektury danych w aplikacjach baz danych typu oprogramowanie jako usługa (SaaS), zobacz artykuł Design Patterns for Multi-tenant SaaS Applications with Azure SQL Database (Wzorce projektowe dla wielodostępnych aplikacji SaaS korzystających z usługi Azure SQL Database).

Pytania i żądania funkcji

W przypadku pytań użyj strony pytań i odpowiedzi firmy Microsoft dla usługi SQL Database i żądań funkcji, dodaj je do forum opinii usługi SQL Database.