데이터베이스에 플랫 파일을로드하기 위해 SSIS 또는 Multithreaded C# 응용 프로그램과 함께 가야합니까?

StackOverflow https://stackoverflow.com/questions/146732

  •  02-07-2019
  •  | 
  •  

문제

SSIS (SQL Server Integration Services) 내에서 수백만 개의 레코드를 보유하고 해당 데이터를 SQL DB로 푸시 할 수있는 플랫 파일에 대한 연결을 설정하는 기능이 있습니다. 또한이 프로세스는 Microsoft.sqlserver.dts.runtime 네임 스페이스를 참조하고 사용하여 C# 앱에서 호출 할 수 있습니다.

수백만의 레코드가 가장 적합한 플랫 파일은 SSIS와 함께 실행되거나 여러 작업자 스레드가있는 AC# 앱을 선호합니까 (하나는 변수에 행을 읽고 추가 할 수있는 AC# 앱을 선호합니까? , 그리고 그 스레드를 관리하는 "어머니"클래스? (Dev Box에는 두 개의 CPU가 있습니다)

나는이 데이터를 보았다 (SQL 팀 블로그)) 백만 행이있는 플랫 파일의 경우 SSI가 가장 빠릅니다.

Process                Duration (ms)
--------------------   -------------
SSIS - FastParse ON         7322 ms 
SSIS - FastParse OFF        8387 ms 
Bulk Insert                10534 ms 
OpenRowset                 10687 ms 
BCP                        14922 ms

당신의 생각은 무엇입니까?

도움이 되었습니까?

해결책

나는 나 자신과 내 경험만을 말할 수 있습니다. 나는 SSI와 함께 갈 것입니다. 왜냐하면 이것은 당신이 휠을 불필요하게 다시 발명 할 수있는 경우 중 하나이기 때문입니다. 이것은 이미 SSI에 의해 해결 된 반복적 인 작업입니다.

나는 매일 관리하는 약 57 개의 일자리 (DTS와 SSI의 조합)를 가지고 있습니다. 이 중 4 개는 일상적으로 5 ~ 1 억 개의 기록을 처리합니다. 내가 관리하는 데이터베이스에는 약 20 억 행이 있습니다. 나는 스크립트 작업을 사용하여 날짜를 밀리 초까지 추가하여 하루에 여러 번 일자리를 실행할 수 있도록했습니다. 지금 약 22 개월 동안 그 일을 해왔습니다. 훌륭했습니다!

SSIS 작업도 예약 할 수 있습니다. 그래서 당신은 그것을 설정하고 잊을 수 있습니다. 나는 매일 모든 것을 모니터링하지만 파일 처리 부분은 결코 분류되지 않았습니다.

Custom C# 프로그램에 의지해야 할 유일한 시간은 매우 큰 파일을 작은 청크로 나누어야 할 때였습니다. SSIS는 그런 종류의 물건에 대해 느리게 개입니다. 스크립트 작업을 사용하여 하나의 공연 텍스트 파일을 분할하는 데 약 1 시간이 걸렸습니다. C# 사용자 정의 프로그램은 12 분 안에 처리했습니다.

결국, 당신이 편안하게 사용하는 것을 사용하십시오.

다른 팁

SSI는 엄청나게 빠릅니다. 또한 반복적으로 발생 해야하는 경우 에이전트를 설정하여 일정에 따라 해고 할 수 있습니다. 그것을 직접 작성하는 것은 한 가지이며, 멀티 스레드로 만들려고 시도하는 것은 처음에 나타나는 것보다 훨씬 더 복잡해집니다.

SSIS를 10 명 중 9 회 추천합니다.

이 경우 여러 스레드를 사용하는 것이 성능에 어떻게 도움이되는지 알 수 없습니다. 많은 양의 데이터를 전송할 때 주 병목 현상은 일반적으로 디스크 I/O입니다. 여러 스레드를 산란하면이 문제를 해결하지 못할 것이며, 데이터베이스에 도달하는 여러 프로세스간에 잠금 경합이 발생하기 때문에 상황이 악화 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top