Поделиться через


Основные сведения о синхронных и асинхронных преобразованиях

Чтобы понять разницу между синхронным и асинхронным преобразованием в службах Integration Services, проще всего начать с основных сведений о синхронном преобразовании. Если синхронное преобразование соответствует требованиям пользователя, может потребоваться асинхронное преобразование.

Синхронные преобразования

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

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

При создании сценариев и программ для служб Integration Services синхронное преобразование указывается следующим образом: определяется идентификатор входных данных компонента и назначается свойству SynchronousInputID выходных данных компонента. Подсистема обработки потока данных обрабатывает каждую строку входных данных и отправляет ее автоматически в указанное место назначения. Если нужно, чтобы каждая строка направлялась на каждый выход, необходимо создать дополнительный код для вывода данных. При использовании свойства ExclusionGroup для указания, что строки должны направляться на тот или иной выход, как при преобразовании «Условное разбиение», необходимо вызвать метод DirectRow, чтобы выбрать место назначения для каждой строки. Для выхода ошибок необходимо вызвать метод DirectErrorRow, чтобы направлять проблемные строки на выход ошибок, а не на выход по умолчанию.

Асинхронные преобразования

Если нет возможности обрабатывать каждую строку независимо от всех остальных строк, может потребоваться асинхронное преобразование. Иными словами, нельзя передавать каждую строку в поток данных по мере обработки, а вместо этого требуется выводить данные асинхронно или не одновременно с входом. Например, в следующих сценариях требуется асинхронное преобразование.

  • Компоненту требуется получить несколько буферов данных, прежде чем выполнить обработку. Примером является преобразование «Сортировка», при котором компоненту нужно обработать полный набор строк за одну операцию.

  • Компонент должен объединить строки из нескольких источников. Примером является преобразование «Слияние», при котором компонент должен исследовать несколько строк из каждого источника и объединить их в порядке сортировки.

  • Между входными и выходными строками нет однозначного соответствия. Примером является преобразование «Статистическая обработка», при котором компонент должен добавить к выходным данным строку, содержащую вычисленные статистические значения.

При создании сценариев и программ для служб Integration Services асинхронное преобразование указывается следующим образом: значение 0 назначается свойству SynchronousInputID выходных данных компонента. . Подсистема обработки потока данных не отправляет каждую строку автоматически на выход. Затем требуется написать код для явной отправки каждой строки на соответствующий выход, добавив ее в новый выходной буфер, созданный для выходных данных асинхронного преобразования.

ПримечаниеПримечание

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

Также можно создать асинхронное преобразование, имитирующее синхронное преобразование, путем явного копирования каждой входной строки в выходные данные. С помощью этого подхода можно переименовывать столбцы или преобразовывать типы или форматы данных. Однако этот подход снижает производительность. Можно получить те же результаты с более высокой производительностью, используя встроенные компоненты служб Integration Services, такие как «Копирование столбца» или «Конвертация данных».

Значок служб Integration Services (маленький)Будьте в курсе новых возможностей cлужб Integration Services

Чтобы загружать новейшую документацию, статьи, образцы и видеоматериалы от корпорации Майкрософт, а также лучшие решения от участников сообщества, посетите страницу Integration Services на сайтах MSDN или TechNet:

Чтобы получать автоматические уведомления об этих обновлениях, подпишитесь на RSS-каналы, предлагаемые на этой странице.