Добро пожаловать на еще одну статью о концепциях SQL Server! В этой статье мы будем обсуждать, как Azure SQL Database Elastic Scale может быть использован для горизонтального масштабирования системы учета заработной платы с помощью PowerShell.
Если вы следите за этой серией статей, вы можете вспомнить, что в предыдущих статьях мы обсуждали деловую модель для горизонтального масштабирования, настройку базы данных Shard Map Manager и создание таблиц в этой базе данных. В этой статье мы рассмотрим создание Sharded Databases и исследуем, как их можно запросить с помощью C# Console Application.
PowerShell Runbook
В конце предыдущей статьи мы использовали PowerShell Runbook для настройки базы данных Shard Map Manager. Эта база данных содержит информацию о различных Shard и о том, как эти Sharded Databases должны быть запросены. Следующая часть Runbook создает 4 Sharded databases.
Первая Sharded Database будет содержать EmployeeID с 1 по 25, вторая будет содержать EmployeeID с 26 по 50, третья будет содержать EmployeeID с 51 по 75, а последняя Sharded Database будет содержать EmployeeID с 76 по 100.
Давайте посмотрим на PowerShell-код, который создает Sharded Database PayrollEmployee_1_25 и 4 таблицы, которые управляют Sharding в Sharded Database:
Create Sharded Database
Эта часть Runbook создает Sharded Database PayrollEmployee_1_25 и 4 таблицы, которые управляют Sharding в Sharded Database. Как видите, эти таблицы похожи на таблицы, которые включены в базу данных Shard Map Manager, за исключением того, что в их названии есть слово "Local" вместо "Global".
[__ShardManagement].[ShardMapManagerLocal] - Сохраняет информацию о версии Elastic Scale Database. Данные в этой таблице идентичны данным в таблице [__ShardManagement].[ShardMapManagerGlobal] в базе данных Shard Map Manager.
[__ShardManagement].[ShardMappingsLocal] - Сохраняет информацию о созданных Shard, такую как минимальное и максимальное значения для каждого Shard. В настоящее время эта таблица пуста.
[__ShardManagement].[ShardMapsLocal] - Сохраняет ShardMapId и имя Shard Map, которая была создана. Вся остальная информация, которую мы создаем в базе данных Shard Map Manager, будет ссылаться на этот ShardMapId.
[__ShardManagement].[ShardsLocal] - Сохраняет информацию о Sharded database, содержащей Shard. Данные в этой таблице очень похожи на данные в таблице [__ShardManagement].[ShardsGlobal] в базе данных Shard Map Manager.
Следующая часть PowerShell Runbook создает Shard Maps в Sharded Database. Она устанавливает минимальное значение для Shard равным 1 и максимальное значение для Shard равным 25. Она также вызывает пользовательскую функцию PowerShell с именем Populate-SqlDatabase для создания таблиц Employee, Payroll и PayrollDetails.
Важно отметить, что в рабочей системе вы, вероятно, захотите выполнить этот шаг как пакет SSIS после настройки Sharded Databases. Однако, для целей этой демонстрации, мы делаем это внутри Runbook.
Запрос к Sharded Databases
Теперь, когда мы создали Sharded Databases, давайте исследуем, как мы можем их запросить. К сожалению, нет способа продемонстрировать это в Enterprise Manager, поэтому мы написали Console Application на C#, чтобы показать процесс.
Console Application использует ShardMapManagerFactory для получения ссылки на ShardMapManager с использованием строки подключения к базе данных Shard Map Manager. Затем он использует метод TryGetRangeShardMap для получения всех отображений для Shard.
Перед выполнением запроса Console Application извлекает все Shard из отображений и использует их для создания объекта MultiShardConnection. Отсюда все происходит так же, как обычно с использованием ADO.NET, хотя вместо объектов Command и DataReader мы используем объекты MultiShardCommand и MultiShardDataReader.
При запуске Console Application и указании EmployeeID возвращается правильная информация из соответствующего Sharded Database Shard.
Заключение
Используя Azure SQL Database Elastic Scale, мы можем горизонтально масштабировать систему учета заработной платы и распределить данные по нескольким Sharded Databases. Это позволяет улучшить производительность и масштабируемость.
В этой статье мы рассмотрели создание Sharded Databases с использованием PowerShell и продемонстрировали, как их запросить с помощью C# Console Application. Мы надеемся, что это дает вам ценные идеи о возможностях Azure SQL Database Elastic Scale.
Ожидайте новых статей о концепциях и bewt практиках SQL Server!