2017-02-25 5 views
0

Excel 보고서는 1 백만 행과 800 열을 지원해야합니다. 응용 프로그램은 두 가지 모드로 Excel을 생성해야합니다. 1.online, 그리드 뷰에서 엔티티 선택시 보고서를 생성해야합니다. 2.offline, 사용자는 여러 엔티티를 선택할 수 있으며 UI의 버튼을 사용하여 Excel을 생성하고 메일을 통해 Excel을 수신 할 수 있습니다.내보내기 500 열 1 백만 행 .NET 3.5 프레임 워크를 사용하는 응용 프로그램 빌드에서 SQL 데이터베이스의 Excel 데이터로 Excel

현재 응용 프로그램은 위의 기능을 지원하지만 내보내기 속도가 매우 느립니다. 응용 프로그램과 데이터베이스가 동일한 서버에 있습니다. 이를 염두에두고 우리는 최소한의 성능 문제로 애플리케이션의 데이터가 10 배나 빠르게 증가하는 프레임 워크를 설계해야합니다.

SSIS가 그 목적을 수행합니까 아니면 다른 것이 제안합니까?

+0

"피벗 테이블이 데이터베이스에 연결되어 있습니다"라고 생각합니다. –

+1

그건 내가 Excel에 넣을 것 이상의 것입니다. 1) 어떻게 이러한 많은 양의 데이터를 사용할 수 있으며 2) Excel에서 이러한 많은 양의 데이터를 소비 할 것으로 기대할 수 있습니까? ;-) –

+0

현재 우리는 오픈 XML을 사용합니다. 여러 사용자가 업로드 및 내보내기 작업을 수행 한 결과 많은 수의 내보내기가 발생 했으므로 특히 수출이 약 20K + 레코드 인 경우 응용 프로그램이 멈추는 것을 발견했습니다. 우리는 애플리케이션이 10 배 데이터를 처리해야하며 성능이 주요 관심사라고 생각합니다. –

답변

0

당신은 UI가 무엇인지 말하지 않지만 "온라인"이라고 말하면서 브라우저라고 가정합니다. 따라서 가장 빠른 방법은 SQL Server를 쿼리하고 데이터 집합을 추출한 다음 문서화 된 OpenDocument XML을 사용하여 MVC 컨트롤러/웹 API에서 반환되는 응답 스트림의 일부로 XLSX 파일을 생성하는 것입니다. 이렇게하면 데이터 처리량이 최소화되고 웹 서버에서 텍스트 처리가 유지됩니다.

+0

현재 오픈 XML을 사용하고 있습니다. 여러 사용자가 업로드 및 내보내기를 수행하므로 많은 양의 내보내기가 발생합니다. 특히 데이터가 약 20K + 레코드 인 경우 응용 프로그램이 중지됩니다. 우리는 애플리케이션이 10 배 데이터를 처리해야하며 성능이 주요 관심사라고 생각합니다. 현재 우리는 서버 쪽에서 Excel을 생성하고 오프라인 용 메일을 사용하여 보내고 사용자가 다운로드 할 수있는 온라인을 제공합니다. 우리는 프레임 워크 또는 다른 대안의 개선을 찾고 있습니다. –

+0

응용 프로그램 스택에서 시간이 어디서 보내고 있는지 자세히 알려줘야합니다. 프로파일 러를 사용하여 시간이 어디에서 사용되고 있는지 확인 했습니까? 가장 비싼 프로세스를 격리 할 수 ​​있습니까? 응용 프로그램이 이미 최적으로 코딩되어 있고 IIS를 사용하고 있고로드가 XML 생성에있는 경우 다른 시스템에서 몇 가지 IIS 인스턴스를 확장하면됩니다. 한 번 사용하면 높은 부하에 대처할 수있는 전통적인 방법입니다. 코드 비효율을 제거했습니다. – PhillipH

0

1 백만 개의 레코드가 확실히 시간이 걸리고 동시 환경에서는 좋지 않습니다. 이 서비스 중단을 방지하려면 서비스 지향 아키텍처를 사용하거나 코드를 비동기 적으로 실행하는 것이 가장 좋습니다. 내보내기 처리 (예 : 서비스)는 백그라운드 스레드에서 실행되어로드를 처리해야합니다.

작성이 완료되면 언급 한대로 메일을 보내십시오. 또는 응용 프로그램 temp dir에 저장하고 SignalR을 사용하여 (예 : Ajax로 서버 풀링) 서비스의 프로세스가 완료되었는지 확인하십시오. 그렇다면 클라이언트를 리디렉션하여 파일을 다운로드하십시오.