Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: База данных SQL Azure
Обзор
С помощью горизонтального масштабирования с базой данных SQL Azure можно создавать сегментированные решения для баз данных. Многосегментное формирование запросов используется для таких задач, как сбор данных и создание отчетов, требующих запуска запроса, распространяющегося на несколько сегментов. (Сравните с маршрутизацией, зависящей от данных, когда все действия выполняются в пределах одного сегмента.)
-
RangeShardMap
Получите (Java, NET) илиListShardMap
(Java, NET) с помощью методаTryGetRangeShardMap
(Java, NET), методаTryGetListShardMap
(Java, NET) илиGetShardMap
(Java, NET). Обратитесь к разделам Создание объекта ShardMapManager и Получение RangeShardMap или ListShardMap. -
MultiShardConnection
Создайте объект (Java, .NET). - Создайте
MultiShardStatement
илиMultiShardCommand
(Java, .NET). - Установите
CommandText property
(Java, .NET) как команду T-SQL. - Выполните команду, вызвав метод
ExecuteQueryAsync
илиExecuteReader
(Java, .NET). - Просмотрите результаты с помощью класса
MultiShardResultSet
илиMultiShardDataReader
(Java, .NET).
Пример
В следующем коде показано использование запросов по нескольким шардам с помощью заданного ShardMapmyShardMap
.
using (MultiShardConnection conn = new MultiShardConnection(myShardMap.GetShards(), myShardConnectionString))
{
using (MultiShardCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT c1, c2, c3 FROM ShardedTable";
cmd.CommandType = CommandType.Text;
cmd.ExecutionOptions = MultiShardExecutionOptions.IncludeShardNameColumn;
cmd.ExecutionPolicy = MultiShardExecutionPolicy.PartialResults;
using (MultiShardDataReader sdr = cmd.ExecuteReader())
{
while (sdr.Read())
{
var c1Field = sdr.GetString(0);
var c2Field = sdr.GetFieldValue<int>(1);
var c3Field = sdr.GetFieldValue<Int64>(2);
}
}
}
}
Основное различие состоит в построении многосегментных подключений. Где SqlConnection
работает с отдельной базой данных, в MultiShardConnection
качестве входных данных принимается коллекция сегментов. Коллекция сегментов заполняется из карты сегментов. Запрос затем выполняется на коллекции фрагментов, используя семантику UNION ALL
, чтобы собрать единый общий результат. При необходимости имя сегмента, из которого происходит строка, можно добавить в выходные данные с помощью ExecutionOptions
свойства в команде.
Обратите внимание на вызов myShardMap.GetShards()
. С помощью этого метода все сегменты извлекаются из карты сегментов, и обеспечивается простой способ выполнения запроса по всем соответствующим базам данных. Сбор фрагментов для запроса с несколькими фрагментами можно дополнительно уточнить, выполнив запрос LINQ на коллекцию, возвращенную из вызова myShardMap.GetShards()
. Эта возможность в многосегментном формировании запросов, в сочетании с политикой частичных результатов, разработана для применения к сегментам в количестве от десятков до сотен.
В настоящий момент существует ограничение для многосегментного формирования запросов, состоящее в отсутствии проверки для сегментов и шардлетов, к которым обращен запрос. Если при маршрутизации, зависящей от данных, выполняется проверка того, что указанный сегмент является частью карты сегментов на момент выполнения запроса, то при многосегментном формировании запросов такая проверка не происходит. Это может привести к тому, что многосегментные запросы будут обращаться к базам данных, удаленным из карты сегментов.
Многосегментные запросы и операции разбиения-слияния
При многосегментных запросах не выполняется проверка на участие шардлетов из запрашиваемой базы данных в операциях разбиения или слияния. (См. раздел "Перемещение данных между масштабируемыми облачными базами данных".) Это может привести к несоответствиям, когда строки из одного шардлета отображаются для нескольких баз данных в одном запросе с несколькими сегментами. Следует учитывать эти ограничения, фильтрование текущих операций разбиения или слияния, а также изменения сопоставления сегментов при выполнении многосегментных запросов.
Связанный контент
Еще не используете средства эластичных баз данных? Ознакомьтесь с нашим руководством по началу работы. Возникшие вопросы вы можете задать нам на странице вопросов Microsoft Q&A по Базе данных SQL. Что касается запросов новых функций, вы можете поделиться новыми идеями или проголосовать за существующие на форуме отзывов по Базе данных SQL.