2011-08-03 1 views
2

저는 두 개의 CSV와 하나의 XML 파일 세 개를 처리하는 프로젝트를 진행하고 있습니다. 이러한 파일은 BizTalk를 사용하여 파일 공유에서 SQL Server 데이터베이스 테이블로 이동됩니다. xml 파일은 SSIS의 C# 구성 요소를 사용하는 두 개의 플랫 파일과 동일한 플랫 파일 형식으로 변환됩니다. 그런 다음 이러한 플랫 파일은 SSIS 패키지에 의해 처리됩니다. SSIS 변환에는 많은 비즈니스 논리가 있습니다. SSIS 패키지는 연결된 서버를 사용하여 여러 가지 조회를 수행합니다. 모든 조회 및 변환은 행 단위로 수행됩니다 (느림). 또한 발생하는 모든 오류는 오류를 발생시키는 Business Object (예 : BusObj1_error, BusObj2_error, BusObj3_error)에 따라 별도의 데이터베이스 테이블에 저장됩니다. 기본적으로 성능을 향상시키고 확장 성과 유연성을 허용하는 더 나은 아키텍처를 제안하고 많은 개발자가 동일한 기능을 수행하는 팀으로 일할 수 있기를 바랍니다. 예. - 유효성 검사 규칙을 SSIS로 하드 코딩하지 않고 db에 넣습니다.
- 다른 오류 테이블을 사용하는 대신 errorTypeId FK가있는 단일 오류 테이블을 ErrorType 테이블에 사용하십시오. - 여러 개발자가 서로 다른 비즈니스 논리 클래스에서 동시에 작업 할 수 있도록 SSIS C#의 모든 변환을 마이그레이션합니다.SSIS, XML 및 BizTalk 기술을 사용하는이 프로젝트를 어떻게 구성합니까?

감사합니다.

답변

3

저는 BizTalk에 대해 아무것도 모릅니다. 그래서, 나는 그것이 할 수 있거나 할 수없는 것을 모른다. SSIS와 관련하여 제안 사항은 다음과 같습니다.

  1. 스크립트 태스크/스크립트 구성 요소에 많은 비즈니스 로직 코드가 포함되어있는 경우. C# 클래스 라이브러리 프로젝트를 만들고 SSIS 패키지 내에서이를 참조하기 위해 GAC에 DLL을 등록하는 것이 좋습니다. SSIS 패키지 내에 DLL을 구현하는 데 필요한 코드가 거의 없도록 DLL을 일반화합니다. 이렇게하면 논리를 다시 사용할 수도 있습니다.

  2. 링크 된 서버를 사용한 조회와 관련하여이 내용을 올바르게 이해하기 바랍니다. 다른 인스턴스를 가리키는 서버를 연결했는데 조회가 연결된 서버를 가리키고 있다고 말하는 것입니까? 데이터베이스가 SQL Server 인스턴스에있는 경우 데이터베이스를 직접 가리키는 연결 문자열을 작성하고 조회를 수행하는 것이 좋습니다. 이것은 많은 것을 가속화 할 것입니다.

  3. 패키지에 많은 OLE DB 명령 변환을 사용하고 있습니까? 직접 삽입 인 경우 작업 속도를 높이기 위해 OLE DB 대상을 사용해보십시오.

  4. 이 대답은 How can I load a large flat file into a database table using SSIS?입니다. 여기서 처리 속도를 높이기 위해 행 변환을 여러 대상으로 분할하는 방법을 설명했습니다.

  5. 사용자 정의 설계된 데이터베이스를 작성하고 있으므로 다중 오류 테이블을 작성하지 않고 오류 메시지를 저장하기 위해 헤더 - 세부 테이블 구조를 갖는 것이 좋습니다. 논리를 향후 범위 변경을 수용 할 수 있도록 좀 더 일반화하는 것을 선호합니다.

희망은 당신에게 몇 가지 아이디어를 제공합니다.

편집 1 :

난 당신이 조회 데이터베이스가 DB2이라고 말을하려고하는 느낌이 있었다. 그래도 링크 된 서버로 인해 패키지 속도가 느려질 수 있습니다. 조회 변환은 SQL Server 및 Oracle (MSDN)과 함께 DB2 데이터베이스에 대해 직접 쿼리를 지원합니다. 연결된 서버를 통해 조회를 피할 수 있습니다.

일단 C# 클래스 라이브러리 프로젝트가 dll로 컴파일되면 VB.NET에서도 참조 할 수 있습니다. DLL이 .NET Framework 2.0을 목표로 삼는 한 SSIS 2005에서 참조하는 것이 좋습니다.

또한 .NET 코드에 포함 된 논리에 따라 다른 방법으로 개선 할 수 있습니다. 그 논리는 저장 프로 시저에 쓰여질 수있는 것입니까? 이 경우 준비 테이블에 데이터를로드하고 스테이지 데이터에 논리를 적용한 저장 프로 시저를 실행 한 다음 대상 테이블에 데이터를 전송합니다.

+0

답장을 보내 주셔서 감사합니다. RE 포인트 1; 예, 그것이 제가 일하는 팀에서 제안 된 것이지만, 이것은 매우 느릴 것이라고 제안되었습니다 (플랫 파일 당 약 20,000 행을 처리 할 것입니다). 이 일에 대해 들어 보셨습니까? C# 및 SSIS 2005를 사용합니다. SSIS 2005 스크립트 작업은 VB.Net 만 지원합니다. SSIS 2005에서 C# 어셈블리를 호출하는 데 문제가 있습니까? RE 포인트 3, 연결된 서버 쿼리가 DB2 데이터베이스에서 다시 실행됩니다. 그 개선책으로 제안 할 수있는 것이 있습니까? 포인트 4 또한 도움이됩니다! – Brendan

+0

다시 한번 시바! – Brendan

0

이 데이터의 특성이 실시간 인 경우 가능한 한 BizTalk에서 수행해야합니다.

예를 들어, XSL 변환은 초고속 스트림 기반 처리를 의미하는 파이프 라인에서 즉석에서 적용 할 수 있습니다.

가로로 배율을 조정하여 처리량을 쉽게 늘릴 수 있으므로 많은 항목을 동시에 10 개 또는 100 개까지 처리 할 수 ​​있습니다.

+0

감사합니다. Hugh. 데이터가 실시간이 아닙니다. 몬티 (Montly) 기준으로 대량으로 (약 20,000 행) 수신됩니다. – Brendan

0

제안의 몇 ...

SQL Server 데이터베이스 테이블에 파일 공유에서 파일을 이동하려면 단순히 BizTalk를 사용하는 경우, 그럼 난 당신이 모두 그림에서 BizTalk을 만 SSIS를 사용하는 것이 좋습니다 . BizTalk에서 제공하는 기능이 필요하지 않은 경우 BizTalk를 사용하지 마십시오. 단순하게 유지하십시오.

또한 BCP를 사용하면 최상의 성능을 얻을 수 있습니다. SSIS를 사용하여 데이터를 준비한 다음 BCP를 사용하여 대상 데이터베이스에로드하십시오.