큰 결과 집합 (약 2 천만 레코드)을 반환하는 저장 프로 시저가 있습니다. 이 결과를 여러 XML 파일에 저장해야합니다. 현재 ADO.Net 데이터 집합을 채우기 위해 사용하고 있지만 신속하게 System.OutOfMemoryException throw합니다. 이 작업을 수행하는 데 사용할 수있는 다른 방법은 무엇입니까?큰 결과 집합을 여러 XML 파일로 저장
0
A
답변
1
SQL Server를 사용하고 있습니까?
이 경우에는 쿼리 결과를 xml 구조로 자동 변환하는 sql 명령이 있으므로 응용 프로그램에서 문자열로 가져옵니다.
옵션 :
당신은 여러 사람에 문자열을 분할하고 그들에게 서로 다른 문자열을 얻을 여러 XML 객체로 결과를 분할하는 PS를 수정 (응용 프로그램에서) 파일을
을 저장할/행 (1 행 => 1 개체)을 만들고 각 파일을 파일로 저장합니다.
- 는 그냥 SQL 서버를 사용하지 않는 응용 프로그램
에 저장할 필요가 X의 XML 문자열을 반환 X의 XML 객체로 원래 PS, 분할 결과를 호출하는 새로운 PS 쓰기? 당신은 SQL Server를 사용하는 가정
1
서버 측에게 서식 XML을 쉽게 될 것이라고 생각하는 경우
는 PS에 서식 XML을하거나 어쨌든 그것을 을하는 새로운 쓰기 - 당신을 저장 프로 시저에서 페이징을 사용할 수 있습니다. ROW_NUMBER은 옵션입니다. SQL Server 2012 이상은 OFFSET and FETCH을 지원합니다.또한 얼마나 많은 데이터 테이블을 채우고 있습니까? DataTables에는 행 제한이 있습니다.
DataTable을 저장할 수있는 행의 최대 수는 16,777,216
https://msdn.microsoft.com/en-us/library/system.data.datatable.aspx
스트리밍 할 수있는 XML 라이브러리를 사용한다. 예 : 전체 데이터 구조가 메모리에 저장 될 필요없이 xml을 출력 할 수 있습니다. 레코드를 읽고, 그 레코드의 xml을 뱉어 내며 반복하십시오. –
@Marc : 나는 당신의 생각을 잘 모르고있다. 모범이 있습니까? 나는 "For XML PATH"를 지금 시도하고 있으며 결과를 거대한 XML로 만듭니다. XML 파일에 쓸 수있는 여러 XML 레코드로 나누는 방법을 찾고 있습니다. –
DataSet을 채우기보다는 적절한 [DataReader] (https://msdn.microsoft.com/en-us/library/haa3afyz.aspx)를 가져 와서 그 파일을' XmlWriter'? – dbc