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 w poziomie bazami danych podzielonymi na fragmenty przy użyciu narzędzi (takich jak Tworzenie skalowalnych baz danych w chmurze). 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.

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

Diagram mapowania listy.

Model multitenant przypisuje wielu dzierżawców do pojedynczej bazy danych (i można rozproszyć grupy dzierżawców 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.

Diagram mapowania zakresu.

Możesz też zaimplementować wielonajemcowy model bazy danych przy użyciu mapowania listy w celu przypisania wielu najemców 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.

Diagram przedstawiający 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żawców muszą być zakresami ciągłymi i dopuszczalne jest występowanie luk w zakresach, pomijając określony 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. $ShardMap to mapa fragmentów utworzony w kroku 2.

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. Użyj następującego przykładowego skryptu programu PowerShell, aby utworzyć mapowania i skojarzyć je z nowymi fragmentami.

# Create the mapping 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 przedziałów ID dzierżawy i ich powiązań z bazą danych. Użyj następującego przykładowego skryptu programu PowerShell, aby utworzyć mapowania i skojarzyć je z nowymi fragmentami.

# Create the mapping 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 cmdlet Add-ListMapping (opcja 1).

Sprawdzanie mapowań

Informacje o istniejących fragmentach i skojarzonych z nimi mapowaniach można wysyłać zapytania za pomocą następującego przykładowego skryptu programu PowerShell.

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