Перенос существующих баз данных для горизонтального увеличения масштаба

Применимо к:База данных SQL Azure

Вы можете легко управлять существующими масштабируемыми сегментированными базами данных с помощью средств (таких как клиентская библиотека для эластичных баз данных). Для использования диспетчера сопоставления сегментов следует сначала преобразовать существующий набор баз данных.

Обзор

Для переноса существующей сегментированной базы данных выполните следующие действия.

  1. Подготовка базы данных диспетчера карты сегментов.
  2. Создание карты сегментов.
  3. Подготовка отдельных сегментов.
  4. Добавление сопоставлений на карту сегментов.

Эти методы можно реализовать с помощью клиентской библиотеки .NET Framework или сценариев PowerShell, которые можно найти на странице Azure SQL DB — Elastic Database tools scripts. В приведенных здесь примерах используются скрипты PowerShell.

Чтобы больше узнать о ShardMapManager, ознакомьтесь с управлением картами сегментов. Общие сведения об инструментах эластичной базы данных см. в обзоре возможностей эластичных баз данных.

Подготовка базы данных диспетчера карты сегментов

Диспетчер карты сегментов — это специальная база данных, хранящая данные для управления масштабируемыми базами данных. Можно использовать существующую базу данных или создать новую. Для диспетчера сопоставления сегментов и для сегмента следует использовать разные базы данных. Сценарий PowerShell не создает базу данных автоматически.

Шаг 1. Создание диспетчера сопоставления сегментов

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

Извлечение диспетчера сопоставления сегментов

Созданный диспетчер сопоставления сегментов можно извлечь с помощью этого командлета. Этот шаг требуется выполнять при каждом использовании объекта 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>'

Шаг 2. Создание карты сегментов

Выберите тип создаваемого сопоставления сегментов. Этот выбор зависит от архитектуры базы данных.

  1. Один клиент на базу данных (определения терминов см. в глоссарии).
  2. Несколько клиентов на базу данных (два типа):
    1. Сопоставление по спискам
    2. Сопоставление по диапазонам

Для модели с одним клиентом создайте карту сегментов с сопоставлением по списку . В модели с одним клиентом каждому клиенту назначается по одной базе данных. Эта модель подходит для разработчиков SaaS, так как она упрощает управление.

List mapping

Мультитенантная модель назначает несколько клиентов отдельной базе данных (а группы клиентов вы можете распределять по нескольким базам данных). Эту модель можно использовать, когда у каждого отдельного клиента низкие потребности в обработке данных. В этой модели клиенты соотносятся с базой данных с использованием сопоставления по диапазонам.

Range mapping

Вы можете также реализовать модель с несколькими клиентами с помощью сопоставления по списку, чтобы назначить несколько клиентов отдельной базе данных. Например, база данных DB1 используется для хранения информации о клиенте 1 и 5, а DB2 хранит данные о клиенте 7 и 10.

Multiple tenants on single DB

Выберите один из вариантов, соответствующий вашему выбору.

Вариант 1. Создание карты сегментов для сопоставления по списку

Создайте карту сегментов, используя объект ShardMapManager.

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

Вариант 2. Создание карты сегментов для сопоставления по диапазонам

Для использования этого шаблона сопоставления потребуются непрерывные диапазоны значений идентификаторов клиентов. Кроме того, можно не включать все диапазоны и пропустить один из них при создании базы данных.

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

Вариант 3. Список сопоставлений на отдельной базе данных

Для настройки этого шаблона также требуется создать карту списков, как показано в разделе "Шаг 2, вариант 1".

Шаг 3. Подготовка отдельных сегментов

Добавьте каждый сегмент (база данных) в диспетчер сопоставления сегментов. Таким образом отдельные базы данных будут подготовлены для хранения сведений о сопоставлении. Подготовьте так каждый сегмент.

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

Шаг 4. Добавление сопоставлений

Добавление сопоставлений зависит от вида созданной карты сегментов. Если создана карта списков, нужно добавить сопоставления по спискам. Если создана карта диапазонов, нужно добавить сопоставления по диапазонам.

Вариант 1. Сопоставление данных для сопоставления по списку

Сопоставьте данные, добавив сопоставление по спискам для каждого клиента.

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

Вариант 2. Сопоставление данных для сопоставления по диапазонам

Добавьте сопоставления по диапазонам для всех связанных диапазонов идентификаторов клиентов и баз данных.

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

Шаг 4, вариант 3. Сопоставление данных для нескольких клиентов в отдельной базе данных

Для каждого клиента следует выполнить функцию Add-ListMapping (вариант 1).

Проверка сопоставлений

Сведения о существующих сегментах и сопоставлениях, связанных с ними, можно запросить с помощью следующих команд:

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

Итоги

После завершения настройки можно начать работу с клиентской библиотекой эластичной базы данных. Кроме того, можно воспользоваться маршрутизацией, зависящей от данных, и формированием многосегментных запросов.

Следующие шаги

Скачайте сценарии PowerShell со страницы со сценариями для инструментов Эластичной базы данных Azure.

Библиотека клиента с инструментами эластичной базы данных доступна в GitHub: Azure/elastic-db-tools.

Используйте средство разбиения и слияния для перемещения данных из модели с несколькими клиентами в модель с одним клиентом и наоборот. Ознакомьтесь со статьей о средстве разбиения и объединения.

Дополнительные ресурсы

Сведения о распространенных шаблонах архитектуры данных для мультитенантных приложений базы данных SaaS см. в статье Шаблоны разработки для мультитенантных приложений SaaS с использованием Базы данных Azure SQL.

Вопросы и запросы на функции

Вопросы можно задавать на странице вопросов о Базе данных SQL на сайте Microsoft, а запросы новых функций публиковать на форуме о Базе данных SQL.