기타

[Java] POI SXSSF

royleej9 2019. 5. 30. 00:05

SXSSF

XSSF와 SXSSF 차이점이 궁금해서 정리해 봄

특징

  • XSSF의 메모리 부족 관련 보완하여 XSSF보다 매우 큰 엑셀 파일을 생성할 수 있음
  • XSSF는 전체 행에 대한 컨트롤이 가능하지만 SXSSF는 지정된 행 (window size)에 관해서만 컨트롤이 가능해서 메모리를 적게 사용
  • 지정된 행을 벗어나면 가장 낮은 행은 엑세스 할수 없음 -> 메모리에서 삭제/임시 파일에 저장됨
  • flushRows를 호출함으로써 수동으로 메모리에서 삭제 / 저장 할수 있음

XSSF와의 차이점

  • 제한된 수의 행만 접근 가능
  • Sheet.clone() 사용 못함
  • 수식 평가 사용 못함

엑셀 파일(xlsx) 생성 과정

  • Sheet 생성

    • sheet 마다 임시 파일(xml / gz)을 생성해서 기록함 / 20 MB정도의 csv 파일이 몇 GB 크기가 될수 있음
    • 압축여부에 따라 GZIPSheetDataWriter / SheetDataWriter 객체 생성 - 성능에 영향 미침
  • Row 생성

    • row 생성할때마다 접근가능한 windowSize를 체크해서 지정된 크기가 초과하는 부분은 메모리에서 삭제 및 임시 파일에 저장
    • java.io.Writer
  • write ???

    • 임시 파일 생성 - poi-sxssf-template.xlsx
    • 임시 파일에 데이터 저장 및 압축

참고

https://poi.apache.org/components/spreadsheet/