Как мне структурировать этот проект, который использует технологии SSIS, XML и BizTalk? - PullRequest
2 голосов
/ 03 августа 2011

Я работаю над проектом по обработке трех файлов ... двух CSV и одного XML.Эти файлы перемещаются из общей папки в таблицу базы данных SQL Server с помощью BizTalk.XML-файл преобразуется в тот же формат плоских файлов, что и два плоских файла, с использованием компонента C # в SSIS.Затем эти плоские файлы обрабатываются пакетами служб SSIS.В преобразованиях служб SSIS много бизнес-логики.Пакеты служб SSIS также выполняют несколько операций поиска с использованием связанных серверов.Все поиски и преобразования выполняются построчно (что медленно).Кроме того, любые возникающие ошибки помещаются в отдельную таблицу базы данных в зависимости от бизнес-объекта, который вызывает ошибку (т. Е. BusObj1_error, BusObj2_error, BusObj3_error).По сути, я надеялся, что кто-то сможет предложить лучшую архитектуру, которая улучшит производительность, обеспечит масштабируемость и гибкость, а также позволит многим разработчикам работать в одной команде с одинаковыми функциональными возможностями.Например, поместите правила проверки в БД, а не жестко закодируйте в SSIS.
- Вместо использования разных таблиц ошибок используйте одну таблицу ошибок с errorTypeId FK для таблицы ErrorType.- Перенесите все преобразования из SSIS C #, чтобы несколько разработчиков могли одновременно работать с различными классами бизнес-логики.

Спасибо

Ответы [ 3 ]

3 голосов
/ 03 августа 2011

Я ничего не знаю о BizTalk. Итак, я не знаю, что он может или не может сделать. Что касается SSIS, мои предложения будут следующими:

  1. Если у вас много кода бизнес-логики, встроенного в Script Task / Script Component. Я бы посоветовал вам создать проект библиотеки классов C # и зарегистрировать DLL в GAC для ссылки на него в пакете служб SSIS. Сделайте DLL универсальной, чтобы для ее реализации в пакете служб SSIS требовалось совсем немного кода. Таким образом, вы также можете повторно использовать логику.

  2. Что касается поиска с использованием связанного сервера, я надеюсь, что я правильно понимаю. Вы говорите, что у вас есть связанные серверы, указывающие на другие экземпляры, и ваш поиск указывает на эти связанные серверы? Если базы данных находятся на экземплярах SQL Server, почему бы не создать строку подключения, непосредственно указывающую на базу данных, и выполнить поиск? Это бы сильно ускорило процесс.

  3. Используете ли вы много преобразований команд OLE DB в вашем пакете? Если это прямая вставка, попробуйте использовать OLE DB Destination, чтобы ускорить процесс.

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

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

Надеюсь, это даст вам некоторое представление.

Редактировать 1:

У меня было ощущение, что вы собираетесь сказать, что база данных поиска - это DB2. Тем не менее, связанный сервер может замедлить пакет. Преобразование «Уточняющий запрос» поддерживает запросы напрямую к базе данных DB2, а также к SQL Server и Oracle ( MSDN ). Вы можете избежать поиска через связанный сервер.

Как только проект библиотеки классов C # скомпилирован в dll, вы также можете ссылаться на него из VB.NET. Пока ваша DLL ориентирована на .NET Framework 2.0, я думаю, что вы должны хорошо ссылаться на нее в SSIS 2005.

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

0 голосов
/ 05 августа 2011

Несколько предложений ...

Если вы используете BizTalk просто для перемещения файлов из общей папки в таблицу базы данных SQL Server, то я предлагаю вам полностью исключить BizTalk из картинки и использовать SSISтолько.Если вам не требуются какие-либо функции, предоставляемые BizTalk, не используйте BizTalk.Сохраняйте это простым.

Кроме того, вы получите максимально возможную производительность при использовании BCP.Подготовьте свои данные, используя SSIS, затем загрузите их в целевую базу данных, используя BCP.

0 голосов
/ 03 августа 2011

Если характер этих данных в реальном времени, то вы должны делать как можно больше в BizTalk.

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

Вы можете легко увеличить пропускную способность, масштабируя по горизонтали, позволяя обрабатывать одновременно много десятков или даже сотен предметов.

...